uni-app lime-shared插件 - 陌上华年:Base64转临时路径导致图片压缩变小

uni-app lime-shared插件 - 陌上华年:Base64转临时路径导致图片压缩变小

原图是两百多KB,转为临时路径为六十多KB,图片变得很模糊,该怎么原图输出呢

1 回复

更多关于uni-app lime-shared插件 - 陌上华年:Base64转临时路径导致图片压缩变小的实战教程也可以访问 https://www.itying.com/category-93-b0.html


在uni-app中,使用lime-shared插件进行Base64转临时路径时,如果发现图片被压缩变小,这通常是由于在转换过程中,某些参数设置不当或者插件内部进行了压缩处理。为了解决这个问题,你可以尝试自定义转换过程,确保在转换时不进行压缩。

以下是一个使用uni-app原生API和JavaScript进行Base64转临时路径的示例代码,避免图片被压缩:

// 引入uni-app的文件系统模块
const fs = uni.getFileSystemManager();

// Base64字符串
const base64Data = '你的Base64字符串';

// 提取Base64的头部信息,得到图片的格式
const mime = base64Data.match(/data:image\/(\w+);base64,/)[1];

// 转换Base64字符串为ArrayBuffer
const arrayBuffer = base64ToArrayBuffer(base64Data.replace(/^data:image\/\w+;base64,/, ""));

// 创建一个临时文件路径
const tempFilePath = `${wx.env.USER_DATA_PATH}/temp_image.${mime === 'jpeg' ? 'jpg' : mime}`;

// 将ArrayBuffer写入文件
fs.writeFile({
    filePath: tempFilePath,
    data: arrayBuffer,
    encoding: 'binary',
    success: function () {
        console.log('文件写入成功,临时路径:', tempFilePath);
        // 在这里可以使用tempFilePath进行后续操作,比如显示图片
    },
    fail: function (err) {
        console.error('文件写入失败:', err);
    }
});

// Base64字符串转ArrayBuffer的函数
function base64ToArrayBuffer(base64) {
    const binaryString = atob(base64);
    const len = binaryString.length;
    const bytes = new Uint8Array(len);
    for (let i = 0; i < len; i++) {
        bytes[i] = binaryString.charCodeAt(i);
    }
    return bytes.buffer;
}

在这个示例中,我们首先将Base64字符串转换为ArrayBuffer,然后使用uni-app的文件系统API将其写入一个临时文件。这样,你可以确保在转换过程中没有进行任何压缩处理。

请注意,上述代码示例中的Base64字符串需要替换为你的实际Base64数据。此外,由于uni-app在不同平台(如小程序、H5、App等)上的文件系统API可能有所不同,因此在实际应用中,你可能需要根据平台差异进行适当的调整。

如果你仍然希望使用lime-shared插件,并且认为压缩问题是由于插件内部处理导致的,你可以尝试查阅该插件的文档或源代码,了解其是否有提供不进行压缩的选项。如果没有,你可能需要考虑使用上述或其他自定义方案来避免图片被压缩。

回到顶部