【发布时间】:2015-02-26 23:30:41
【问题描述】:
我正在使用 Meteor 的 collection-fs 包上传图片,我想使用 gm(readStrem).crop() 从每张图片的中心剪切一个缩略图。问题是,crop 的 x 和 y 偏移量取决于原始图像的大小,图像大小会有所不同,我不能使用相同的 reasdStream 两次。
这会中断:
var xOff = 0;
var yOff = 0;
var thumbnailWidth = 450;
var thumbnailHeight = 600;
gm(readStream).size(function (err, dimensions) {
if ( dimensions ) {
xOff = (dimensions.width - thumbnailWidth) / 2;
yOff = (dimensions.height - thumbnailHeight) / 2;
}
gm(readStream)
.crop(thumbnailWidth, thumbnailHeight, xOff, yOff)
.stream()
.pipe(writeStream);
})
维度返回,但 readStream 的第二次使用返回Error: gm().stream() or gm().write() with a non-readable stream
我已经看到了一些与此相关的其他答案,但没有一个对我有帮助,因为该软件包迫使我使用 pipe(writeStream);我不能只做 '.writeAsync()' 我尝试了各种其他不起作用的技巧,包括:
- 克隆流以获取大小,然后使用原始流进行同步转换并保存(在计时器中)
- 同步调用整个事情(愚蠢的想法,但值得一试)
如果有人有任何想法,我非常感谢您的意见。
谢谢! 分贝
【问题讨论】:
标签: node.js image-processing meteor graphicsmagick