Я использую пакеты коллекции meteor для загрузки изображений, и я хочу вырезать миниатюру из центра каждого изображения, используя gm(readStrem).crop()
. Проблема заключается в том, что смещения x
и y
для crop
зависят от размера исходного изображения, размеры изображения могут различаться, и я не могу использовать один и тот же файл reasdStream дважды.graphicsmagick crop в зависимости от исходного размера изображения (resuse readstream)
Это ломает:
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()» Я пробовал всякие другие трюки, которые не работают, в том числе:
- клонировании поток, чтобы получить размер, а затем использовать оригинал для синхронного преобразования и сохранить (в таймере)
- вызова все это синхронно (глупая идея, но стоит выстрел)
Если кто-нибудь имеет какие-либо идеи, я действительно ценю ваш вклад.
Спасибо! db
Мы должны проверить его на стороне сервера, так как это может вредно для системы –