Команда ImageMagick для не дает идеального результата
Я использую imagemagick для изменения размера и обрезки изображения.
Тест Изображения :
Мне нужно изменить размер для кадра 300 x 320 для этого сначала я изменяю размер изображения, а затем обрезаю его, и я использую следующие команды:
exec("convert /uploadImagePath -thumbnail 300 /newImagePath");
exec("convert /newImagePath -gravity Center -crop 290x310+0+0 /newImagePath");
но это дает мне следующее изображение
Как вы можете видеть, изображение не завершено ... пожалуйста, помогите мне, где я ошибаюсь
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
это не может масштабироваться до этих измерений без либо:
- обрезка (не сохраняйте все области начального изображения)
- сохранение желаемой ширины (отказаться от желаемого высота)
- сохранение желаемой высоты (отказаться от желаемой ширины)
- искажение (не держите соотношение сторон при масштабировании)
- padding (добавить несколько пикселей к одному или нескольким краям)
- удаление пикселей, где это не очевидно ("жидкое масштабирование "или" резьба по шву"-- посмотреть в Википедии)
ваш результат показывает '1.- (кроппинг), что тебе не нравится. Так у вас есть варианты '2.'(учета ширины), '3.' (соответствие высота), '4.'(искажения), '5.'(дополнение) и '6.(резьба по швам) осталось проверить.
'2.': Поддержание желаемой высоты
convert WPTgp.jpg -resize x310 keep-height.jpg
результирующее изображение имеет размеры 237 x 310 pixels
.Keep Height....
(определите ширину автоматически)
'3.': Сохранение желаемой ширины
convert WPTgp.jpg -resize 290x keep-width.jpg
результирующее изображение имеет размеры 290 x 380 pixels
.Keep Width.....
(определить высоту автоматически)
'4.': Искажение
convert WPTgp.jpg -resize 290x310\! distorted.jpg
результирующее изображение имеет размеры 290 x 310 pixels
.Distorted......
(игнорировать соотношение сторон -- искажать изображение, если требуется, чтобы соответствовать размерам)
'5.': Padding
convert WPTgp.jpg \
-resize 290x310 \
-gravity center \
-background orange \
-extent 290x310 \
padded.jpg
результирующее изображение имеет размеры 290 x 310 pixels
. (Оранжевый фон был добавлен только для того, чтобы продемонстрировать, что "расширение" изображения действительно работает.)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
Извините -- я не могу предоставить пример изображения прямо сейчас; для этого требуется дополнительный делегат ImageMagick я теперь имел возможность создать liquidly изменена версия оригинальный образ.liblqr
(библиотека масштабирования жидкости) для установки, которой у меня сейчас нет)
предостережения о резьбе по шву/'-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
вот почему я придумал две измененные команды, которые работают в два этапа:
- во-первых, примените масштабирование жидкости только к горизонтальному измерению, расширяя ширину оригинала с 489 пикселей до 599 пикселей.
- во-вторых, примените "нормальное" масштабирование пропорций к промежуточному результату для получения конечного изображения.