ImageMagick -- setImageAlphaChannel not working (php)
image-processing, imagemagick, imagick, php
Solution
I also was having issues with removing the alpha channel of PNG's and GIF's, so I tried a couple things, but ended up using this:
// Image has transparency
if ($image->getImageAlphaChannel()) {
// Remove alpha channel
$image->setImageAlphaChannel(11);
// Set image background color
$image->setImageBackgroundColor('white');
// Merge layers
$image->mergeImageLayers(imagick::LAYERMETHOD_FLATTEN);
}
I went with using "11" because imagick::ALPHACHANNEL_REMOVE wouldn't work with my version. For reference on imagick::ALPHACHANNEL_REMOVE, see this comment: http://php.net/manual/en/imagick.flattenimages.php#116665
Problem
So I have this IM command ($plistnew is a list of coords as you'd expect for polygon): ``` convert in.png ( -size 101x101 xc:black -fill white \ -draw "polygon $plistnew" -alpha off \ -crop 101x100+0+1 +repage \ -scale 101x1! ) \ -clut out.png ``` So I need to convert this to pure PHP. I have been pretty much successful except for one remaining issue with setImageAlphaChannel(). Anyway, this is my PHP: ``` $tmpa = new Imagick(); // for the image I'm assuming is generated inside the parens $tmpa->newPseudoImage(101, 101, 'canvas:black'); // xc:black $draw = new ImagickDraw(); $draw->setFillColor(new ImagickPixel('white')); // -fill white $draw->polygon($points); // -draw "polygon $plistnew" $tmpa->drawImage($draw); $tmpa->setImageAlphaChannel(self::ALPHACHANNEL_DEACTIVATE); // -alpha off $tmpa->cropImage(101, 100, 0, 1); // -crop 101x100+0+1 // +repage $tmpa->resetImagePage(''); $tmpa->scaleImage(101, 1); // -scale 101x1! -- I think scaleImage() ignores ratio per the ! by default ... I'm not positive though. $im = new Imagick('in.png'); $im->clutImage($tmpa); // -clut $im->writeImage('out.png'); $tmpa->destroy(); ``` The $points variable is an array formed properly for use with ImagickDraw::polygon(). This line: ``` $tmpa->setImageAlphaChannel(self::ALPHACHANNEL_DEACTIVATE); ``` flat out doesn't work. It produces this error: ``` PHP Fatal error: Uncaught exception 'ImagickException' with message 'Unable to set image alpha channel' ``` When I comment that line out everything seems to be working fine otherwise. How can I prevent this error?