HarmonyOS 鸿蒙Next中图片添加水印
HarmonyOS 鸿蒙Next中图片添加水印 图片添加文本水印时,文本过长换行应该如何处理
3 回复
可以通过measureText确定文本的宽度,如果文本的宽度超过了Canvas的宽度,就需要考虑换行。通过循环和条件判断来决定何时换行。如果文本的一部分超出Canvas宽度,通过measureText获取的高度,计算换行后绘制的位置 参考代码如下:
export function addWatermark(
imagePixelMap: ImagePixelMap,
text: string = 'watermark',
drawWatermark?: (OffscreenContext: OffscreenCanvasRenderingContext2D) => void
): image.PixelMap {
const height = px2vp(imagePixelMap.height);
const width = px2vp(imagePixelMap.width);
const offScreenCanvas = new OffscreenCanvas(width, height);
const offScreenContext = offScreenCanvas.getContext('2d');
offScreenContext.drawImage(imagePixelMap.pixelMap, 0, 0, width, height);
if (drawWatermark) {
drawWatermark(offScreenContext);
} else {
// const imageScale = width / px2vp(display.getDefaultDisplaySync().width);
// offScreenContext.fillStyle = '#A2FFFFFF';
// offScreenContext.font = 12 * imageScale + 'vp';
// const padding = 5 * imageScale;
// offScreenContext.fillText(text, width - padding, height - padding);
offScreenContext.textAlign = 'right';
offScreenContext.font = '20vp sansserif';
let currentX = width;
let currentY = height;
let line: string = '';
let chars: Array<string> = text.split('');
for (let char of chars) {
// 如果添加下一个字符会超出最大宽度,则换行
if (offScreenContext.measureText(line + char)
.width > (width - 10)) {
// 设置绘制文本颜色
offScreenContext.fillStyle = 'rgba(224, 30, 152, 0.92)'
// 绘制文本,通过currentY控制行列
offScreenContext.fillText(line, currentX, currentY);
// 计算下一行文字绘制位置
currentY -= offScreenContext.measureText(line + char).height;
// 重新开始新行
line = char;
} else {
line += char;
}
}
// 绘制最后一行
offScreenContext.fillText(line, currentX, currentY);
}
return offScreenContext.getPixelMap(0, 0, width, height);
}
更多关于HarmonyOS 鸿蒙Next中图片添加水印的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS Next中,可通过PixelMap和Image组件实现图片水印。使用@ohos.multimedia.image库获取源图片PixelMap,创建水印文字或图像的PixelMap对象。通过Canvas或直接绘制方式将水印PixelMap叠加到原图指定位置,最后通过imagePacker打包生成带水印的图片文件。支持透明度、旋转角度和位置参数配置。