Добавьте белую рамку вокруг изображения в расширении PHP ImageMagick - PullRequest
0 голосов
/ 18 января 2019

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

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

Мой оригинальный код imagemagic exec:

exec("convert -define jpeg:size=100x100 test.jpg -thumbnail '480x360>' -background white -gravity center -extent  480x360  output.jpg");

Это отлично работает, но теперь я хочу скопировать его в PHP-расширение ImageMagick. Я попробовал ниже, но это не работает.

$im = new Imagick('input.jpg');
$im->setImageFormat('jpeg');
$im->setGravity('Imagick::GRAVITY_CENTER');
$im->setImageBackgroundColor('white');
$im->extentImage( 480, 360);

$im->writeImage('output.jpg');

Я ожидаю, что на выходе будет изображение, которое помещается в рамку 480x360 и добавляет вокруг него пробелы. Изображение будет на 100% видимым с белым пространством вокруг области. Поэтому, если я загрузил изображение размером 100x300, это будет почтовый ящик в белом поле.

1 Ответ

0 голосов
/ 18 января 2019

При работе с API для extentImage требуется рассчитать смещение страницы (x, y).

Imagick::extentImage ( int $width , int $height , int $x , int $y ) : bool

Установка гравитации здесь не действует, и должно быть выдано предупреждение PHP (проверьте логи).

Попробуйте следующее ...

$im = new Imagick('rose:');
$im->setImageBackgroundColor('GREEN');
$offsetX = 240 - $im->getImageWidth() / 2;
$offsetY = 180 - $im->getImageHeight() / 2;
$im->extentImage( 480, 360, -$offsetX, -$offsetY);
$im->writeImage('output.jpg');

output.jpg

...