2010-01-22 3 views
0

현재 많은 수의 이미지를 분석하고 가장 가까운 색상을 파악해야하는 애플리케이션을 개발 중입니다.투명도가있는 PHP 이미지 컬러 분석

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; 
    } 

문제점 I 투명성을 갖는 이미지를 제공 할 때마다, GDLib 따라서 잘못된 제조, 투명 블랙으로 consinders이다 (더 어두운) 출력 :

따라서 I를 정확하게 수행하는 코드를 발견 정말로 그렇습니다. 예를 들어

화살표 주위의 흰색 영역이 실제로 투명이 아이콘 :

example http://img651.imageshack.us/img651/995/screenshot20100122at113.png

사람이 어떻게이 문제를 해결하는 방법을 말해 줄래?

답변

1

imageColorTransparent()가 필요합니다. http://www.php.net/imagecolortransparent

투명도는 색상이 아닌 이미지의 속성입니다. 따라서 $transparent = imagecolortransparent($im)과 같은 것을 사용하여 이미지에 투명도가 있는지 확인한 다음 $ colorArray에서 해당 색상을 무시하거나 함수에서 반환 할 때 투명 색상을 식별하는 다른 방법을 사용하십시오. 그 모든 것은 반환 된 데이터를 사용하는 방법에 따라 다릅니다.

- M