HarmonyOS 鸿蒙Next中OffscreenCanvas修改图片添加水印
HarmonyOS 鸿蒙Next中OffscreenCanvas修改图片添加水印 目前使用imageknife来加载第三方网络图片,该库支持配置图形变换Transformation,我编写了一个自定义的添加水印的Transformation,参考了帖子 https://developer.huawei.com/consumer/cn/forum/topic/0207151268119912225?fid=0109140870620153026 的方法使用OffscreenCanvas给图片添加水印,单个图片时还好,如果批量加载图片时会发现卡顿。经过我的测试发现,通过OffscreenCanvas处理后,调用offScreenContext.getPixelMap获取到的PixelMap尺寸和大小有变化,导致批量图片加载页面卡。请问有什么其它代替的图片添加水印解决方案(需要修改原图方式,因为后续还有保存图片和分享图片功能都是用到带水印的图片)?
更多关于HarmonyOS 鸿蒙Next中OffscreenCanvas修改图片添加水印的实战教程也可以访问 https://www.itying.com/category-93-b0.html
imageSource.getImageInfo 此函数回调,ImageInfo ,size是像素。
1. imagePacker.packing并不会改变图片尺寸大小,图片尺寸变大发生在OffscreenCanvas阶段。
2. OffscreenCanvas默认单位是vp,而pixmap宽高是px,这是图片尺寸变大的原因。
修改代码 const offScreenCanvas = new OffscreenCanvas(px2vp(data.size.width), px2vp(data.size.height))
图片添加水印可以参考下文档:[https://gitee.com/harmonyos_samples/watermark](https://gitee.com/harmonyos_samples/watermark)
OffscreenCanvas支持并发线程绘制,参考链接:[https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-components-offscreencanvas-V5](https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-components-offscreencanvas-V5)
更多关于HarmonyOS 鸿蒙Next中OffscreenCanvas修改图片添加水印的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙Next中,OffscreenCanvas
是一个离屏画布,允许在不直接渲染到屏幕的情况下进行绘图操作。要在 OffscreenCanvas
上修改图片并添加水印,可以按照以下步骤进行:
-
创建
OffscreenCanvas
实例:首先,创建一个OffscreenCanvas
对象,并指定其宽度和高度,通常与原始图片的尺寸一致。 -
加载图片:使用
Image
对象加载原始图片,并等待其加载完成。 -
绘制图片到
OffscreenCanvas
:将加载的图片绘制到OffscreenCanvas
上。 -
添加水印:在
OffscreenCanvas
上绘制水印文本或图像。可以使用fillText
方法绘制文本水印,或者使用drawImage
方法绘制图像水印。 -
获取修改后的图片:通过
OffscreenCanvas
的transferToImageBitmap
方法获取修改后的图片数据。
以下是示例代码:
// 创建 OffscreenCanvas
const offscreenCanvas = new OffscreenCanvas(imageWidth, imageHeight);
const ctx = offscreenCanvas.getContext('2d');
// 加载图片
const img = new Image();
img.src = 'path/to/image.jpg';
img.onload = () => {
// 绘制图片到 OffscreenCanvas
ctx.drawImage(img, 0, 0, imageWidth, imageHeight);
// 添加水印文本
ctx.font = '20px Arial';
ctx.fillStyle = 'rgba(255, 255, 255, 0.5)';
ctx.fillText('Watermark', 10, 30);
// 获取修改后的图片
const modifiedImage = offscreenCanvas.transferToImageBitmap();
};
该方法适用于需要在后台处理图片并添加水印的场景,且不会影响主线程的性能。
在HarmonyOS的鸿蒙Next中,使用OffscreenCanvas
为图片添加水印的步骤如下:
-
创建OffscreenCanvas:使用
new OffscreenCanvas(width, height)
创建一个离屏画布,指定宽度和高度。 -
获取2D渲染上下文:通过
offscreenCanvas.getContext('2d')
获取2D渲染上下文。 -
绘制图片:使用
drawImage(image, x, y)
将原始图片绘制到画布上。 -
添加水印:使用
fillText(text, x, y)
在画布上绘制水印文本,可自定义字体、颜色等样式。 -
获取处理后的图片:使用
offscreenCanvas.transferToImageBitmap()
或offscreenCanvas.toDataURL()
获取添加水印后的图片数据。
通过以上步骤,可以在鸿蒙Next中利用OffscreenCanvas
高效地为图片添加水印。