Изменить размер изображения до одного разрешения - PullRequest
2 голосов
/ 21 января 2011

У меня куча картинок с разным разрешением.Также есть смесь пейзажных и портретных картинок.Мне нужно изменить размер изображения до одного разрешения (1024x768).Если у меня есть портретное изображение, максимальная высота должна быть 768, а мои пейзажные изображения должны иметь максимальную ширину 1024.

Пространство, которое закончилось, должно быть черным.Прямо сейчас я использую mogrify -resize 1024x768 -verbose *.jpg

Я знаю, что могу использовать 1024x! 768, но, как я уже сказал, я использую различные виды картинок.Моя exif-информация также не содержит информации о том, является ли изображение альбомным или нет.

Ответы [ 2 ]

1 голос
/ 21 января 2011

Я использую ImageMagick для таких задач.После установки у вас есть команда «convert», которая очень распространена и легко выполняет вашу задачу.

0 голосов
/ 14 мая 2014

Вам придется обрезать изображение, чтобы получить такое же соотношение сторон, затем вы можете изменить размер изображения, чтобы получить желаемое разрешение.Пример кода с использованием nodejs (инструменты командной строки imagemagick):

var width = 166;
var height = 117;
var ratio_new = width/height;
var ratio_old = image_file.width_orig/image_file.height_orig;
var pixels_too_much = 0;
var geometry = '';

if (ratio_old > ratio_new)
{
    config.debug && console.log ("remove horizontal pixel!");
    pixels_too_much = parseInt(image_file.width_orig - (image_file.height_orig * ratio_new))-1;
    geometry = parseInt(image_file.height_orig * ratio_new + 0.5) + 'x' + image_file.height_orig;
    geometry += "+" + parseInt(pixels_too_much/2) + "+0\!";
}
else if (ratio_old < ratio_new)
{
    config.debug && console.log ("remove vertikal pixel");
    pixels_too_much = parseInt(image_file.height_orig - (image_file.width_orig / ratio_new));
    geometry = image_file.width_orig + 'x' + (image_file.width_orig / ratio_new);
    geometry += "+0+" + parseInt(pixels_too_much/2)+"\!";
}
im.convert([image_file.path, '-crop', geometry, '-resize', width + 'x' + height, thumb_path],function(){});
...