当前位置:Gxlcms > PHP教程 > PHP版字符化图像

PHP版字符化图像

时间:2021-07-01 10:21:17 帮助过:37人阅读

看到这位老兄的帖子来的兴趣 http://www.oschina.net/code/snippet_234517_15356

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

测试用的是OSC的logo,大家看看效果如何
(图片被缩略了,新窗口打开这个地址看,2000*560的图 https://img.gxlcms.com//Uploads-s/new/2019-09-22-201922/11033136_K1mt.png)


====================================================
PNG,GIF,JPG我都试了下,都能正常字符化 :)
  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<$maxGray+1;$i++){
  21. $color = 255-round(200/$maxGray)*$i+55;
  22. $gray[$i] = imagecolorallocate($txtImage,$color,$color,$color);
  23. }
  24. //绘制字符
  25. for($y=0;$y<$rawImgHeigh;$y++){
  26. for($x=0;$x<$rawImgWidth;$x++){
  27. Imagechar($txtImage,1,$x*6,$y*9,$txt[rand(0,10)],$gray[$grayData[$x][$y]]);
  28. }
  29. }
  30. //创建最终图像
  31. $Image = ImageCreate($rawImgWidth*10,$rawImgHeigh*10);
  32. //拉伸图像
  33. imagecopyresampled($Image, $txtImage, 0, 0, 0, 0,$rawImgWidth*10,$rawImgHeigh*10,$rawImgWidth*6,$rawImgHeigh*9);
  34. //定义文件头
  35. header('Content-type: image/png');
  36. //输出图像
  37. ImagePNG($Image);
  38. //销毁图像
  39. ImageDestroy($Image);
  40. /*
  41. 获取灰度值
  42. */
  43. function getGrayData($mImage,$mImgWidth,$mImgHeigh){
  44. for($mY=0;$mY<$mImgHeigh;$mY++){
  45. for($mX=0;$mX<$mImgWidth;$mX++){
  46. $mRGB = Imagecolorat($mImage, $mX, $mY);
  47. $mR = ($mRGB >> 16) & 0xFF;
  48. $mG = ($mRGB >> 8) & 0xFF;
  49. $mB = $mRGB & 0xFF;;
  50. $mGrayData[$mX][$mY] = ($mR * 19595 + $mG * 38469 + $mB * 7472) >> 16;
  51. }
  52. }
  53. return $mGrayData;
  54. }
  55. ?>

人气教程排行