Команда ImageMagick для не дает идеального результата

Я использую imagemagick для изменения размера и обрезки изображения.

Тест Изображения :

enter image description here

Мне нужно изменить размер для кадра 300 x 320 для этого сначала я изменяю размер изображения, а затем обрезаю его, и я использую следующие команды:

exec("convert /uploadImagePath -thumbnail  300  /newImagePath");

exec("convert /newImagePath -gravity Center -crop 290x310+0+0 /newImagePath");

но это дает мне следующее изображение

enter image description here

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

2 ответов


попробуй:

$inputFile = "WPTgp.jpg";
exec("convert {$inputFile} -resize 290x310^ -gravity Center -crop 290x310+0+0 picCropped.png");

надеюсь, что это поможет


(ответ обновляется, предоставляя иллюстрированный пример -liquid-rescale далее теперь)


размеры вашего оригинального изображения:

489 x 640 pixels

ваши желаемые размеры, кажется, являются:

290 x 310 pixels

это не может масштабироваться до этих измерений без либо:

  1. обрезка (не сохраняйте все области начального изображения)
  2. сохранение желаемой ширины (отказаться от желаемого высота)
  3. сохранение желаемой высоты (отказаться от желаемой ширины)
  4. искажение (не держите соотношение сторон при масштабировании)
  5. padding (добавить несколько пикселей к одному или нескольким краям)
  6. удаление пикселей, где это не очевидно ("жидкое масштабирование "или" резьба по шву"-- посмотреть в Википедии)

ваш результат показывает '1.- (кроппинг), что тебе не нравится. Так у вас есть варианты '2.'(учета ширины), '3.' (соответствие высота), '4.'(искажения), '5.'(дополнение) и '6.(резьба по швам) осталось проверить.

'2.': Поддержание желаемой высоты

convert WPTgp.jpg -resize x310 keep-height.jpg

результирующее изображение имеет размеры 237 x 310 pixels.
Keep Height.... Keep Height
(определите ширину автоматически)

'3.': Сохранение желаемой ширины

convert WPTgp.jpg -resize 290x keep-width.jpg

результирующее изображение имеет размеры 290 x 380 pixels.
Keep Width..... Keep Width
(определить высоту автоматически)

'4.': Искажение

convert WPTgp.jpg -resize 290x310\! distorted.jpg

результирующее изображение имеет размеры 290 x 310 pixels.
Distorted...... Distorted
(игнорировать соотношение сторон -- искажать изображение, если требуется, чтобы соответствовать размерам)

'5.': Padding

convert WPTgp.jpg \
   -resize 290x310 \
   -gravity center \
   -background orange \
   -extent 290x310 \
    padded.jpg

результирующее изображение имеет размеры 290 x 310 pixels. (Оранжевый фон был добавлен только для того, чтобы продемонстрировать, что "расширение" изображения действительно работает.)
Padded......... Padded
(сохранить соотношение сторон -- расширить изображение для желаемых размеров)

'6.': Резьба По Швам

convert WPTgp.jpg -liquid-rescale 290x310\! liquid.jpg

Выше будет команда, которую вы спонтанно получите от быстрого чтения ссылки на параметры команды ImageMagick. Однако, это не работает хорошо, и вместо этого я использовал:

convert WPTgp.jpg -liquid-rescale 599x640\! -scale 290x310 liquid.jpg
convert WPTgp.jpg -liquid-rescale 599x640\! -scale 48.4%   liquid.jpg

Ниже приведено объяснение, почему мне нужно было изменить его....
Liquid-rescaled 'Liquidly' rescaled
Извините -- я не могу предоставить пример изображения прямо сейчас; для этого требуется дополнительный делегат ImageMagick liblqr (библиотека масштабирования жидкости) для установки, которой у меня сейчас нет) я теперь имел возможность создать liquidly изменена версия оригинальный образ.


предостережения о резьбе по шву/'-liquid-rescale':

как указано выше, последнее изображение не результат моего первоначально предлагаемая команда, но одной из этих двух измененных версий:

convert WPTgp.jpg -liquid-rescale 599x640\! -scale 290x310 liquid.jpg
convert WPTgp.jpg -liquid-rescale 599x640\! -scale 48.4%   liquid.jpg

помните, что у нас есть исходное изображение 489x610 пикселей, которое мы должны масштабировать до 290x310 пикселей. Но!--10--> не очень хорошо масштабировать в двух измерениях сразу - он предназначен для масштабирования только в одном направлении (горизонтальном или вертикальном). Если вы попытаетесь сделать оба сразу, результаты могут быть не такими, как вы ожидали. Вот результат для первоначально предложенного команда:

 convert WPTgp.jpg -liquid-rescale 290x310\! liquid.jpg

LQR gone wrong liquid-rescale gone wrong

вот почему я придумал две измененные команды, которые работают в два этапа:

  1. во-первых, примените масштабирование жидкости только к горизонтальному измерению, расширяя ширину оригинала с 489 пикселей до 599 пикселей.
  2. во-вторых, примените "нормальное" масштабирование пропорций к промежуточному результату для получения конечного изображения.