HarmonyOS 鸿蒙Next图片裁剪完整例子
HarmonyOS 鸿蒙Next图片裁剪完整例子
需要能移动,缩放和裁剪成圆形的。
目前我使用PixelMap 进行缩放,api是调用成功的,但是页面上没有啥变化
关于HarmonyOS 鸿蒙Next图片裁剪完整例子的问题,您也可以访问:https://www.itying.com/category-93-b0.html 联系官网客服。
有要学HarmonyOS AI的同学吗,联系我:https://www.itying.com/goods-1206.html
更多关于HarmonyOS 鸿蒙Next图片裁剪完整例子的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
参考demo:
[@Entry](/user/Entry) [@Component](/user/Component) struct Index{ [@State](/user/State) imagePixelMap:PixelMap = undefined [@State](/user/State) edit:boolean = false
@Builder buttonModel($$:{textContent,action}){ Button($$.textContent) .fontSize(14) .height(30) .width(60) .borderRadius(10) .backgroundColor(’#E8A027’) .onClick(()=>{ $$.action this.edit = true }) }
async get_pixelmap(){ // 获取resourceManager资源管理 const context = getContext(this) const resourceMgr = context.resourceManager // 获取rawfile文件夹下httpimage.PNG的ArrayBuffer const fileData = await resourceMgr.getMediaContent($r(‘app.media.icon’)) const buffer = fileData.buffer // 创建imageSource const imageSource = image.createImageSource(buffer) // 创建PixelMap const pixelMap = await imageSource.createPixelMap() return pixelMap }
// 对pixelMap进行裁剪 async crop_image(){ let pixelMap = await this.get_pixelmap() // x:裁剪起始点横坐标0 // y:裁剪起始点纵坐标0 // height:裁剪高度300,方向为从上往下(裁剪后的图片高度为300) // width:裁剪宽度300,方向为从左到右(裁剪后的图片宽度为300) pixelMap.crop({x:0,y:0,size:{height:300,width:300}}) this.imagePixelMap = pixelMap }
// 对pixelMap进行缩放 async scale_image(){ let pixelMap = await this.get_pixelmap() pixelMap.scale(0.5,0.5) this.imagePixelMap = pixelMap }
// 对pixelMap进行偏移 async translate_image(){ let pixelMap = await this.get_pixelmap() pixelMap.translate(100,100); this.imagePixelMap = pixelMap }
// 对pixelMap进行旋转 async rotate_image(){ let pixelMap = await this.get_pixelmap() pixelMap.rotate(90); this.imagePixelMap = pixelMap }
// 对pixelMap进行翻转 // 垂直翻转 async flip_image(){ let pixelMap = await this.get_pixelmap() pixelMap.flip(false, true); this.imagePixelMap = pixelMap }
// 对pixelMap进行透明度调整 async opacity_image(){ let pixelMap = await this.get_pixelmap() pixelMap.opacity(0.5); this.imagePixelMap = pixelMap }
<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>
build(){ Column(){ if(!this.edit){ Row(){ Image($r(‘app.media.icon’)).objectFit(ImageFit.None) }.width(‘100%’).height(‘50%’).backgroundColor(’#F0F0F0’) }else{ Row(){ // 将编辑好的pixelMap传递给状态变量imagePixelMap后,通过Image组件进行渲染 Image(this.imagePixelMap).objectFit(ImageFit.None) }.width(‘100%’).height(‘50%’).backgroundColor(’#F0F0F0’) } //换行,每一行子组件按照主轴方向排列 主轴对齐方式 lex主轴方向元素等间距布局 Flex({wrap:FlexWrap.Wrap,justifyContent:FlexAlign.SpaceEvenly}){ this.buttonModel({textContent:‘裁剪’,action:this.crop_image()}) this.buttonModel({textContent:‘缩放’,action:this.scale_image()}) this.buttonModel({textContent:‘偏移’,action:this.translate_image()}) this.buttonModel({textContent:‘旋转’,action:this.rotate_image()}) this.buttonModel({textContent:‘翻转’,action:this.flip_image()}) this.buttonModel({textContent:‘透明度’,action:this.opacity_image()}) Button(‘还原’) .fontSize(14) .height(30) .width(60) .borderRadius(10) .margin({top:20}) .backgroundColor(’#A4AE77’) .onClick(()=>{ this.edit = false }) Button(“保存图片”) .onClick(() => { this.savePixelMapToPng(); }) } .margin({top:100}) .height(‘100%’) .width(‘100%’)
} .</span><span class="hljs-title"><span class="hljs-function"><span class="hljs-title">height</span></span></span><span class="hljs-params"><span class="hljs-function"><span class="hljs-params">(</span></span><span class="hljs-string"><span class="hljs-function"><span class="hljs-params"><span class="hljs-string">'100%'</span></span></span></span><span class="hljs-function"><span class="hljs-params">)</span></span></span><span class="hljs-function"> .</span><span class="hljs-title"><span class="hljs-function"><span class="hljs-title">width</span></span></span><span class="hljs-params"><span class="hljs-function"><span class="hljs-params">(</span></span><span class="hljs-string"><span class="hljs-function"><span class="hljs-params"><span class="hljs-string">'100%'</span></span></span></span><span class="hljs-function"><span class="hljs-params">)</span></span></span><span class="hljs-function">
}
async savePixelMapToPng() { let pixelMap = await this.get_pixelmap(); const uri: string = await savePixelMap(getContext(this), pixelMap); console.log(“png Uri is ======================”+uri); }
<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>