HarmonyOS 鸿蒙Next如何给图片右下角增加文字水印
HarmonyOS 鸿蒙Next如何给图片右下角增加文字水印
我看到官方demo 添加水印如下
import { image } from '@kit.ImageKit'
@Entry
@Component
struct Index {
@State pixelMap: PixelMap | null = null
aboutToAppear(): void {
getContext(this).resourceManager.getMediaContent($r("app.media.startIcon")).then((data) => {
let arrayBuffer = data.buffer.slice(data.byteOffset, data.byteLength + data.byteOffset)
let imageSource: image.ImageSource = image.createImageSource(arrayBuffer);
imageSource.getImageInfo((err, value) => {
if (err) {
return;
}
let opts: image.DecodingOptions =
{ editable: true, desiredSize: { height: value.size.height, width: value.size.width } };
imageSource.createPixelMap(opts, (err,
pixelMap) => { // 这个回调的pixelMap就是当前图片的pixelMap
let offScreenCanvas = new OffscreenCanvas(value.size.width, value.size.height)
let OffScreenContext = offScreenCanvas.getContext("2d")
OffScreenContext.drawImage(pixelMap, 0, 0, offScreenCanvas.width, offScreenCanvas.height)
OffScreenContext.fillStyle = '#30000000'
OffScreenContext.font = "50px"
OffScreenContext.fillText("水印水印水印水印水印", 20,
30)
// 获取新的PixelMap
this.pixelMap = OffScreenContext.getPixelMap(0, 0, offScreenCanvas.width, offScreenCanvas.height)
})
})
})
}
build() {
Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
Image(this.pixelMap).width(100).height(100)
}.width('100%').height('100%')
}
}
但是我发现我无法在图片右下角添加水印 我的思路是通过 measure.measureTextSize 去获取将要添加水印的文字大小, 但是这个方法返回的值, 并不能满足我的需求.
更多关于HarmonyOS 鸿蒙Next如何给图片右下角增加文字水印的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
3 回复
可以看下我这demo,在右下角加水印
import { image } from '[@kit](/user/kit).ImageKit'
[@Entry](/user/Entry)
[@Component](/user/Component)
struct Index {
[@State](/user/State) pixelMap: PixelMap | null = null
aboutToAppear(): void {
getContext(this).resourceManager.getMediaContent($r("app.media.startIcon")).then((data) => {
let arrayBuffer = data.buffer.slice(data.byteOffset, data.byteLength + data.byteOffset)
let imageSource: image.ImageSource = image.createImageSource(arrayBuffer);
imageSource.getImageInfo((err, value) => {
if (err) {
return;
}
let opts: image.DecodingOptions = {
editable: true,
desiredSize: {
height: value.size.height,
width: value.size.width
}
};
imageSource.createPixelMap(opts, (err, pixelMap) => {
// 这个回调的pixelMap就是当前图片的pixelMap
let offScreenCanvas = new OffscreenCanvas(value.size.width, value.size.height)
let OffScreenContext = offScreenCanvas.getContext("2d")
OffScreenContext.drawImage(pixelMap, 0, 0, offScreenCanvas.width, offScreenCanvas.height)
OffScreenContext.fillStyle = '#30000000'
OffScreenContext.font = "50px"
OffScreenContext.fillText("水印水印水印水印水印", 70, 130)
// 获取新的PixelMap
this.pixelMap = OffScreenContext.getPixelMap(0, 0, offScreenCanvas.width, offScreenCanvas.height)
})
})
})
}
build() {
Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
Image(this.pixelMap).width(100).height(100)
}
.width('100%')
.height('100%')
}
}
更多关于HarmonyOS 鸿蒙Next如何给图片右下角增加文字水印的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
请问这个官方demo链接是什么,我有个功能想加
在HarmonyOS 鸿蒙Next系统中,给图片右下角增加文字水印的方法如下:
对于普通用户,可以直接使用手机相册的图片编辑功能。打开相册,选择需要添加水印的图片,进入编辑界面,找到并点击“更多”或类似选项,然后选择“水印”功能。在此处,你可以选择预设的水印样式,或手动输入想要的文字,并将其拖动到图片右下角的位置,确认后保存图片即可。
对于开发者,可以通过编程方式实现自定义水印。首先,获取图片的pixelMap对象,然后使用Canvas组件或OffscreenCanvas绘制水印。具体步骤如下:
- 创建一个Canvas或OffscreenCanvas对象,并获取其绘图上下文。
- 将图片的pixelMap对象绘制到Canvas或OffscreenCanvas上。
- 使用绘图上下文设置水印文字的字体、颜色、对齐方式等属性。
- 在Canvas或OffscreenCanvas的右下角位置绘制水印文字。
- 获取绘制完成后的新的pixelMap对象,并将其保存为图片文件。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html 。