【发布时间】:2020-06-19 08:08:03
【问题描述】:
我正在尝试使用mozjpeg 压缩图像,当我根据它工作正常的文档在 node.js 中实现它时。
const input = fs.readFileSync("in.ppm");
const out = mozjpeg.encode(input, { quality: 85 });
我需要在客户端做压缩,所以我尝试对 react-native 做同样的事情,因为 react-native 不包含 fs 等核心节点模块,我需要去第三方库react-native-fs 用于文件读取。
当我尝试在 react-native 中执行 mozjpeg.encode(input, { quality: 85 }); 时,它会抛出 Unrecognized input file format --- perhaps you need -targa
服务器端实现
const mozjpeg = require("mozjpeg-js");
const fs = require("fs");
const input = fs.readFileSync(filePath);
const out = mozjpeg.encode(input, { quality: 85 });
console.error(out.stderr);
fs.writeFileSync("out.jpg", out.data);
客户端实现
fs.readFile(image.path).then(data => {
const out = mozjpeg.encode(data, { quality: 85 });
console.log(out);
}
这是我尝试过的事情的清单
- 尝试以十六进制、缓冲区、base64 和纯 URL 字符串形式提供输入。
- 由于 Android URL 包含
file://作为前缀,我也尝试将其删除。
【问题讨论】:
-
我使用github.com/bamlab/react-native-image-resizer 高质量压缩图像
-
是的,我目前正在使用它,但我想迁移到 mozjpeg 以减小文件大小。
-
这个问题几乎肯定是与编码有关(假设文件被正确读取)。因为
mozjpeg期望文件被二进制编码可能类似于Buffer.from(data, 'utf8')因为readFile从react-native-fs默认是utf8。
标签: javascript android react-native image-compression mozjpeg