圖片轉字元格式 引言 前幾天看到一幅用字元(準確的說是ascii碼)繪製的doge圖像,覺得挺有意思 將他放到代碼的註釋部分,加上了 的字樣,放在了代碼的註釋部分(新建腳本的時候自動添加),同事看到了覺得挺有意思,問我怎麼搞得。 後來我仔細看了下這幅圖,分析了下,都是用ascii字元繪製的,通過as ...
圖片轉字元格式
引言
前幾天看到一幅用字元(準確的說是ascii碼)繪製的doge圖像,覺得挺有意思
<?php
/**
* :: ::
* :;J7, :, ::;7:
* ,ivYi, , ;LLLFS:
* :iv7Yi :7ri;j5PL
* ,:ivYLvr ,ivrrirrY2X,
* :;[email protected]: :ivu@kexianli.
* :iL7::,:::iiirii:ii;::::,,irvF7rvvLujL7ur
* ri::,:,::i:iiiiiii:i:irrv177JX7rYXqZEkvv17
* ;i:, , ::::iirrririi:i:::iiir2XXvii;L8OGJr71i
* :,, ,,: ,::[email protected]:i:::j1jri7ZBOS7ivv,
* ,::, ::rv77iiiriii:iii:i::,[email protected]
* ,, ,, ,:ir7ir::,:::i;ir:::i:i::rSGGYri712:
* ::: ,v7r:: ::rrv77:, ,, ,:i7rrii:::::, ir7ri7Lri
* , 2OBBOi,iiir;r:: ,irriiii::,, ,iv7Luur:
* ,, i78MBBi,:,:::,:, :7FSL: ,iriii:::i::,,:rLqXv::
* : iuMMP: :,:::,:ii;2GY7OBB0viiii:i:iii:i:::iJqL;::
* , ::::i ,,,,, ::LuBBu BBBBBErii:i:i:i:i:i:i:r77ii
* , : , ,,:::rruBZ1MBBqi, :,,,:::,::::::iiriri:
* , ,,,,::::i: @arqiao. ,:,, ,:::ii;i7:
* :, rjujLYLi ,,:::::,:::::::::,, ,:i,:,,,,,::i:iii
* :: BBBBBBBBB0, ,,::: , ,:::::: , ,,,, ,,:::::::
* i, , ,8BMMBBBBBBi ,,:,, ,,, , , , , , :,::ii::i::
* : iZMOMOMBBM2::::::::::,,,, ,,,,,,:,,,::::i:irr:i:::,
* i ,,:;u0MBMOG1L:::i:::::: ,,,::, ,,, ::::::i:i:iirii:i:i:
* : ,iuUuuXUkFu7i:iii:i:::, :,:,: ::::::::i:i:::::iirr7iiri::
* : :[email protected]:::::, ,:ii:::::::i:::::i::,::::iirrriiiri::,
* : 5BMBBBBBBSr:,::rv2kuii:::iii::,:i:,, , ,,:,:i@petermu.,
* , :r50EZ8MBBBBGOBBBZP7::::i::,:::::,: :,:,::i;rrririiii::
* :jujYY7LS0ujJL7r::,::i::,::::::::::::::iirirrrrrrr:ii:
* ,: :@kevensun.:,:,,,::::i:i:::::,,::::::iir;ii;7v77;ii;i,
* ,,, ,,:,::::::i:iiiii:i::::,, ::::[email protected];7:i,
* , , ,,,:,,::::::::iiiiiiiiii:,:,:::::::::iiir;ri7vL77rrirri::
* :,, , ::::::::i:::i:::i:i::,,,,,:,::i:i:::iir;@Secbone.ii:::
*
*
* Doge bless you!
* No bug!
*
* @Author 燕睿濤<[email protected]>
* @Date
* @Desc
*/
將他放到代碼的註釋部分,加上了Doge bless you! No bug!
的字樣,放在了代碼的註釋部分(新建腳本的時候自動添加),同事看到了覺得挺有意思,問我怎麼搞得。
後來我仔細看了下這幅圖,分析了下,都是用ascii字元繪製的,通過ascii字元的占用像素多少表現圖片的深淺,想通了原理決定自己實現一個圖片轉字元的工具。
處理圖片
我比較熟悉php,剛好php有GD庫可以處理圖片,簡直不要太合適~
對圖片的處理也比較簡單,讀取圖片,灰度處理,獲取每個像素點的灰度值,將灰度值的深淺轉換為ascii字元。
都去圖片之前,首先要做的就是統一介面,實現讀取多重類型的圖片,php的GD庫中,沒有直接提供相關的函數,造個小輪子:
class ImageCreate
{
// 要處理的目標,可能是文件
protected $target = "";
// 文件的類型
protected $type = 0;
protected $supportTypes = [
1 => "imagecreatefromgif", // gif
2 => "imagecreatefromjpeg", // jpg
3 => "imagecreatefrompng", // png
6 => "imagecreatefrombmp", // bmp
];
public function __construct($target, $type = 0)
{
$this->target = $target;
$this->type = $type;
}
public function create()
{
$type = $this->getType();
if (!isset($this->supportTypes[$type])) {
throw Exception("Type of image not support. Abstract[type[{$this->type}]]");
}
$func = $this->supportTypes[$type];
if (method_exists($this, $func)) {
$ret = $this->$func();
} else {
$ret = $func($this->target);
}
return $ret;
}
protected function getType()
{
if (!$this->type) {
$this->type = exif_imagetype($this->target);
}
return $this->type;
}
}
使用時候不用關心圖片類型,類庫內部幫你做了處理,(new ImageCreate($image))->create()
就獲取到了圖片resource句柄,供下一步使用。
php讀取像素點信息用下麵的公式,其中$x
,$y
分別表示像素點的位置。
$rgb = imagecolorat($this->resourceImage, $x, $y);
$r = ($rgb >> 16) & 0xFF;
$g = ($rgb >> 8) & 0xFF;
$b = $rgb & 0xFF;
像素灰度化,關於灰度化可以參考百度百科的解釋
灰度化,在RGB模型中,如果R=G=B時,則彩色表示一種灰度顏色,其中R=G=B的值叫灰度值,因此,灰度圖像每個像素只需一個位元組存放灰度值(又稱強度值、亮度值),灰度範圍為0-255。一般有以下四種方法對彩色圖像進行灰度化。
一般有以下四種方法對彩色圖像進行灰度化處理:分量法 最大值法平均值法加權平均法
這裡使用了加權平均法
根據重要性及其它指標,將三個分量以不同的權值進行加權平均。由於人眼對綠色的敏感最高,對藍色敏感最低,因此,按下式對RGB三分量進行加權平均能得到較合理的灰度圖像。
處理公式 intval($r * 0.228 + $g * 0.587 + $b * 0.114)
更詳細的內容這裡就不討論了,有興趣的可以自行查閱資料,這裡主要使用了加權平均法
求灰度值
這裡插敘下,當我完成開發後,發現,稍微大點的圖片,輸出信息很容易就換行了,看起來一團糟,這裡還要做一個比例縮放的功能,沿著寬高方向做不同的縮放,將多個像素點合併為1個,合併的時候簡單的取加權平均值。
gray = (gray0 + gray1 + ... + grayn)/n;
使用
這裡開發已經基本完成,已經放到github,發佈到composer,想看看效果的只需要通過composer命令composer require aizuyan/img2ascii
安裝就可。
安裝完成之後,會有vendor/bin/img2ascii
可執行文件,向下麵這樣執行他就可以了,第一個命令是要處理的圖片,-x是寬度方向像素縮小比例,-y是高度方向縮小比例(由於編輯器中ascii字元顯示的時候一般高度是寬度的兩倍,所以縮放的時候剛好反過來)
➜ bin img2ascii ~/Desktop/abm.jpg -x 10 -y 20
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::::::::::::::::::::::::::::::rrii: s:::::::::::::::::::::::
:::::::::::::::::::::::::::iisMN8B99r:::::::::::::::::::::::
:::::::::::::::::::::::::: iq0B8M0000r::::::::::::::::::::::
::::::::::::::::::::::::: @B8B09BB0@0B :::::::::::::::::::::
:::::::::::::::::::::::::r@BBNB08880B0v:::::::::::::::::::::
:::::::::::::::::::::::ir000B8NB888@B@Noi:::::::::::::::::::
::::::::::::::::::::::i00000BB8@B@@808BBsni:::::::::::::::::
:::::::::::::::::::::: 0B@B00no7vr7ii7rntipi::::::::::::::::
::::::::::::::::::::::tBB9mmoi;i i ii:;7s :i::::::::::::::::
:::::::::::::::::::::i000Nnsirvir i isi::::::::::::::::::
:::::::::::::::::::::i0B0nmmtii i rir:ip7::::::::::::::::::
::::::::::::::::::::7in8npstrpsrqpiisqtorr :::::::::::::::::
::::::::::::::::::::vvp9mtvppoqirs ;i7ovivi:::::::::::::::::
:::::::::::::::::::: orq0ttr irr7;ii :rvi:::::::::::::::::
:::::::::::::::::::::ivr9tmi;i7oitr iitqvi::::::::::::::::::
:::::::::::::::::::::: imnpsrt7soprri7isqr::::::::::::::::::
::::::::::::::::::::::: n9tsisqi :i :rvr7:::::::::::::::::::
::::::::::::::::::::::: qq9tr7iompvvoi7i::::::::::::::::::::
:::::::::::::::::::::::ioipmmqpiiiiri ::::::::::::::::::::::
::::::::::::::::::::i rrvrirsrnr7viir7ii::::::::::::::::::::
::::::::::: , ,. iv: ;riiiviirorrtrviirii ,,, :::::::::::::
::::::::::ii. iiii7iiiriri77r7ivri;i;:., . .r:::::::::::
::::::iri vv . .. :rr7;i :iiii:iiiviirir, . ..v;: i ::::::
:::i:iv;:rr . ... i i rr::;i r:r riiii: ... . :rr; i;: :::
:: v7v :::r. .. . :riiiiviiiiii:::iii. . . . r:ir:i ri::
::smtqiirr :. .......,iii;r; iiriii: . .. :iriv;irii::
:rmppir r;ri., ... .. . , , , . .. . . ,,7i;ir irr :
:instiv: r . i :, , ,, . . . .... , .rrvi:i vr:
:smNniv isp rq77i :::,,: :,::,,,, iipsr .viv;ii r7;:
下麵是幾張轉換先後圖片的效果。
n00nnNM8@8M99@B8088B8B0NsnMMMmm00@8B8B@BB0M9MmmmN080Nn9MB00@@B08noonmmm
9snM90NM@B900089B08B@B8rtnn0NMnm99M9nN0N0NN0nNmmN@0B8N990@000sqtssooots
M8B9n889M@80M08npm0NMmttiiii:ii : , :i i i7mM08MM09MnpstpsspoqqnN
m00NN0pmnM0pttonmq7 : . .... . , ,,, :i iss90morttqoom9N9nr
tmnnsN7qoNBMmovi , . . . . ... , i:: ::: :: ,, :iirpopnMBN9Mnnnn
ms99p7iqNNnqr: . . ..... . . . ..... iir iiiii:i::: ,, ir7mmnrnnmmMM
9M000mmmnq: . .... . . ... .. , :smvii;iirrrviiiii :irrirm8B
0BB00@Bmr ....... .. . . . . . , :i7s:v7i7rrivri77ri;i , ,, iip
8B00B08s . . . . ... . . ,,,:ir7iivqpqqor7ivv7ir : ::::i
B8B8B0s . .. ... .. . . ... , ,,,: iiotistpttsrrqssii::i i i
0BBBBo ., .... . .... . , , , , i oooorstnsoprosoviivir7 :rv
8@8Mi,. .. .. . . , , , , , : iqsrtnqotppsmsoporpttrpqtq
MMm ..,. ... .. . . , , , , ii imnmnnmrrsmnnmmmmmmmmmmrnB
Mmr .., ..... ,,, ,, ,, .... iii7n9nmtnrnmnnm9M9909MNm90BB
mp:. ., .. ,, ,, , , : ,, , ,:ivtMM9nnnmnnm00000N09099888@
0p,. . , :,, , ,, , i i:::: :: :: ivtM00NNnmMM90N9N0N9NMB@B@00
Ns . , :: isri , , : rr7irriivi:irri iroM0MN9N0NN9000009N98@8@0B@
0mi :iii:ivr:, .. .. ivvi::istos7iri irq0088008088NMMMM9M8@80880@
MNpi:iri:i:: .. . . iii i i::: iis0000090@000M0nN08B0B0@808
09MN7: ;7 ,,. . ,,: :: ::: ::: rqn@B@80NN90nttq000B800080B
N0M0M7rri:..: i:ivir ,,,, ,,,::: ,, : :: irtnM8009ti7iiis0B8B@8BB0@B
NN0MN99mm: :nmnssnnnrr: , ,, :,, , :::i iivivi:;iririsNB@008B0BB
NMN0mmrtp i@B@8BB9Npr: , , , ::::: ii i :rr iiirr0nn@@B0@0M
9mmmpt7i: . p80B@Nnqi: ,,,,,: :::::::::ii ii ii:i; iiiirsmm00nmMMm0
09mmmnti , oN0@Nmsii: ::::, : ::::ii ii i i :iiiiririrtmmnnnnssnN
N9N0Mrqq:, rpmpopoi :: ::::::::: : :iiiiiii ::ir:ri irvv7tnnn09oq7i
0NMNn99rr :riqssrpsrr :: ::::: : iii ii r iir :;iri:iv7ipn99opsi
B@Mm9990mi:iiiiriiviii;ii iii:ii: irri r ir rr: :riri:ri: :iiiiioiii7
qssptrn9nnnnosir: iiiiii:: :ri rii r: ii: riii ii ir:iiirvvrirvi:;
: r; :i: ri r: i rii :r : iir ri :;iriri ii i rrr ;;: :riii
rvriivri7rviviviiiiiv; ir:i: :: :ir :rr i ii i ii:i;; ;i:;i
i;ii7iiiriiiviiiiii7ii ii : rir i iiiiii ii i ii iiiii r r:iv:i
iviiiiiiirrviiii t v;rr : i i i iiii iii i i iiir:;;iir
再來張美女圖片(不知道有沒有侵權,侵權刪)
: iiii:iiiiiqsmM9M@9qtossrntNMmnnM900B@BBB0@8BB@0@BMprpontpp
:i r :iirrrm0@8NMBnttptponm0Mnmmnn@B880@@888BB8BBB8nsqorpor
:ri:i r:iiiisqnmno9mopsqsqonnnnnnmN8088808B8B@B080B8svi7tsqs
iii ii ir:;7tmnMMmMmotr7rvrmM0B88Mn9B8B@88@8@B@8B@B8tppsnnmr
i iii:rirqspmrrmntqppptoNnM9ioqnN08B0888BBB08B0MNsiiiirr7
::::::i i:isnMM0n9nstipM0BMri , , rNB000B88@080B@ppsrorqo
::: ::: iii ittqrtnnstpBB8ni, ... ,, i9880800080nmmiriivrii
: i :vnn00mMnptM808i , .. ,: t9NMB0000BB80prvrv7sv
, ,, ,:i i irqsotqnps80Bq ,,,,:: ::iiM000088BN0mntv7i7vri
, ,,:::: imn0Mmmtsnrrn7, r , vii8NN8B88808NMiiivivrr
,, ,,,:::: iv7orqrNstr i , . , :09B000809MMNr77i7iii
,, , ::: 7nmn9rnmqoqi ,,, ... , : . i888@0@0B00mnri;rr;7i
, , , :: iiooqn0rm0Mii:,,,.. ,, : :t00@0N0080NMNpiivii v
, ,, : :vnmn9snmpm98Mmri,, . : iM00BBB88B0ntpv ir :r
,, , :::rrpsopmMpM0@08ri7;: .. vB9nm0BN808M0mmtvivivi
:::mnmntm9rsq0r;:: iii;rtB80B0npm88B8mrooi; : rr
, iiitpomNni . ... rv8000900B0N8000009svi:;ivr
, ,, , rmmmmqnmm0N: . .. ,: 008MmB8B0N88Mmrporv;r:rr;
, , , iiqtsppmt; : .... ,, iqnp008008800mmqi; ;vi
, , :qnii,.., ,,, ,,.... ,:rr9B00nimNnmrtsiiiii r
. .. ri ... .. ,,.. . ,, 7n08BMi Bmmprvrr :;i;
.. . , , p,,.. ..... , . . ..irinB0Bsio09Nmpii;;;ir
.. . .. , , mi, . ... . ,... ..:n9rvq@8pimtsrr r::::i
.. ...,, ,, tpi,,. .. . .. . ... ..i0, p@nn00Mntviirir
. .. . , ,in0ni ,, .. ... ,, .. ,. ii ::vm8nsrii r;:v
.. . . , rtmmi ,,..... . . . . ... ,7Bnmp7v: iir
. ... , , mMM9m i: .. .... ,.. ,.... . snoii r:r
....... , iimnmmq , .. ., . . . ..,rnrrii:::i:
. . . ,,, m00Mm0i::i:,, .. . . ,,... .,qmmt7i rri
.. . ,,, ip999n90i ,:,,,,. .. ... . .. . imqp7;ir:ir
. .. ... , iq990n99r,. .. : . . , .. 0imMmsirvit7
.... ., ,,ipN0M0900i .. ,i: , .. . 7v:iii rr rvi
... p0M9mMN09 . . , ,:: ,,,,, ,. . ii,rBMoq7ivtr
. ....., ,, s08009@0No,. .. . ,, ::: . ,i:,:rir :;ivi
.... , ,ipNMNn0M9N9 . ... . ,, . . . i :mviir:ir
... . ..,,, ir0NM9N@@88i . . . ... . .: 7iir ii:
... . , in99n9NN09v .. . . .. . .:i,, , pii rivr
.. , , ioBB80M0@BN,.. . .. . . . ,i, io7iiiiii
.. . , , iNNMnNMNN: . ... . ... . . , ,isrr ;iri
.... . , t088N08B;. .... . . ... . , :tmrq7iro7
... . ,, v9NNMMBn,.... .. . ...... , .. ,:oi: ;riv:
.. . . , ii000999 ,. .. . . .. ,.. immssvqvpi
.. .. ,,:i009N9M, .. .. .. .... , ,,rq7: irioi
. . . .,, :iN9NN9r. . . . .. .., , sm9priirri
... . , v80B0v . .. . .. .. .. , r7v:ririqi
. . .. ,,,, r0MM7 ,.... ... . ::::: , 7oprsviir
.. .. .,, , :00B . . . ... , ,. , ,iiir iirii
, .... ,,,,::09i,,. . . . . : , , ,, , ::irri ;r:
,, . . , qs .. . . . , :: ::: : : iivi7p7
, ,, . , Nr . .. . . , :: :: : : , ., vi:iir ii
, , , , ,,: 0i,.. . .. . , ::: ::: : ...,:t7v7irsp7
, , ,, :rmv .... . ., ,,, ,, .... . . po7rriior
,, ,, ::ir , .. . . . .. . rnppptspr
,, , , :::: i.,.... . . . ... .... . .. iiirivsq
是不是還挺有意思的
下麵是github地址 [github-img2ascii][https://github.com/aizuyan/img2ascii]
composer地址 [composer-img2ascii][https://packagist.org/packages/aizuyan/img2ascii]