Imagick roundCorners делает изображение полупрозрачным - PullRequest
0 голосов
/ 17 июня 2011

Я нахожусь в процессе написания сценария изображения для веб-сайта, который я создаю, и для одного из режимов изображения мне нужно и обрезать изображение, и сделать для него закругленные углы.Вот код, который я сейчас использую:

$img = new Imagick();
$img->readImageBlob($data);
$img->resizeImage($width, $height, $img->FILTER_GAUSSIAN, 1);
$canvas = new Imagick();
$canvas->newImage($size[0], $size[1], new ImagickPixel('white'));
$canvas->compositeImage($img, imagick::COMPOSITE_OVER, 0, 0);
$canvas->roundCorners(10, 10);
$canvas->setImageFormat('png');

Результирующее изображение

Однако полученное изображение примерно полупрозрачно, как показано выше, за исключениемя предполагаю, что 10-пиксельная граница px вокруг края, созданная roundCorner.Я пробовал много разных способов сделать это, в том числе напрямую обрезать $ img и roundCorner, но результат получился без закруглений.

Я подозреваю, что CompositImage - вор в этой драме, ноЯ не могу сказать наверняка.Кто-нибудь?

РЕДАКТИРОВАТЬ: Исправление: Если я делаю решение обрезки и округления, я получаю закругленные углы, но они имеют черный фон.Это код, который я использую здесь.Кто-нибудь заметил ошибку / решение?

$img = new Imagick();
$img->readImageBlob($data);
$img->resizeImage($width, $height, $img->FILTER_GAUSSIAN, 1);
$img->cropImage($size[0], $size[1], 0, 0);
$img->roundCorners(10, 10);

РЕДАКТИРОВАТЬ 2: Решением для обрезки и разрешения округления было убедиться, что это png, так что он имеет альфа-поддержку.Однако результат такой же, как и в моем исходном коде.

РЕДАКТИРОВАТЬ 3: Попробовал этот сценарий на моем сервере развертывания, и он работал так, как я хотел, поэтому, похоже, есть некоторые проблемы сверсия imagick / php-imagick поставляется с macports.Спасибо за помощь!

Ответы [ 2 ]

0 голосов
/ 17 июня 2011

Это была проблема с версией Imagick / php-imagick, поставляемой с текущими macports.Не удалось решить проблему для моего компьютера, но сценарий работает так, как задумано на моем сервере развертывания.

0 голосов
/ 17 июня 2011

Вы можете указать imagemagick дать вам альфа-фон с

$img->setImageAlphaChannel ( imagick::ALPHACHANNEL_TRANSPARENT )

или попробуйте явно установить формат изображения PNG24 перед выполнением каких-либо преобразований.

Здесь важен порядок, изображениенужен альфа-канал , прежде чем вы выставите фон.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...