PHP image color analysis with transparency

occurasaumn

New Member
I am currently working on an application that needs to analyse a number of images and figure out what color they're closest to.Therefore I found a code snippet that does exactly that:\[code\] function analyzeImageColors($im, $xCount =3, $yCount =3) { //get dimensions for image $imWidth =imagesx($im); $imHeight =imagesy($im); //find out the dimensions of the blocks we're going to make $blockWidth =round($imWidth/$xCount); $blockHeight =round($imHeight/$yCount); //now get the image colors... for($x =0; $x<$xCount; $x++) { //cycle through the x-axis for ($y =0; $y<$yCount; $y++) { //cycle through the y-axis //this is the start x and y points to make the block from $blockStartX =($x*$blockWidth); $blockStartY =($y*$blockHeight); //create the image we'll use for the block $block =imagecreatetruecolor(1, 1); //We'll put the section of the image we want to get a color for into the block imagecopyresampled($block, $im, 0, 0, $blockStartX, $blockStartY, 1, 1, $blockWidth, $blockHeight ); //the palette is where I'll get my color from for this block imagetruecolortopalette($block, true, 1); //I create a variable called eyeDropper to get the color information $eyeDropper =imagecolorat($block, 0, 0); $palette =imagecolorsforindex($block, $eyeDropper); $colorArray[$x][$y]['r'] =$palette['red']; $colorArray[$x][$y]['g'] =$palette['green']; $colorArray[$x][$y]['b'] =$palette['blue']; //get the rgb value too $hex =sprintf("%02X%02X%02X", $colorArray[$x][$y]['r'], $colorArray[$x][$y]['g'], $colorArray[$x][$y]['b']); $colorArray[$x][$y]['rgbHex'] =$hex; //destroy the block imagedestroy($block); } } //destroy the source image imagedestroy($im); return $colorArray; }\[/code\]Problem is that whenever I provide an image with transparency, GDLib consinders the transparency to be black, thus producing a wrong (much darker) output than is really the case.For example this icon where the white area around the arrow is actually transparent:
screenshot20100122at113.png
Can anyone tell me how to work around this?
 
Back
Top