Page 1 of 1

Convert a set of colors of an image to transparent

Posted: Sun May 23, 2010 9:39 am
by pepe_yola
Hi:

I have developed a simple PHP code to convert some defined colors of an image to transparent, while keep the other colors (including transparent areas) as in the original image. The code is as follow:

Code: Select all

<?php
function Verify($Red,$Green,$Blue) {
        //Here I define the colors to convert to transparent
        
        if ($Red==245 and $Green==0 and $Blue==0) return false;
        if ($Red==196 and $Green==227 and $Blue==0 return false;
        return true;
}

$image_source = imagecreatefrompng('test.png'); 
$new_image = imagecreatetruecolor(256, 256); 
imagealphablending($new_image, false);
imagesavealpha($new_image, true);
$Fill = imagecolorallocatealpha($new_image,0,0,0,127); 
imagefill($new_image, 0, 0, $Fill);

for ($y=0;$y<256;$y++) {
        for ($x=0;$x<256;$x++) {
                $rgb = imagecolorat($image_source,$x,$y);
                $r = ($rgb >> 16) & 0xFF;
                $g = ($rgb >>8) & 0xFF;
                $b = $rgb & 0xFF;               
                if (Verify($r,$g,$b)) {imagesetpixel($new_image,$x,$y,$rgb);}           
        }
}       

header("Content-Type: image/png"); 
imagepng($new_image); 
imagedestroy($image_source);
imagedestroy($new_image);
?>
The script works very well but, as you can image, the performance is not very good. I would like to ask in this forum how to improve the performance of the code.

Thanks in advance.

Re: Convert a set of colors of an image to transparent

Posted: Mon May 24, 2010 1:03 am
by Christopher
Moved to Code Critique.