2015-05-29 2 views
3

Я использую PHP Imagick для управления изображениями.PHP Imagick: как изменить размер без увеличения?

У меня есть два варианта использования: «изменить размер» и «обрезать».

В случае «размера», если размеры оригинального изображения меньше заданной ширины и высоты, I не нужно Imagick, чтобы масштабировать его и вместо этого хотите просто вернуть исходный размер.

Однако, как говорит документация PHP, поведение Imagick было изменено с версии 3 (я использую версию 6+), что оно всегда увеличивало бы изображение.

Примечание: поведение параметра bestfit изменилось в Imagick 3.0.0. Перед этой версией данного размера 400x400 изображение размеров 200x150 останется нетронутым. В Imagick 3.0.0 и более поздних версиях изображение было бы масштабировано до размера 400x300, поскольку это «наилучшее соответствие» для данных размеров. Если используется параметр bestfit, должны быть указаны как ширина, так и высота .

Так, в моем случае для заданных размеров 400x400 изображение размеров 200x150 должно возвращать изображение размером 200x150, а не 400x300. Для заданных размеров 100x100 изображение размером 200x150 должно возвращать изображение 100x75 (то есть масштабирование должно происходить).

Я пробовал thumbnailImage(), resizeImage() и scaleImage() без везения. Если я устанавливаю bestfit в false, это делает обрезку, а это не то, что я хочу с изменением размера.

Есть ли способ сделать это с помощью Imagick?

+0

* "версия 6 +" * не является полезным заявление, чтобы указать версию; * "версия 6.9.1-3 *" будет ... Так что, пожалуйста, дайте вывод 'convert -version'. –

+0

Я просто хотел упомянуть, что моя версия больше 3.0, и меня поражает измененное поведение. Ниже приводится выход новообращенный -версия: Версия: ImageMagick 6.7.7-10 2014-03-06 Q16 http://www.imagemagick.org Copyright: Copyright (C) 1999-2012 ImageMagick студия ООО Особенности : OpenMP – NexWarner

+0

почему бы не просто написать код, который делает именно то, что вы хотите с помощью http://php.net/manual/en/imagick.getimagewidth.php – Danack

ответ

-1

Используйте эту команду:

convert input.img -resize 400x400\> output.img 

Обратите внимание на специфический способ дать желаемое измерение с добавленным \> модификатора: он говорит процесс преобразования только изменить размер изображения, которые больше чем 400x400 пикселей. Изображения, которые меньше, остаются незатронутыми.

+0

Я не хочу, чтобы это выполнялось через командную строку (или через PHP exec()). Я хотел знать, есть ли способ в классе PHP Imagick. После изменения размера я передам объект другим методам для дальнейших манипуляций, таких как водяные знаки. – NexWarner

+0

@KurtPfeifle Imagick! = ImageMagick.Версия командной строки ImageMagick выполняет целую загрузку материалов, которые не отображаются через API, к которым имеет доступ Imagick. – Danack

2

Попробуйте сделать это так:

$max_width = 1200; 
$max_height = 800; 
$im = new Imagick($path_to_image); 
$im->resizeImage(
    min($im->getImageWidth(), $max_width), 
    min($im->getImageHeight(), $max_height), 
    imagick::FILTER_CATROM, 
    1, 
    true 
); 
Смежные вопросы