У меня возникли проблемы с созданием образа с расширением PHP Imagick. Все работает отлично, за исключением того, что мой следующий «монтаж» имеет белый фон, и поэтому я не могу наложить его поверх чего-то другого. Как я могу создать монтаж с прозрачным фоном?
$Montage = $Icons->montageImage(new imagickdraw(), "3x2+0+0", "34x34+3+3", imagick::MONTAGEMODE_UNFRAME, "0x0+0+0"); $Canvas->compositeImage($Montage, $Montage->getImageCompose(), 5, 5);
Благодаря!!
У меня была та же проблема, и я обнаружил, что 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++); }
Я знаю, что это старый вопрос, но я нашел другой способ сделать это, используя функцию 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);
Просто наткнулся на этот вопрос и решил опубликовать другое решение в случае, если кто-то хочет другой способ сделать это без ручного цикла.