
Предположим, у меня есть изображение с именем 1.png
, которое в данный момент
500px : height
1000px : width
Я хочу изменить его размер на:
50px : height
100px : width
Он должен быть выведен в формате PNG, а не JPG. Пример был бы весьма признателен.
решение1
Я бы использовал convert
или mogrify
изImageMagickлюкс.
$ convert -resize 100x50 1.png 2.png
# or #
$ mogrify -resize 100x50 1.png
convert
принимает отдельное имя выходного файла; создание отдельного файла.
mogrify
не принимает отдельное имя выходного файла; изменение файла на месте
решение2
Ответы, которые вы получили до сих пор, будут работать в этом конкретном случае, поскольку исходные и целевые изображения имеют одинаковое соотношение сторон. Однако, если вы хотите изменить на произвольный размер,они потерпят неудачу:
$ file foo.png
foo.png: PNG image data, 1000 x 500, 8-bit/color RGB, non-interlaced
$ convert -resize 100x50 foo.png bar.png
$ file bar.png
bar.png: PNG image data, 100 x 50, 8-bit colormap, non-interlaced
Как вы можете видеть выше, простое преобразование работает нормально, если не менять пропорции изображения. Но что, если вы хотите их изменить?
$ convert -resize 200x50 foo.png bar.png
$ file bar.png
bar.png: PNG image data, 100 x 50, 8-bit colormap, non-interlaced
Итак, при изменении пропорций команда выше не срабатывает. Чтобы принудительно convert
изменить изображение таким образом, вам нужно добавить a !
в конец спецификации геометрии (и, поскольку !
это специальный символ для многих оболочек, вам нужно экранировать его как \!
):
$ convert -resize 200x50\! foo.png bar.png
$ file bar.png
bar.png: PNG image data, 200 x 50, 8-bit colormap, non-interlaced
решение3
Используйте для этого Imagemagick.
Прочитайте страницу руководства для правильного использования, но это должно работать с передачей параметров, что-то вроде
convert 1.png -resize 50x100 1-resized.png
решение4
Альтернативой ImageMagick является почтенный netpbm:
pngtopnm input.png | pnmscale -reduce 10 | pnmtopng > output.png