Files
ClassContent/历届学生/韩想/uniappStudy/components/lime-painter/utils.js
2024-09-27 02:06:13 +08:00

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