CollectionFS Graphicsmagick изменяет ширину, только если она больше

В collectionfs у меня есть следующий метод для изменения размера больших изображений до ширины 1200 пикселей, а высота остается пропорциональной, чтобы уменьшить размер файла.

var createPic = function(fileObj, readStream, writeStream) {
    gm(readStream, fileObj.name()).resize(1200).quality(100).autoOrient().stream().pipe(writeStream);
}

Изображения размером, скажем, 2000x2000, фактически загружаются размером 1200x1200, но больше по размеру файла. Можете ли вы объяснить, почему? И как я могу изменить метод, чтобы изменить размер изображения только в том случае, если ширина превышает, например, 2000 пикселей?


person Zaya    schedule 15.11.2015    source источник
comment
Также, кто-нибудь знает, насколько фейсбук уменьшает фотографии в размере и качестве? Или они используют какой-то алгоритм в зависимости от изображения?   -  person Zaya    schedule 15.11.2015
comment
Просто предположение, но попробуйте resize("1200x1200>") там.   -  person Mark Setchell    schedule 15.11.2015
comment
Это не изменило размер вообще и более чем удвоило размер файла изображения. исходное изображение 1919x1919 1.3mb. У меня было 1200х1200 1.8мб. По вашим предположениям это 1919x1919 2.9mb   -  person Zaya    schedule 15.11.2015
comment
Возможно resize('1200','1200>')   -  person Mark Setchell    schedule 15.11.2015
comment
1200х1200 1.8мб. Не могли бы вы пояснить второй аргумент. Я предполагаю, что это высота.   -  person Zaya    schedule 15.11.2015
comment
Первое, скорее всего, будет шириной, второе — высотой. Он может принимать >, прикрепленный к концу высоты, чтобы означать, что он должен изменять размер только изображений, превышающих заданное число, и <, чтобы означать, что он должен увеличивать только меньшие, и !, чтобы игнорировать соотношение сторон. Эти дополнительные флаги могут быть приняты в качестве третьего параметра в одинарных кавычках. Я не знаю - я предполагаю.   -  person Mark Setchell    schedule 15.11.2015
comment
stackoverflow.com/a/22135437/5376225 здесь объясняет увеличение размера файла. Но я не уверен. Спасибо за помощь.   -  person Zaya    schedule 15.11.2015
comment
Трудно сказать, не видя ваших фотографий!   -  person Mark Setchell    schedule 15.11.2015
comment
Вы можете попробовать удалить параметр quality или, что более вероятно, уменьшить количество цветов до 31, 63 или 254... ПОСЛЕ изменения размера.   -  person Mark Setchell    schedule 15.11.2015
comment
Да, я на самом деле удалил изображения параметров качества, теперь они в kbs, но для меня это нормально.   -  person Zaya    schedule 15.11.2015


Ответы (1)


Это работает:

gm(readStream, fileObj.name()).resize(1200, 1200, '>').quality(100).autoOrient().stream().pipe(writeStream);

Однако после его использования с пакетом gridfs вы можете получить эту ошибку: Error: <ID> does not exist. Это ошибка пакета, поэтому эту тему можно было бы выделить отдельно.

person Menda    schedule 13.05.2016
comment
пакеты fs устарели, объявление находится здесь - person Zaya; 13.05.2016