鸿蒙Next如何长按图片保存
在鸿蒙Next系统里,长按图片后没有弹出保存选项,该如何操作才能保存图片到本地相册?
2 回复
鸿蒙Next长按图片保存?简单!长按图片,等菜单弹出,选“保存到相册”就行。如果没反应,检查下权限——别让系统以为你在偷图!搞定后记得夸夸自己:又省了一个截图步骤!😎
更多关于鸿蒙Next如何长按图片保存的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在鸿蒙Next中,长按图片保存到本地可以通过以下步骤实现,主要涉及手势识别和文件存储权限:
实现步骤
- 添加权限:在
module.json5文件中声明存储权限。 - 监听长按事件:使用
Gesture组件的LongPressGesture识别长按操作。 - 保存图片:通过
Picker选择保存路径,并使用ImagePacker将图片写入文件。
示例代码
import { Gesture, GestureGroup, GestureMask, LongPressGesture } from '@ohos.arkui.gesture';
import { BusinessError } from '@ohos.base';
import { picker } from '@ohos.file.picker';
import image from '@ohos.multimedia.image';
// 1. 在UI中定义图片组件并绑定长按手势
@Entry
@Component
struct ImageSaveExample {
@State imageSrc: Resource = $r('app.media.example_image'); // 替换为你的图片资源
build() {
Column() {
Image(this.imageSrc)
.gesture(
GestureGroup(GestureMask.IgnoreInternal)
.onLongPressAction((event: LongPressGesture) => {
this.saveImageToGallery();
})
)
}
}
// 2. 保存图片到相册
async saveImageToGallery() {
try {
// 创建保存选项
const saveOptions = new picker.PhotoSaveOptions();
saveOptions.newFileNames = ['MyImage_${Date.now()}.jpg'];
// 启动文件选择器保存图片
const photoSavePicker = new picker.PhotoViewPicker();
const fileUri = await photoSavePicker.save(saveOptions);
if (fileUri) {
// 将图片资源写入文件
const imagePacker = image.createImagePacker();
const packOpts: image.PackingOption = { format: "image/jpeg", quality: 98 };
const imageSource = image.createImageSource(this.imageSrc);
const imageData = await imageSource.createPixelMap();
await imagePacker.packing(imageData, packOpts);
// 通过uri写入文件(需使用@ohos.file.fs接口)
// 此处简化为提示,实际需用fs.write将imagePacker.getStream()写入fileUri
console.info('图片已保存到: ' + fileUri);
// 提示用户
prompt.showToast({ message: '图片已保存到相册' });
}
} catch (error) {
console.error('保存失败: ' + (error as BusinessError).message);
}
}
}
注意事项
- 权限配置:在
module.json5中添加:"requestPermissions": [ { "name": "ohos.permission.WRITE_IMAGEVIDEO" } ] - 资源路径:确保图片资源路径正确,支持本地资源或网络图片(网络图片需先下载)。
- API兼容性:鸿蒙Next的API可能随版本更新,请参考最新官方文档调整。
通过以上代码,用户长按图片即可触发保存操作,系统会引导选择保存位置并存储图片。

