牛肉社团前端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
crow_front/shopro/poster/tools.js

197 lines
6.5 KiB

export default {
async checkImgHttp(imgPath, type) {
let res = await this.getImageInfo_PromiseFc(imgPath)
console.log("getImageInfo_PromiseFc",imgPath)
console.log("checkImgHttp",res)
let newPath = '';
if (!res) {
uni.hideLoading()
switch (type) {
case 'avatar':
console.log('%cerr:海报头像图片错误: ' + imgPath, 'color:green;background:yellow');
break;
case 'bgImage':
console.log('%cerr:海报背景图片错误: ' + imgPath, 'color:green;background:yellow');
break;
case 'wxCode':
console.log('%cerr:海报微信二维码图片错误: ' + imgPath, 'color:green;background:yellow');
break;
case 'goodsImage':
console.log('%cerr:海报商品图片错误: ' + imgPath, 'color:green;background:yellow');
break;
default:
break;
}
} else {
let pathArr = imgPath.split('://');
// #ifdef H5
let ishttps = 'https:' == window.location.protocol ? true : false;
ishttps ? (pathArr[0] = 'https') : (pathArr[0] = 'http');
// #endif
// #ifdef MP-WEIXIN
pathArr[0] = 'https'
// #endif
newPath = pathArr.join('://');
}
return newPath;
},
// 检测图片是否可用
getImageInfo_PromiseFc(imgPath) {
console.log("getImageInfo_PromiseFc",imgPath)
return new Promise((rs, rj) => {
imgPath = this.checkMPUrl(imgPath);
console.log("checkMPUrl",imgPath)
uni.getImageInfo({
src: imgPath,
success: res => {
rs(1);
},
fail: err => {
console.log(err)
rs(0);
}
})
});
},
// 微信头像
checkMPUrl(url) {
// #ifdef MP
if (
url.substring(0, 4) === 'http' &&
url.substring(0, 5) !== 'https' &&
url.substring(0, 12) !== 'http://store' &&
url.substring(0, 10) !== 'http://tmp' &&
url.substring(0, 10) !== 'http://usr'
) {
url = 'https' + url.substring(4, url.length);
}
// #endif
return url;
},
/**
* 相对比例
* @param {Object} bgObj - 背景图片数据对象
* @param {Number} num - 需要计算的绘制模块数值
*/
getScale(bgObj, num = 0) {
return Number(bgObj.width * (num / bgObj.width).toFixed(2))
},
/**
* 绘制序列
* @param {Object} bgObj - 背景图片数据对象
* @param {Array} drawArr - 绘制元素数组对象
*/
initDrawArray(bgObj, drawArr) {
const that = this;
let arr = []
drawArr.forEach(item => {
switch (item.type) {
case 'text':
arr.push({
type: 'text',
text: item.text, //文本
size: that.getScale(bgObj, item.size) || 50, //大小
color: item.color || 'black', //颜色
alpha: item.alpha || 1, //透明度
textAlign: item.textAlign || 'left', //文字x对齐方式: 'left'、'middle'、'right'
textBaseline: item.textBaseline ||
'middle', //文字y对齐方式: 'top'、'bottom'、'middle'、'normal'
dx: that.getScale(bgObj, item.dx) || 0, //文字x轴位置
dy: that.getScale(bgObj, item.dy + item.size) || 0, //文字y轴位置
[item.lineFeed ? 'lineFeed' : '']: { //设置换行
maxWidth: item.lineFeed?.maxWidth && that.getScale(bgObj, item.lineFeed
.maxWidth) || bgObj
.width, //最大宽度
lineHeight: item.lineFeed?.lineHeight && that.getScale(bgObj, item
.lineFeed.lineHeight) || 50, //行高
lineNum: item.lineFeed?.lineNum || -1, // 最多行数,小于0为无限
dx: item.lineFeed?.dx || -1, //非第一行文字位置,小于0为默认位置
},
infoCallBack: (textLength) => { //回调函数,返回文本信息
if (item.isBgCenter) {
return {
dx: (bgObj.width - textLength) / 2,
}
}
return {}
},
[item.lineThrough ? 'lineThrough' : '']: { // 设置删除线,默认为字体样式
width: item.lineThrough?.width || item.size / 10,
style: item.lineThrough?.style || item.color,
alpha: item.lineThrough?.alpha || 1,
cap: item.lineThrough?.cap || 'butt',
},
fontStyle: item.fontStyle || 'normal', // 设置字体,跟随系统默认
fontVariant: item.fontVariant || 'normal',
fontWeight: item.fontWeight || 'normal',
fontFamily: item.fontFamily || 'sans-serif',
})
break;
case 'qrcode':
arr.push({
type: 'qrcode',
text: String(item.text || '') || '', // 生成内容
size: Number(that.getScale(bgObj, item.size) || 0) || 200, // 二维码大小
background: String(item.background || '') || '#ffffff', // 背景色
foreground: String(item.foreground || '') || '#000000', // 前景色
correctLevel: Number(item.correctLevel || 0) || 3, // 容错级别
image: String(item.image || '') || '', // 二维码图标
imageSize: Number(that.getScale(bgObj, item.imageSize) || 0) || 40, // 二维码图标大小
dx: item.isBgCenter ? (bgObj.width - item.size) / 2 : Number(that.getScale(
bgObj, item.dx) || 0) || 0,
dy: Number(that.getScale(bgObj, item.dy) || 0) || 0, // y轴距离
})
break;
case 'image':
arr.push({
type: 'image',
url: this.checkImgHttp(item.url, item.name), // 网络图片路径
dWidth: Number(that.getScale(bgObj, item.dWidth) || 0) || 100, //绘制图像的宽度,允许缩放
dHeight: Number(that.getScale(bgObj, item.dHeight) || 0) || 100, //绘制图像的高度,允许缩放
sWidth: Number(that.getScale(bgObj, item.sWidth) || 0) || 100, //绘制图像的宽度,允许缩放
sHeight: Number(that.getScale(bgObj, item.sHeight) || 0) || 100, //绘制图像的高度,允许缩放
dx: Number(that.getScale(bgObj, item.dx) || 0) || 0, // x轴距离
dy: Number(that.getScale(bgObj, item.dy) || 0) || 0, // y轴距离
sx: Number(that.getScale(bgObj, item.sx) || 0) || 0,
sy: Number(that.getScale(bgObj, item.sy) || 0) || 0,
[item.circleSet ? 'circleSet' : '']: { //圆形设置
r: Number(item.circleSet?.r && that.getScale(bgObj, item.circleSet
.r) || 0),
x: Number(item.circleSet?.x && that.getScale(bgObj, item.circleSet
.x) || 0),
y: Number(item.circleSet?.y && that.getScale(bgObj, item.circleSet
.y) || 0),
},
[item.roundRectSet ? 'roundRectSet' : '']: { //圆角设置
r: Number(item.roundRectSet?.r && that.getScale(bgObj, item
.roundRectSet.r) || 0),
},
infoCallBack: (imgInfo) => { //回调函数,返回图片信息
if (item.isBgCenter) {
return {
dx: (bgObj.width - item.dWidth) / 2,
}
}
},
})
break;
default:
_app.log('暂无次类型');
break;
}
})
return arr
}
}