class waterMarkHelper {
|
|
// 绘制水印(图片)
|
static addImage(origin_img_url, watermart_img_url, finish_cb) {
|
|
const canvas = document.createElement('canvas')
|
const ctx = canvas.getContext('2d')
|
|
//原图片
|
var img_origin = new Image()
|
img_origin.setAttribute("crossOrigin", 'anonymous');
|
img_origin.src = origin_img_url;
|
// img_origin.crossOrigin = 'anonymous';
|
|
|
//水印图片
|
if (watermart_img_url == null)
|
watermart_img_url = "static/img/watermark/default.png"
|
var img_watermark = new Image()
|
img_watermark.setAttribute("crossOrigin", 'anonymous');
|
img_watermark.src = watermart_img_url;
|
// img_watermark.crossOrigin = 'anonymous';
|
|
var that = this;
|
img_origin.onload = function() {
|
// 创建canvas,并将创建的img绘制成canvas
|
var origin_image_width = img_origin.width
|
var origin_image_height = img_origin.height
|
|
var watermark_image_width = img_watermark.width
|
var watermark_image_height = img_watermark.height
|
|
canvas.width = origin_image_width
|
canvas.height = origin_image_height
|
ctx.drawImage(img_origin, 0, 0)
|
|
//console.log("origin_image",origin_image_width,origin_image_height,watermark_image_width,watermark_image_height);
|
//ctx.drawImage(img_watermark, origin_image_width / 2, origin_image_height / 2, watermark_image_width / 3, watermark_image_height / 3)
|
|
// if (finish_cb != null) {// 将绘制完成的canvas转换为base64的地址
|
// const base64Url = canvas.toDataURL()
|
// //console.log(base64Url)
|
// finish_cb(base64Url)
|
//}
|
|
|
|
|
if (origin_image_width > watermark_image_width * 5) { //3列
|
var waterMark_width2 = origin_image_width / 5.0;
|
var waterMark_ratio = waterMark_width2 / watermark_image_width;
|
var space = waterMark_width2 * 0.5;
|
var x_posi1 = space;
|
var x_posi2 = space + waterMark_width2 + space;
|
var x_posi3 = space + waterMark_width2 + space + waterMark_width2 + space;
|
|
//console.log("3333");
|
|
that.DrawOneColumnLogo(ctx, origin_image_height, x_posi1, img_watermark, watermark_image_width, watermark_image_height, waterMark_ratio);
|
|
that.DrawOneColumnLogo(ctx, origin_image_height, x_posi2, img_watermark, watermark_image_width, watermark_image_height, waterMark_ratio);
|
|
that.DrawOneColumnLogo(ctx, origin_image_height, x_posi3, img_watermark, watermark_image_width, watermark_image_height, waterMark_ratio);
|
} else if (origin_image_width > watermark_image_width * 3.5) { //两列
|
var waterMark_width2 = origin_image_width / 3.5;
|
|
var waterMark_ratio = waterMark_width2 / watermark_image_width;
|
|
var space = waterMark_width2 * 0.5;
|
var x_posi1 = space;
|
var x_posi2 = space + waterMark_width2 + space;
|
|
//console.log("2222");
|
|
that.DrawOneColumnLogo(ctx, origin_image_height, x_posi1, img_watermark, watermark_image_width, watermark_image_height, waterMark_ratio);
|
|
that.DrawOneColumnLogo(ctx, origin_image_height, x_posi2, img_watermark, watermark_image_width, watermark_image_height, waterMark_ratio);
|
} else { //一列
|
//console.log(origin_image_width, watermark_image_width, "1111");
|
|
var waterMark_width2 = origin_image_width / 2.0;
|
|
var waterMark_ratio = waterMark_width2 / watermark_image_width;
|
|
var left_posi = (origin_image_width / 2 - waterMark_width2 / 2);
|
|
that.DrawOneColumnLogo(ctx, origin_image_height, left_posi, img_watermark, watermark_image_width, watermark_image_height, waterMark_ratio);
|
}
|
|
|
if (finish_cb != null) { // 将绘制完成的canvas转换为base64的地址
|
const base64Url = canvas.toDataURL()
|
// console.log(base64Url)
|
finish_cb(base64Url)
|
}
|
}
|
};
|
static DrawOneColumnLogo(ctx, origin_image_height, left_posi, img_watermark, watermark_image_width, watermark_image_height, waterMark_ratio) {
|
var list_y = this.CalcOneColumnLogoPosi(origin_image_height, watermark_image_height, waterMark_ratio);
|
//console.log(list_y)
|
for (var i = 0; i < list_y.length; i++) {
|
var top_posi = list_y[i];
|
|
//var rect_2 = new RectangleF(left_posi, top_posi, watermark_image_width * waterMark_ratio, watermark_image_height * waterMark_ratio);
|
|
//gh.DrawImage(img_watermark, rect_2);
|
//console.log(left_posi,top_posi,watermark_image_width * waterMark_ratio,watermark_image_height * waterMark_ratio)
|
ctx.drawImage(img_watermark, left_posi, top_posi, watermark_image_width * waterMark_ratio, watermark_image_height * waterMark_ratio)
|
|
}
|
|
|
|
|
};
|
//计算一列的位置(等比例)
|
static CalcOneColumnLogoPosi(image_height, waterMark_origin_height, waterMark_ratio) {
|
var space_height = 100;
|
var top = 100;
|
var bottom = 100;
|
var watermark_image_height = (waterMark_ratio * waterMark_origin_height);
|
if (watermark_image_height > 250) {
|
space_height = (watermark_image_height * 1.5);
|
top = (watermark_image_height * 0.2);
|
bottom = (image_height - watermark_image_height * 1.2);
|
} else {
|
space_height = (watermark_image_height * 1.8);
|
top = (watermark_image_height * 0.5);
|
bottom = (image_height - watermark_image_height * 1.5);
|
}
|
|
|
var num = (bottom - top) / space_height + 1;
|
if (num <= 1) {
|
space_height = (watermark_image_height * 1.2);
|
top = (watermark_image_height * 0.2);
|
bottom = image_height - watermark_image_height - 5;
|
} else if (num == 2) {
|
space_height = (watermark_image_height * 1.3);
|
top = (watermark_image_height * 0.3);
|
bottom = image_height - watermark_image_height - 5;
|
}
|
if (num > 5) { //每列最多5个
|
var space = (image_height - watermark_image_height * 5) / 6;
|
var posi = [];
|
for (var i = 0; i < 6; i++) {
|
var top_posi = space + (watermark_image_height + space) * i;
|
if (top_posi > image_height - watermark_image_height)
|
return posi;
|
|
posi.push(top_posi);
|
}
|
return posi;
|
} else {
|
var posi = [];
|
for (var i = 0; i < 100; i++) {
|
var top_posi = top + space_height * i;
|
if (top_posi > bottom)
|
return posi;
|
|
posi.push(top_posi);
|
}
|
return posi;
|
}
|
|
|
|
};
|
|
// 绘制水印(文字)
|
static addCorpText(origin_img_url, content, finish_cb) {
|
|
// 创建所需要添加水印的img图片
|
const canvas = document.createElement('canvas')
|
const ctx = canvas.getContext('2d')
|
|
const img_origin = new Image()
|
img_origin.src = origin_img_url;
|
img_origin.crossOrigin = 'anonymous'
|
img_origin.onload = function() {
|
// 创建canvas,并将创建的img绘制成canvas
|
canvas.width = img_origin.width
|
canvas.height = img_origin.height
|
|
ctx.drawImage(img_origin, 0, 0)
|
|
|
|
ctx.textAlign = 'left';
|
ctx.textBaseline = 'middle';
|
ctx.font = '18px Microsoft Yahei';
|
ctx.fillStyle = 'rgba(0, 0, 0, 0.15)';
|
ctx.globalAlpha = 0.3;
|
ctx.rotate((Math.PI / 180) * 15)
|
|
|
ctx.fillText(content, img_origin.width - textX, img_origin.height - textY)
|
|
|
|
if (finish_cb != null) { // 将绘制完成的canvas转换为base64的地址
|
const base64Url = canvas.toDataURL()
|
//console.log(base64Url)
|
finish_cb(base64Url)
|
}
|
}
|
|
};
|
}
|
|
export default waterMarkHelper
|