PHP使用imageline和XOR
发布时间:2020-12-13 22:29:49 所属栏目:PHP教程 来源:网络整理
导读:我试图使用图像GD库使用XOR过滤器绘制线条.我无法找到一个简单的方法来做到这一点,因此被绘制的线条“翻转”为白色到黑色和副相对.有解决方案吗 解决方法 我很确定使用内置的imageline PHP函数绘制XOR行是不可能的.虽然您可以使用imagesetpixel和自定义线条
我试图使用图像GD库使用XOR过滤器绘制线条.我无法找到一个简单的方法来做到这一点,因此被绘制的线条“翻转”为白色到黑色和副相对.有解决方案吗
解决方法
我很确定使用内置的imageline
PHP函数绘制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,$y,$color); if ($d<0) { $d+=$dinc1; $x+=$xinc1; $y+=$yinc1; } else { $d+=$dinc2; $x+=$xinc2; $y+=$yinc2; } } return ; } 功能完美适用于从文件创建的图像. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |