Ionic 4 Camera插件:压缩图片保存至相册后的尺寸问题
嘿,我来帮你把这个问题掰明白——这其实是Ionic Camera插件一个很容易踩坑的设计逻辑,咱们一步步拆解:
核心原因:saveToPhotoAlbum的工作机制
当你开启saveToPhotoAlbum: true时,插件的逻辑是直接把设备相机拍摄的原始高分辨率图片保存到相册,完全忽略你设置的quality、targetWidth、targetHeight这些压缩参数。你通过File插件检测到的大小,是插件返回给你的那一份经过压缩处理后的图片数据(也就是DATA_URL对应的内容),和相册里的原始图根本不是同一个文件。
这就解释了为什么不管你把quality设为30还是100,相册里的图片始终是3MB:这个3MB是你设备相机原生输出的原始图片大小,由相机硬件的分辨率、默认拍摄格式决定,和你在CameraOptions里的压缩配置没有任何关系——那些参数只作用于App内使用的返回数据,不影响相册保存的内容。
相册中保存的图片应该是什么大小?
如果依赖插件的saveToPhotoAlbum参数,相册里的大小永远是相机原始拍摄的图片大小(也就是你现在看到的3MB左右)。但如果想让相册里也保存你配置的压缩后的图片,就得换个实现方式:
- 第一步:把
saveToPhotoAlbum改成false,禁用插件自动保存原始图的功能; - 第二步:拿到插件返回的压缩后图片数据(建议改用
destinationType: FILE_URI,比DATA_URL更高效); - 第三步:用Ionic的File插件,把这份压缩后的图片文件手动复制到设备的相册目录中。
另外补充个小细节:你用的是DATA_URL,它返回的是base64编码的字符串,File插件检测的是这个字符串解码后的二进制图片大小,而base64编码本身会比原始二进制数据大33%左右,所以你看到的15627、223727这些数值,是解码后的压缩图大小,和相册里的原始二进制大小差异更大,但这只是次要因素,核心还是saveToPhotoAlbum的机制问题。
内容的提问来源于stack exchange,提问作者Nayyar Jamal

