鸿蒙Next如何长按图片保存

在鸿蒙Next系统里,长按图片后没有弹出保存选项,该如何操作才能保存图片到本地相册?

2 回复

鸿蒙Next长按图片保存?简单!长按图片,等菜单弹出,选“保存到相册”就行。如果没反应,检查下权限——别让系统以为你在偷图!搞定后记得夸夸自己:又省了一个截图步骤!😎

更多关于鸿蒙Next如何长按图片保存的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在鸿蒙Next中,长按图片保存到本地可以通过以下步骤实现,主要涉及手势识别和文件存储权限:

实现步骤

  1. 添加权限:在 module.json5 文件中声明存储权限。
  2. 监听长按事件:使用 Gesture 组件的 LongPressGesture 识别长按操作。
  3. 保存图片:通过 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可能随版本更新,请参考最新官方文档调整。

通过以上代码,用户长按图片即可触发保存操作,系统会引导选择保存位置并存储图片。

回到顶部