Capacitor相机插件拍照后如何保存到本地并显示缩略图?
在用Capacitor的Camera插件拍照后,想把照片保存到本地并显示缩略图。按照文档调用Camera.getPhoto()时设置resultType: 'dataURL',但保存到Filesystem后图片显示不完整,缩略图显示的是灰色方块。尝试过把resultType改为'dataUrl'和'base64'都无效,控制台报Invalid URI"错误,该怎么处理?
这是我的代码片段:
const image = await Camera.getPhoto({
quality: 100,
allowEditing: true,
resultType: 'dataURL',
source: 'camera'
});
// 保存到本地的代码
await Filesystem.writeFile({
path: 'photo.jpg',
data: image.dataUrl,
directory: FilesystemDirectory.Data
});
查看文件路径时发现图片大小异常小(只有几百字节),感觉没保存完整。是不是需要调整图片格式或者编码方式?之前用Cordova时直接用URI就能显示,Capacitor的处理流程是不是有不同步骤?
建议改成用resultType: 'base64',这样拿到的就是干净的base64编码,可以直接写入文件系统。另外缩略图显示灰色方块通常是因为img标签里的src格式不对,dataUrl包含前缀如"data:image/jpeg;base64,",这个要保留才能正确解析。
正确的做法如下:
注意这里要用Capacitor.convertFileSrc处理文件路径,否则WebView无法加载本地文件。之前Cordova用URI直连的方式在Capacitor里行不通了,安全沙盒机制变了。
如果一定要用dataUrl,那记得从image.dataUrl取值,并确保传给writeFile时去掉前面的"data:image/jpeg;base64,"再拼回去,不然会当成普通字符串处理。不过还是推荐走base64路线,稳定得多。