我想检查是否有损坏的JPEG图像,到目前为止,直接在命令行中,我可以使用identify image.jpg
,输出:如何使用node.js和gm检查损坏的jpg图像?
image.jpg JPEG 1920x1200 1920x1200+0+0 8-bit sRGB 65.5KB 0.000u 0:00.009
identify: Premature end of JPEG file `image.jpg' @ warning/jpeg.c/JPEGWarningHandler/352.
identify: Corrupt JPEG data: premature end of data segment `image.jpg' @ warning/jpeg.c/JPEGWarningHandler/352.
或 gm identify image.jpg
其输出:
image.jpg JPEG 1920x1200+0+0 DirectClass 8-bit 64.0Ki 0.000u 0:01
gm identify: Corrupt JPEG data: premature end of data segment (image.jpg).
gm identify: Corrupt JPEG data: premature end of data segment (image.jpg).
会如果我可以使用gm package也可以获得损坏的JPEG数据,那就太好了。只需用identify()
输出大量的数据,但没有关于数据损坏
gm('image.jpg')
.identify('%C',function (err, data) {
if (!err) console.log(data)
else console.error(err)
});
我在自述注意到这样一个字条:
,如果通用汽车不能与方法提供你所需要或不( ),您可以简单地使用gm()。in()或gm().out()来设置您自己的 参数。
我已经试过这样的事情:
gm()
.command("identify")
.in('image.jpg');
,但我没有得到任何输出,所以我可能做错了。
我也试过节点CMD:
cmd.get(
'gm identify image.jpg',
function(data){
console.log('output: ',data)
}
);
但我只看到输出的第一行。
什么是通过gm
包正从identify
多输出的清洁/推荐的方法是什么?否则,阅读identify命令的完整输出的节点优雅解决方案是什么?
更新 我的猜测是使用gm
因为它是通过stderr
,不stdout
不显示的字符串。
var spawn = require('child_process').spawn;
var bin = "identify"
var args = ['image.jpg'];
var cspr = spawn(bin, args);
cspr.stderr.on('data', function (data) {
data += '';
console.log(data.replace("\n", "\nstderr: "));
});
cspr.on('exit', function (code) {
console.log('child process exited with code ' + code);
process.exit(code);
});
什么是通过gm
得到stderr
输出的清洁方式:
我使用的this snippet一个扭捏版本测试?
嗨,乔治,对不起,我不说'node',但我认为这是非常相似的 - 也许? http://stackoverflow.com/a/43222531/2836621 –
如果问题是你想使用'identify'而不是'convert',你可以使'convert'像'identify'一样工作(从而使用后者的调用界面)通过使用'gm convert someImage.jpg info:-'如果需要,可以选择在'-verbose'中添加。 –
@MarkSetchell非常感谢您的输入。我已经将你的建议调整为节点:'''gm(jpgPath) .command('convert') .write('out.png',function(err,stdout,stderr)console.log(“stderr” ,stderr); });'''它的工作原理!如果你添加你的评论作为答案,我会非常乐意接受:) –