Расширение PHP Imagick - Помощь по монтажу? - PullRequest
4 голосов
/ 14 мая 2010

У меня возникли проблемы при создании изображения с расширением Imagick PHP.Все работает хорошо, за исключением того, что мой следующий «монтаж» имеет белый фон, и поэтому я не могу наложить его поверх чего-то другого.Как я могу создать монтаж с прозрачным фоном?

       $Montage = $Icons->montageImage(new imagickdraw(), "3x2+0+0", "34x34+3+3", imagick::MONTAGEMODE_UNFRAME, "0x0+0+0");
      $Canvas->compositeImage($Montage, $Montage->getImageCompose(), 5, 5);

Спасибо !!

Ответы [ 2 ]

3 голосов
/ 21 июня 2013

Я знаю, что это старый вопрос, но я нашел другой способ сделать это с помощью функции montageImage Imagick. После того, как вы создадите свой объект Imagick, вы должны объявить фон прозрачным, как это:

$Icons->setBackgroundColor( new ImagickPixel('transparent') );

Как только это будет установлено, вы можете запустить объект через montageImage, который создаст montageImage с прозрачным фоном:

$Montage = $Icons->montageImage(new imagickdraw(), "3x2+0+0", "34x34+3+3", imagick::MONTAGEMODE_UNFRAME, "0x0+0+0");

Затем вы можете добавить новое монтажное изображение к вашему составному изображению, убедившись, что используете предопределенную составную константу Imagick COMPOSITE_ATOP или ваши желаемые константы, например:

$Canvas->compositeImage($Montage, imagick::COMPOSITE_ATOP, 5, 5);

Просто наткнулся на этот вопрос и решил опубликовать другое решение на тот случай, если кто-то еще захочет сделать это без ручного цикла.

3 голосов
/ 13 октября 2010

У меня была такая же проблема, и я обнаружил, что API-интерфейс MagickWand C, поддерживающий imagick), не поддерживает опцию монтажа.

В итоге я установил это вручную так:

// Add them to an array of Imagick objects, instead of using addImage().
$images = new Array();

// Make a transparent canvas.
$target = new Imagick();
$target->newImage($width, $height * count(images), 'none');

$i = 0;
foreach ($images as $image) {
    $target->compositeImage($image, imagick::COMPOSITE_COPY, 0, $height * $i++);
}
...