我正在尝试使用mozjpeg压缩图片,当我按照文档在node.js中实现时它运行良好。
const input = fs.readFileSync("in.ppm");
const out = mozjpeg.encode(input, { quality: 85 });
我需要在客户端对文件进行压缩,所以我尝试使用React Native来执行相同的操作,因为React Native不包含核心Node模块,如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://
,因此我尝试将其删除。
mozjpeg
期望文件是二进制编码的,所以可能需要像Buffer.from(data, 'utf8')
这样的东西,因为react-native-fs
的readFile
默认是utf8
编码。 - Trobol