摘要:處理圖片我比較熟悉,剛好有庫(kù)可以處理圖片,簡(jiǎn)直不要太合適對(duì)圖片的處理也比較簡(jiǎn)單,讀取圖片,灰度處理,獲取每個(gè)像素點(diǎn)的灰度值,將灰度值的深淺轉(zhuǎn)換為字符。
引言
前幾天看到一幅用字符(準(zhǔn)確的說(shuō)是ascii碼)繪制的doge圖像,覺(jué)得挺有意思
* @Date * @Desc */
將他放到代碼的注釋部分,加上了Doge bless you! No bug!的字樣,放在了代碼的注釋部分(新建腳本的時(shí)候自動(dòng)添加),同事看到了覺(jué)得挺有意思,問(wèn)我怎么搞得。
后來(lái)我仔細(xì)看了下這幅圖,分析了下,都是用ascii字符繪制的,通過(guò)ascii字符的占用像素多少表現(xiàn)圖片的深淺,想通了原理決定自己實(shí)現(xiàn)一個(gè)圖片轉(zhuǎn)字符的工具。
我比較熟悉php,剛好php有GD庫(kù)可以處理圖片,簡(jiǎn)直不要太合適~
對(duì)圖片的處理也比較簡(jiǎn)單,讀取圖片,灰度處理,獲取每個(gè)像素點(diǎn)的灰度值,將灰度值的深淺轉(zhuǎn)換為ascii字符。
都去圖片之前,首先要做的就是統(tǒng)一接口,實(shí)現(xiàn)讀取多重類(lèi)型的圖片,php的GD庫(kù)中,沒(méi)有直接提供相關(guān)的函數(shù),造個(gè)小輪子:
class ImageCreate { // 要處理的目標(biāo),可能是文件 protected $target = ""; // 文件的類(lèi)型 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; } }
使用時(shí)候不用關(guān)心圖片類(lèi)型,類(lèi)庫(kù)內(nèi)部幫你做了處理,(new ImageCreate($image))->create()就獲取到了圖片resource句柄,供下一步使用。
php讀取像素點(diǎn)信息用下面的公式,其中$x,$y分別表示像素點(diǎn)的位置。
$rgb = imagecolorat($this->resourceImage, $x, $y); $r = ($rgb >> 16) & 0xFF; $g = ($rgb >> 8) & 0xFF; $b = $rgb & 0xFF;
像素灰度化,關(guān)于灰度化可以參考百度百科的解釋
灰度化,在RGB模型中,如果R=G=B時(shí),則彩色表示一種灰度顏色,其中R=G=B的值叫灰度值,因此,灰度圖像每個(gè)像素只需一個(gè)字節(jié)存放灰度值(又稱強(qiáng)度值、亮度值),灰度范圍為0-255。一般有以下四種方法對(duì)彩色圖像進(jìn)行灰度化。
一般有以下四種方法對(duì)彩色圖像進(jìn)行灰度化處理:分量法 最大值法平均值法加權(quán)平均法
這里使用了加權(quán)平均法
根據(jù)重要性及其它指標(biāo),將三個(gè)分量以不同的權(quán)值進(jìn)行加權(quán)平均。由于人眼對(duì)綠色的敏感最高,對(duì)藍(lán)色敏感最低,因此,按下式對(duì)RGB三分量進(jìn)行加權(quán)平均能得到較合理的灰度圖像。
處理公式 intval($r 0.228 + $g 0.587 + $b * 0.114)
更詳細(xì)的內(nèi)容這里就不討論了,有興趣的可以自行查閱資料,這里主要使用了加權(quán)平均法求灰度值
這里插敘下,當(dāng)我完成開(kāi)發(fā)后,發(fā)現(xiàn),稍微大點(diǎn)的圖片,輸出信息很容易就換行了,看起來(lái)一團(tuán)糟,這里還要做一個(gè)比例縮放的功能,沿著寬高方向做不同的縮放,將多個(gè)像素點(diǎn)合并為1個(gè),合并的時(shí)候簡(jiǎn)單的取加權(quán)平均值。
gray = (gray0 + gray1 + ... + grayn)/n;使用
這里開(kāi)發(fā)已經(jīng)基本完成,已經(jīng)放到github,發(fā)布到composer,想看看效果的只需要通過(guò)composer命令composer require aizuyan/img2ascii安裝就可。
安裝完成之后,會(huì)有vendor/bin/img2ascii可執(zhí)行文件,向下面這樣執(zhí)行他就可以了,第一個(gè)命令是要處理的圖片,-x是寬度方向像素縮小比例,-y是高度方向縮小比例(由于編輯器中ascii字符顯示的時(shí)候一般高度是寬度的兩倍,所以縮放的時(shí)候剛好反過(guò)來(lái))
? 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;:
下面是幾張轉(zhuǎn)換先后圖片的效果。
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
再來(lái)張美女圖片(不知道有沒(méi)有侵權(quán),侵權(quán)刪)
: 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
composer地址 composer-img2ascii
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/22133.html
摘要:文章鏈接關(guān)于圖片轉(zhuǎn)字符畫(huà),相信大家都不陌生,經(jīng)常出現(xiàn)在個(gè)超有趣的項(xiàng)目中。今天我也來(lái)實(shí)踐這個(gè)有趣的項(xiàng)目,更進(jìn)一步的是把這個(gè)功能做成一個(gè)在線的網(wǎng)站,直接上傳圖片生成字符畫(huà),在線預(yù)覽可以讓更多的人來(lái)體驗(yàn)。至此,生成字符畫(huà)的腳本完成了。 文章鏈接:https://mp.weixin.qq.com/s/yiFOmljhyalE8ssAgwo6Jw 關(guān)于python圖片轉(zhuǎn)字符畫(huà),相信大家都不陌生...
摘要:以上,我們完成了的初步認(rèn)識(shí)擴(kuò)展使用做反轉(zhuǎn)圖首先反轉(zhuǎn)的意思是指,把每個(gè)像素點(diǎn)的每個(gè)值都與相減的值不改變,減完之后的值再次組成圖片,此時(shí)得到的新圖片就是我們的反轉(zhuǎn)圖片。第二步轉(zhuǎn)灰度圖或是,又稱灰階圖。用灰度表示的圖像稱作灰度圖。 效果圖 showImg(https://segmentfault.com/img/remote/1460000008704923?w=1813&h=845); 基...
摘要:以上,我們完成了的初步認(rèn)識(shí)擴(kuò)展使用做反轉(zhuǎn)圖首先反轉(zhuǎn)的意思是指,把每個(gè)像素點(diǎn)的每個(gè)值都與相減的值不改變,減完之后的值再次組成圖片,此時(shí)得到的新圖片就是我們的反轉(zhuǎn)圖片。第二步轉(zhuǎn)灰度圖或是,又稱灰階圖。用灰度表示的圖像稱作灰度圖。 效果圖 showImg(https://segmentfault.com/img/remote/1460000008704923?w=1813&h=845); 基...
摘要:以上,我們完成了的初步認(rèn)識(shí)擴(kuò)展使用做反轉(zhuǎn)圖首先反轉(zhuǎn)的意思是指,把每個(gè)像素點(diǎn)的每個(gè)值都與相減的值不改變,減完之后的值再次組成圖片,此時(shí)得到的新圖片就是我們的反轉(zhuǎn)圖片。第二步轉(zhuǎn)灰度圖或是,又稱灰階圖。用灰度表示的圖像稱作灰度圖。 效果圖 showImg(https://segmentfault.com/img/remote/1460000008704923?w=1813&h=845); 基...
摘要:最近花了幾天時(shí)間,做了一個(gè)圖片轉(zhuǎn)字符畫(huà)的工具,一開(kāi)始想做成用服務(wù)器來(lái)生成圖像的形式,但是后來(lái)發(fā)現(xiàn)可以不依賴服務(wù)器生成圖片,順便還能把項(xiàng)目托管到上,因此就把項(xiàng)目做成了純前端的形式。 最近花了幾天時(shí)間,做了一個(gè)圖片轉(zhuǎn)字符畫(huà)的工具,一開(kāi)始想做成用服務(wù)器來(lái)生成圖像的形式,但是后來(lái)發(fā)現(xiàn)可以不依賴服務(wù)器生成圖片,順便還能把項(xiàng)目托管到 Github Pages 上,因此就把項(xiàng)目做成了純前端的形式。 ...
閱讀 1572·2021-11-24 09:39
閱讀 1062·2021-11-22 15:11
閱讀 2202·2021-11-19 11:35
閱讀 1639·2021-09-13 10:37
閱讀 2472·2021-09-03 10:47
閱讀 2159·2021-08-30 09:47
閱讀 1642·2021-08-20 09:39
閱讀 2919·2019-08-30 14:13