Как заставить модуль 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], ...