107 lines
3.2 KiB
JavaScript
107 lines
3.2 KiB
JavaScript
const screen = uni.getSystemInfoSync().windowWidth / 750
|
|
export function toPx(value, baseSize) {
|
|
// 如果是数字
|
|
if (typeof value === 'number') {
|
|
return value
|
|
}
|
|
// 如果是字符串数字
|
|
if (isNumber(value)) {
|
|
return value * 1
|
|
}
|
|
// 如果有单位
|
|
if (typeof value === 'string') {
|
|
const reg = /^-?[0-9]+([.]{1}[0-9]+){0,1}(rpx|px|%)$/g
|
|
const results = reg.exec(value);
|
|
if (!value || !results) {
|
|
return 0;
|
|
}
|
|
const unit = results[2];
|
|
value = parseFloat(value);
|
|
let res = 0;
|
|
if (unit === 'rpx') {
|
|
res = Math.round(value * (screen || 0.5) * 1);
|
|
} else if (unit === 'px') {
|
|
res = Math.round(value * 1);
|
|
} else if (unit === '%') {
|
|
res = Math.round(value * toPx(baseSize) / 100);
|
|
}
|
|
return res;
|
|
}
|
|
}
|
|
|
|
export function isNumber(value) {
|
|
return /^-?\d+(\.\d+)?$/.test(value);
|
|
}
|
|
|
|
/** 从 0x20 开始到 0x80 的字符宽度数据 */
|
|
export const CHAR_WIDTH_SCALE_MAP = [0.296, 0.313, 0.436, 0.638, 0.586, 0.89, 0.87, 0.256, 0.334, 0.334, 0.455, 0.742,
|
|
0.241, 0.433, 0.241, 0.427, 0.586, 0.586, 0.586, 0.586, 0.586, 0.586, 0.586, 0.586, 0.586, 0.586, 0.241, 0.241, 0.742,
|
|
0.742, 0.742, 0.483, 1.031, 0.704, 0.627, 0.669, 0.762, 0.55, 0.531, 0.744, 0.773, 0.294, 0.396, 0.635, 0.513, 0.977,
|
|
0.813, 0.815, 0.612, 0.815, 0.653, 0.577, 0.573, 0.747, 0.676, 1.018, 0.645, 0.604, 0.62, 0.334, 0.416, 0.334, 0.742,
|
|
0.448, 0.295, 0.553, 0.639, 0.501, 0.64, 0.567, 0.347, 0.64, 0.616, 0.266, 0.267, 0.544, 0.266, 0.937, 0.616, 0.636,
|
|
0.639, 0.64, 0.382, 0.463, 0.373, 0.616, 0.525, 0.79, 0.507, 0.529, 0.492, 0.334, 0.269, 0.334, 0.742, 0.296
|
|
];
|
|
|
|
/**
|
|
* @param {Object} base64data
|
|
*/
|
|
export function base64src(base64data) {
|
|
return new Promise((resolve, reject) => {
|
|
const fs = uni.getFileSystemManager()
|
|
//自定义文件名
|
|
const [, format, bodyData] = /data:image\/(\w+);base64,(.*)/.exec(base64data) || [];
|
|
if (!format) {
|
|
reject(new Error('ERROR_BASE64SRC_PARSE'))
|
|
}
|
|
const time = new Date().getTime();
|
|
// #ifdef MP-TOUTIAO
|
|
const filePath = `${tt.env.USER_DATA_PATH}/${time}.${format}`
|
|
// #endif
|
|
// #ifdef MP-WEIXIN
|
|
const filePath = `${wx.env.USER_DATA_PATH}/${time}.${format}`
|
|
// #endif
|
|
// #ifdef MP-BAIDU
|
|
const filePath = `${bd.env.USER_DATA_PATH}/${time}.${format}`
|
|
// #endif
|
|
// #ifdef MP-ALIPAY
|
|
const filePath = `${my.env.USER_DATA_PATH}/${time}.${format}`
|
|
// #endif
|
|
// #ifdef MP-QQ
|
|
const filePath = `${qq.env.USER_DATA_PATH}/${time}.${format}`
|
|
// #endif
|
|
// #ifdef MP-360
|
|
const filePath = `${qh.env.USER_DATA_PATH}/${time}.${format}`
|
|
// #endif
|
|
const buffer = uni.base64ToArrayBuffer(bodyData)
|
|
fs.writeFile({
|
|
filePath,
|
|
data: buffer,
|
|
encoding: 'binary',
|
|
success() {
|
|
resolve(filePath)
|
|
},
|
|
fail(err) {
|
|
console.error('获取base64图片失败', JSON.stringify(err))
|
|
reject(err)
|
|
}
|
|
})
|
|
})
|
|
}
|
|
|
|
/**
|
|
* base64 to blob二进制
|
|
*/
|
|
export function dataURItoBlob(dataURI) {
|
|
let mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0]; // mime类型
|
|
let byteString = atob(dataURI.split(',')[1]); //base64 解码
|
|
let arrayBuffer = new ArrayBuffer(byteString.length); //创建缓冲数组
|
|
let intArray = new Uint8Array(arrayBuffer); //创建视图
|
|
|
|
for (let i = 0; i < byteString.length; i++) {
|
|
intArray[i] = byteString.charCodeAt(i);
|
|
}
|
|
return new Blob([intArray], {
|
|
type: mimeString
|
|
});
|
|
}
|