Изменение размера изображений с помощью bash в Automator и сохранение соотношения изображений

Я пытаюсь написать приложение Automator, которое будет принимать файлы изображений и изменять их размер до указанной ширины, но поддерживать соотношение высоты и ширины исходного файла изображений.

Я пытался использовать глотки в Bash, но я не уверен, где я иду не так. Я не могу найти что-либо в Google, чтобы ссылаться на BASH или глотками.

Я пытаюсь измерить высоту и ширину переданного изображения, определить соотношение, а затем изменить размер изображения, используя целевую ширину и целевую высоту (рассчитывается по целевой ширине и соотношению)

Это мой текущий скрипт оболочки, и я передаю изображение как Pass input: as arguments.

 height=`sips --getProperty pixelHeight $@`
 width=`sips --getProperty pixelWidth $@`
 ratio=height/width
 targetWidth=262
 targetHeight=targetWidth*ratio

 sips --resampleHeightWidth targetHeight targetWidth $@

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

1 ответ

Ты можешь использовать --resampleWidth или же -Z:

sips --resampleWidth 262 "$@" # make smaller or larger so that the width is 262 px
sips -Z 262 "$@" # make smaller or larger so that the longer sides are 262 px

Если вы хотите предотвратить масштабирование небольших изображений, посмотрите этот ответ или используйте ImageMagick. Я думаю, что sips часто делает изображение слишком размытым без дополнительной резкости, но ImageMagick также позволяет выбирать различные фильтры передискретизации:

mogrify -filter lanczos2 -resize '262>' "$@"

mogrify это версия convert это изменяет изображения на месте. lanczos2 (2-лепестковый Lanczos) делает изображения чуть менее резкими, чем lanczos (3-лепестковый Lanczos, который был сделан фильтром по умолчанию для уменьшения масштаба в некоторой точке). 262> изменяет размеры изображений шире, чем 262 px, так что их ширина составляет 262 px.

Другие вопросы по тегам