+ -
当前位置:首页 → 问答吧 → 实现图片反色

实现图片反色

时间:2011-10-05

来源:互联网

函数名: fanse($src,$fs=0)
参数设置:$src--原始图片地址;$fs--是否反色 1反色0不,默认不反色
功能:实现图片颜色的相反,路黑-白,对于黑白
反色原理:将RGB三个颜色的分量分别被256减,就得到反色后的RGB分量了

黑兔图片http://shunhuayangzhi.com/uploads/allimg/101218/1_101218115153_1.jpg

  1. <?php
  2. /*
  3. 函数名: fanse($src,$fs=0)
  4. 参数设置:$src--原始图片地址;$fs--是否反色 1反色0不,默认不反色
  5. 功能:实现图片颜色的相反,路黑-白,对于黑白
  6. 反色原理:将RGB三个颜色的分量分别被256减,就得到反色后的RGB分量了
  7. */

  8. function fanse($src,$fs=0){
  9. //图片相关信息数组
  10. $arr=getimagesize($src);
  11. if(!$arr)die('图片参数存在问题');
  12. switch($arr[2]){
  13. case 1:$img=imagecreatefromgif($src);break;
  14. case 2:$img=imagecreatefromjpeg($src);break;
  15. case 3:$img=imagecreatefrompng($src);break;
  16. default:die('不支持的图片类型');
  17. }

  18. if($fs==1){
  19. //图片反色
  20. for($y=0;$y<$arr[1];$y++){
  21. for($x=0;$x<$arr[0];$x++){
  22. //获取颜色索引
  23. $index=imagecolorat($img,$x,$y);
  24. //颜色数组
  25. $color_arr=imagecolorsforindex($img,$index);
  26. //数值翻转
  27. $red=256-$color_arr['red'];
  28. $green=256-$color_arr['green'];
  29. $blue=256-$color_arr['blue'];
  30. $fanse=imagecolorallocate($img,$red,$green,$blue);
  31. //在该点设置相反颜色
  32. imagesetpixel($img,$x,$y,$fanse);

  33. /*$colorReverse=(~$index) & 0xFFFFFF ;//php用的32位的,所以需要去掉最开始8个1
  34. imagesetpixel($img,$x,$y,$colorReverse);
  35. */
  36. }
  37. }

  38. }//end if($fs==1)

  39. //根据图片类型设置输出
  40. switch($arr[2]){
  41. case 1:header('content-type:image/gif');imagegif($img,false,100);break;
  42. case 2:header('content-type:image/jpeg');imagejpeg($img,false,100);break;
  43. case 3:header('content-type:image/png');imagepng($img,false,100);break;
  44. }

  45. }//end function fanse($src)






  46. //测试例子
  47. set_time_limit(0);

  48. //图片地址
  49. $src='http://shunhuayangzhi.com/uploads/allimg/101218/1_101218115153_1.jpg';//黑兔

  50. //反色或正常输出图片
  51. fanse($src,1);



  52. ?>
复制代码

作者: 阿修罗   发布时间: 2011-10-05

谢谢共享 求简化

作者: cucme   发布时间: 2011-10-05