Я хочу сделать часть изображения прозрачной, я попробовал код ниже, даже попробовал много констант как COMPOSITE_DSTOUT, но все не сработало, кто-нибудь знает, как это сделать?
$fooImage->newImage(256, 256, new ImagickPixel('transparent')); $Image->compositeImage($fooImage, Imagick::COMPOSITE_DSTOUT, $offsetX, offsetY);
Я проверил код ниже, просто получил желтый цвет с черным, не прозрачным:
$width = 256; $height = 256; $image = new Imagick(); $image->newImage($width, $height, new ImagickPixel('yellow')); $x = 50; $y = 100; $fooWidth = 100; $fooHeight = 60; //Create a new transparent image of the same size $mask = new Imagick(); $mask->newImage($width, $height, new ImagickPixel('none')); $mask->setImageFormat('png'); //Draw onto the new image the areas you want to be transparent in the original $draw = new ImagickDraw(); $draw->setFillColor('black'); $draw->rectangle($x, $y, $x + $fooWidth, $y + $fooHeight); $mask->drawImage($draw); //Composite the images $image->compositeImage($mask, Imagick::COMPOSITE_DSTOUT, 0, 0, Imagick::CHANNEL_ALPHA); $image->setImageFormat('png'); $image->writeImage($path);
Получил черный внутри желтый, не прозрачный желтый
Вам нужно сделать черно-белую маску с размером вашего ввода (белый, где вы хотите, чтобы он был непрозрачным и черным, где вы хотите, чтобы он был прозрачным). Затем используйте эквивалент -compose copyopacity -composite, чтобы поместить маску в альфа-канал изображения. Извините, я не кодирую Imagick.
Вот пример использования синтаксиса командной строки ImageMagick:
Входные данные:
convert logo.jpg \( -size 640x480 xc:white -size 200x200 xc:black -geometry +200+100 -compose over -composite \) +geometry -alpha off -compose copy_opacity -composite result.png
Вы можете видеть, что это прозрачно, комбинируя его по другому изображению (в данном случае шахматной доске).
convert (-size 640×480 pattern: checkerboard) result.png -compose over -composite result2.jpg
Вы пытаетесь \ Imagick :: COMPOSITE_COPYOPACITY?
Потому что это, вероятно, правильный.