Как заставить модуль imagemagick nodejs вывести только одно изображение?

Я использую модуль imagemagick с Nodejs

im  = require('imagemagick');

Модуль imagemagick использует инструменты командной строки imagemagick. Я использую метод конвертирования, чтобы обрезать изображение

im.convert([image_path, '-crop', '200x150', '-gravity', 'center', target_path],
  function(err, stdout){}
);

Это приводит к двум изображениям. Один с областью обрезанного изображения - второй с мусором изображения, от которого я пытался избавиться.

Как я могу заставить imagemagick выводить только один файл изображения?

2 ответа

Решение

Согласно документации imagemagick для обрезки, которая, по общему признанию, немного тупая (выделение добавлено):

Ширина и высота аргумента геометрии дают размер изображения, которое остается после обрезки, а x и y в смещении (если оно присутствует) дает расположение верхнего левого угла обрезанного изображения относительно исходного изображения.

...

Если присутствуют смещения по x и y, генерируется одно изображение, состоящее из пикселей из области обрезки.

...

Если смещения x и y опущены, генерируется набор плиток заданной геометрии, охватывающий все входное изображение.

... так что вам просто нужно указать свой x а также y смещения как часть вашего аргумента геометрии, например так: 200x150-100-75

Обратите внимание, что я указал -100 а также -75 для верхнего левого угла вашей области урожая, это потому, что вы установили gravity в center, но похоже, что imagemagick пытается разумно определить подходящее расстояние цели на основе вашей гравитации, и я не вижу точно, как она ведет себя, когда вы выбираете center, Так что вам, возможно, придется немного поиграть с этим, или вы можете опустить gravity и используйте фактическое смещение от верхнего левого угла исходного изображения.

Я должен был использовать +delete параметр для удаления последнего изображения из последовательности изображений.

im.convert([image_file.path, '-crop', geometry, '+delete', thumb_path], ...
Другие вопросы по тегам