PHP实现图片转字符画
2017-08-26 11:59
465 查看
看到网上有其他人用Python,js实现的图片转字符画,挺有趣的,于是我尝试着用php实现了一个。
设置一个像素块大小,然后选取每个像素块的代表像素
依次获取每个像素块的RGB值,计算灰度值
根据灰度值选择填充字符
输出
代码阅读效果不佳?直接下载。
2.当前此函数默认输出到网页上,也可以启用输出到文本功能。
3.填充字符的选择对输出效果有很大的影响,应当尽量使灰度高的像素对应间隙大的字符。
4.使用时只需调用output函数,并将图片文件放在同一级目录下即可。
附上一张效果图
在线图片转字符画:GO!
个人见解,如有错误,欢迎指正。
原理
图片转字符画本质上是将图片上的像素,根据其明暗程度的不同,选用不同的字符替换。其实现过程一般为设置一个像素块大小,然后选取每个像素块的代表像素
依次获取每个像素块的RGB值,计算灰度值
根据灰度值选择填充字符
输出
实现
<?php /* * 功能: * 由不同图片格式,获得图像资源并返回 */ function getImg($imgName){ $arr=getimagesize($imgName); if($arr[2]==1){ return imagecreatefromgif($imgName); }else if($arr[2]==2){ return imagecreatefromjpeg($imgName); }else if($arr[2]==3){ return imagecreatefrompng($imgName); }else{ echo "对不起,暂不支持该格式!"; } } function output($imgName,$size="medium",$echoText="false"){ /* * 参数说明: * imageName 图像名称 * size 可选参数:low、medium、big 功能:控制输出不同的字符画大小 * echoText 功能:设置是否保存为txt文件 */ $im = getImg($imgName); $output=""; $str='@80GCLft1i;:,. '; //填充字符 //选取每个像素块的代表点。步长越大,图片越小 switch($size){ case "small": $stepx=8; $stepy=16; break; case "medium": $stepx=4; $stempy=8; break; case "big": $stepx=2; $stepy=4; break; default: $stepx=4; $stempy=8; break; } $x=imagesx($im); $y=imagesy($im); for($j=0;$j<$y;$j+=$stepy){ for($i=0;$i<$x;$i+=$stepx){ $colors=imagecolorsforindex($im,imagecolorat($im,$i,$j)); //获取像素块的代表点RGB信息 $greyness=(0.3*$colors["red"]+0.59*$colors["green"]+0.11*$colors["blue"])/255; //灰度值计算公式:Gray=R*0.3+G*0.59+B*0.11 $offset=(int)ceil($greyness*(strlen($str)-1)); //根据灰度值选择合适的字符 if($offset==(strlen($str)-1)) $output.=" "; //替换空格为 ;方便网页输出 else $output.=$str[$offset]; } $output.="<br/>"; } imagedestroy($im); //输出到文本(可选) if($echoText){ $output=str_replace("<br/>",PHP_EOL,$output); $output=str_replace(" "," ",$output); @unlink("output.txt"); file_put_contents("output.txt",$output); } return $output; //默认输出到网页 }//使用时直接调用output函数即可
$res=output("test.jpg","small",false); echo "<div style='font-family:Consolas,Monaco,monospace;'>".$res."</div>";
代码阅读效果不佳?直接下载。
说明
1.目前这个用php实现的图片转字符画函数支持gif,jpg,jpeg,png格式。新版的PHP7(>=7.2.0)还可以支持bmp格式,大家可以尝试自己添加。2.当前此函数默认输出到网页上,也可以启用输出到文本功能。
3.填充字符的选择对输出效果有很大的影响,应当尽量使灰度高的像素对应间隙大的字符。
4.使用时只需调用output函数,并将图片文件放在同一级目录下即可。
附上一张效果图
在线图片转字符画:GO!
个人见解,如有错误,欢迎指正。
相关文章推荐
- PHP设置图片文件上传大小的具体实现方法
- PHP实现图片简单上传
- php文字水印和php图片水印实现代码(二种加水印方法)
- PHP实现浏览器中直接输出图片的方法示例
- PHP实现验证码图片
- EvaThumber : 基于URL的图片处理库 (可实现缩略图 | 二维码 | 水印 | 面部识别等,基于PHP)
- PHP使用finfo_file()函数检测上传图片类型的实现方法
- PHP实现图片下载功能,浏览器直接保存
- js和iframe实现图片无刷新上传【PHP技术】
- php封装类实现的图片上传可直接引用
- 基于PHP实现等比压缩图片大小
- PHP+JavaScript 实现图片无刷新上传
- 如何实现php图片等比例缩放
- php实现按指定大小等比缩放生成上传图片缩略图的方法
- php实现图片缩放功能类
- php模拟post上传图片实现代码
- 真正的最短代码实现图片自适应div并且垂直居中(php实现无js)
- php中图片上传的简单实现
- php完美实现下载远程图片保存到本地
- php实现图片文件与下载文件防盗链的方法