2011-01-30 32 views
4

我想使用圖像GD庫來使用XOR濾鏡來繪製線條。我一直無法找到一個簡單的方法來做到這一點,因此一條線被「翻轉」成白色到黑色,反之亦然。任何解決方案使用圖像線和XOR的PHP

+0

請解釋什麼是異或過濾器是 – 2011-02-08 00:27:23

+1

@Mark - 不是將筆的顏色複製到畫布上要繪製的點的顏色上,而是使用該顏色對其進行異或並將結果放在那裏。如果你做了兩次同樣的事情,那麼在你畫出任何東西之前,你在畫布上會得到相同的顏色。 – 2011-02-09 02:09:35

回答

1

我敢肯定,使用PHP函數內置的imageline來繪製XOR行是不可能的。儘管你可以用imagesetpixel和自定義線條繪製算法自己繪製。例如像這樣的東西可以工作(Bresenham Line Algorythm for PHP):

function line($im,$x1,$y1,$x2,$y2) { 

$deltax=abs($x2-$x1); 
$deltay=abs($y2-$y1); 

if ($deltax>$deltay) { 
$numpixels=$deltax+1; 
$d=(2*$deltay)-$deltax; 
$dinc1=$deltay << 1; $dinc2=($deltay-$deltax) << 1; 
$xinc1=1; $xinc2=1; 
$yinc1=0; $yinc2=1; 
} else { 
$numpixels=$deltay+1; 
$d=(2*$deltax)-$deltay; 
$dinc1=$deltax << 1; $dinc2=($deltax-$deltay)<<1; 
$xinc1=0; $xinc2=1; 
$yinc1=1; $yinc2=1; 
} 

if ($x1>$x2) { 
$xinc1=-$xinc1; 
$xinc2=-$xinc2; 
} 

if ($y1>$y2) { 
$yinc1=-$yinc1; 
$yinc2=-$yinc2; 
} 
$x=$x1; 
$y=$y1; 

for ($i=0;$i<$numpixels;$i++) { 

$color_current = imagecolorat ($im, $x, $y); 
$r = ($color_current >> 16) & 0xFF; 
$g = ($color_current >> 8) & 0xFF; 
$b = $color_current & 0xFF; 
$color = imagecolorallocate($im, 255 - $r, 255 - $g, 255 - $b); 

imagesetpixel($im,$x,$y,$color); 

if ($d<0) { 
    $d+=$dinc1; 
    $x+=$xinc1; 
    $y+=$yinc1; 
} else { 
    $d+=$dinc2; 
    $x+=$xinc2; 
    $y+=$yinc2; 
} 
} 
    return ; 
} 

功能完美適用於從文件創建的圖像。