PHP實現圖片轉字元畫
看到網上有其他人用Python,js實現的圖片轉字元畫,挺有趣的,於是我嘗試著用php實現了一個。
原理
圖片轉字元畫本質上是將圖片上的畫素,根據其明暗程度的不同,選用不同的字元替換。其實現過程一般為
- 設定一個畫素塊大小,然後選取每個畫素塊的代表畫素
- 依次獲取每個畫素塊的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實現pdf轉圖片PHP
- 01-Python 圖片轉字元畫Python字元
- Java實現圖片轉字元輸出示例demoJava字元
- PHP實現水印效果(文字、圖片)PHP
- Windows 系統,PHP實現PPT轉PDF,PDF轉圖片的操作WindowsPHP
- PHP實現圖片(檔案)上傳PHP
- PHP實現高畫質晰度無損圖片壓縮功能的程式碼PHP
- php圖片上傳之圖片轉換PHP
- 圖片轉繪畫效和繪畫軟體
- (轉)jquery實現圖片輪播jQuery
- Ajax+PHP實現非同步圖片上傳PHP非同步
- Java實現emf轉jpg png 圖片轉換Java
- PHP pdf轉化為圖片(PNG)PHP
- 滑鼠懸浮圖片實現翻轉效果
- 淺談JavaScript和Canvas實現彩色圖片轉換成黑白圖片JavaScriptCanvas
- PHP+jQuery+Ajax實現多圖片上傳介紹PHPjQuery
- jquery.gridrotator實現響應式圖片展示畫廊效果jQuery
- 在Delphi中實現圖片的旋轉、縮放 (轉)
- FFmpeg程式碼實現視訊轉jpg圖片
- office轉pdf和圖片實現線上預覽
- C#實現 word、pdf、ppt 轉為圖片C#
- 畫江湖之 PHP 多程式開發 【多工採集圖片】PHP
- 畫江湖之 PHP 多程式開發 [多工採集圖片]PHP
- PHP修改圖片PHP
- php 實現一個簡單的圖片邊緣檢測PHP
- 實現圖片預覽
- 實現圖片縮放
- JAVA實現圖片裁剪Java
- PHP轉換emoji表情為HTML字元實體PHPHTML字元
- 字元型圖片驗證碼識別完整過程及Python實現字元Python
- C# 實現PPT 每一頁轉成圖片C#
- Matlab批量實現圖片檔案格式轉換Matlab
- java Html2Image 實現html轉圖片功能JavaHTML
- 使用Python實現批次PPT轉圖片,格式支援PNG、JPG,轉後圖片後批次重新命名Python
- Java和PHP兩種方式實現上傳圖片到新浪微博的圖床JavaPHP圖床
- JPG轉PDF如何實現?圖片批次轉換PDF的快捷方法
- 字元作畫,我用字元畫個冰墩墩字元