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 }); }