欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

PHP版 字符化图像

程序员文章站 2022-06-06 20:10:45
...
看到这位老兄的帖子来的兴趣 http://www.oschina.net/code/snippet_234517_15356

图像默认放大10倍,这样看的比较清楚......

测试用的是OSC的logo,大家看看效果如何
(图片被缩略了,新窗口打开这个地址看,2000*560的图 http://img.it-home.org/data/attachment/forum/2014pic/11033136_K1mt.png)


====================================================
PNG,GIF,JPG我都试了下,都能正常字符化 :) PHP版 字符化图像
  1. $txt =array('A','B','C','D','E','F','G','H','I','J','K');
  2. //加载原始图像
  3. $rawImage = ImageCreateFromGIF('logo.gif');
  4. //获取原始图像宽高
  5. $rawImgWidth = ImagesX($rawImage);
  6. $rawImgHeigh = ImagesY($rawImage);
  7. //获取原始图像灰度
  8. $grayData = getGrayData($rawImage,$rawImgWidth,$rawImgHeigh);
  9. //销毁图像
  10. ImageDestroy($rawImage);
  11. //创建文字图像
  12. $txtImage = ImageCreate($rawImgWidth*6,$rawImgHeigh*9);
  13. //新图像背景色
  14. imagecolorallocate($txtImage,0,0,0);
  15. //获取最大灰度
  16. for($i=0;$i $maxGrayArray[$i] = max($grayData[$i]);
  17. }
  18. $maxGray = max($maxGrayArray);
  19. //设置灰度对应颜色
  20. for($i=0;$i $color = 255-round(200/$maxGray)*$i+55;
  21. $gray[$i] = imagecolorallocate($txtImage,$color,$color,$color);
  22. }
  23. //绘制字符
  24. for($y=0;$y for($x=0;$x Imagechar($txtImage,1,$x*6,$y*9,$txt[rand(0,10)],$gray[$grayData[$x][$y]]);
  25. }
  26. }
  27. //创建最终图像
  28. $Image = ImageCreate($rawImgWidth*10,$rawImgHeigh*10);
  29. //拉伸图像
  30. imagecopyresampled($Image, $txtImage, 0, 0, 0, 0,$rawImgWidth*10,$rawImgHeigh*10,$rawImgWidth*6,$rawImgHeigh*9);
  31. //定义文件头
  32. header('Content-type: image/png');
  33. //输出图像
  34. ImagePNG($Image);
  35. //销毁图像
  36. ImageDestroy($Image);
  37. /*
  38. 获取灰度值
  39. */
  40. function getGrayData($mImage,$mImgWidth,$mImgHeigh){
  41. for($mY=0;$mY for($mX=0;$mX $mRGB = Imagecolorat($mImage, $mX, $mY);
  42. $mR = ($mRGB >> 16) & 0xFF;
  43. $mG = ($mRGB >> 8) & 0xFF;
  44. $mB = $mRGB & 0xFF;;
  45. $mGrayData[$mX][$mY] = ($mR * 19595 + $mG * 38469 + $mB * 7472) >> 16;
  46. }
  47. }
  48. return $mGrayData;
  49. }
  50. ?>
复制代码