{"status":true,"data":{"title":"Search results for \"ELS-AN10\"","phones":[{"brand":"Huawei","phone_name":"P40 Pro+","slug":"huawei_p40_pro+-10118","image":"https://fdn2.gsmarena.com/vv/bigpic/huawei-p40-pro-plus.jpg","detail":"http://api-mobilespecs.azharimm.site/v2/huawei_p40_pro+-10118"}]}}
手机屏幕分辨率可以通过微信的wx.getSystemInfo轻松得到,难点是得到ppi或者屏幕尺寸数据,从程序代码本身出发,我试了几个种方法均失败了。继而我想到了一个“曲线方案”,可以通过第三方公共接口拿到手机ppi或者屏幕英寸数据。
1、以“HUAWEI P40 Pro+”为例,我们可以通过wx.getSystemInfo得到model值为ELS-AN10,调用下面这个开放接口(不需要Auth),得到手机的slug。
https://api-mobilespecs.azharimm.site/v2/search?query=ELS-AN10
{"status":true,"data":{"title":"Search results for \"ELS-AN10\"","phones":[{"brand":"Huawei","phone_name":"P40 Pro+","slug":"huawei_p40_pro+-10118","image":"https://fdn2.gsmarena.com/vv/bigpic/huawei-p40-pro-plus.jpg","detail":"http://api-mobilespecs.azharimm.site/v2/huawei_p40_pro+-10118"}]}}
这款手机的slug是“huawei_p40_pro+-10118”。
2、接着以slug为参数调用如下接口查询手机规格:
https://api-mobilespecs.azharimm.site/v2/huawei_p40_pro+-10118
因为json结果太长我给提取下关键数据:
{"status": true,"data": {"brand": "Huawei","phone_name": "P40 Pro+","specifications": [ {"title": "Display","specs": [{"key": "Type","val": ["OLED, 90Hz, HDR10"]},{"key": "Size","val": ["6.58 inches, 105.2 cm2 (~91.6% screen-to-body ratio)"]},{"key": "Resolution","val": ["1200 x 2640 pixels (~441 ppi density)"]}]}]}}
从上述结果就可以得到手机为6.58英寸,ppi约等于441。
例子中的API来自https://github.com/azharimm/phone-specs-api
有了这些数据,“画尺子”就不成问题了。
其实我觉得微信官方是有能力得到一定的手机物理硬件信息的,像手机的PPI这样的数据,至少从安卓原生APP的角度去看,完全是可以得到的(iOS原生不太了解,但是我觉得也是没问题的)。只不过官方API没提供。
try {
var self = this;
system || {
width: 1080, // 屏幕分辨率宽度
height: 2244, //屏幕分辨率高度
diagonal: 5.88, // 设备尺寸
}
const res = wx.getSystemInfoSync()
const dpr = res.pixelRatio;
const dpi = Math.sqrt(system.height ** 2 + system.width ** 2) / system.diagonal; // dpr * 160;
const ratio = dpi / dpr / 96; // 和显示长度的倍数相差
let max_width = {
cm: Math.ceil(system.width / dpr / 96 / ratio * 2.54),
in: Math.ceil(system.width / dpr / 96 / ratio),
}
let max_height = {
cm: Math.ceil(system.height / dpi * 2.54 ), // Math.ceil(system.height / dpr / 96 / ratio * 2.54),
in: Math.ceil(system.height / dpr / 96 / ratio),
}
console.log(max_height)
style="width:{{ max_height[unit] * ratio }}{{ unit }}"
} catch (e) {
// Do something when catch error
console.log(e)
}
是不是这样,假设1cm = 实际像素width 20px
你要根据屏幕dpr去换算尺子的长度?
你看看pixelRatio 设备像素比能不能满足,我有点没看懂你的需求。就说到这吧