1 褰卞儚鑸囧湒褰㈣硣鏂欑殑铏曠悊
涓婁竴鍥炴垜鍊戣珖閬庝簡鍦栧艦浠嬮潰紼嬪紡鐨勬挵瀵紝閫欎竴嬈℃垜鍊戣璦庤珫鍦栧艦 (褰卞儚) 鏈韓鐨勮檿鐞嗭紝鑰岃◣璜栫殑鍏у灝囨渻闆嗕腑鍦?Python Imaging Library (PIL) 閫欎竴濂楃▼寮忓韓涓娿?/p>
PIL 鏄?Python 涓嬫渶鏈夊悕鐨勫獎鍍忚檿鐞嗗浠訛紝鐢辮ū澶氫笉鍚岀殑妯$祫鎵緄勬垚錛屼甫涓旀彁渚涗簡璦卞鐨勮檿鐞嗗姛鑳斤紝鍏佽ū鎴戝戝湪綈″柈鐨?Python 紼嬪紡瑁¢茶褰卞儚鐨勮檿鐞嗐備嬌鐢ㄥ儚 PIL 璦辨ǎ鐨勭▼寮忓韓濂椾歡鍙互騫姪鎴戝戞妸綺懼姏闆嗕腑鍦ㄥ獎鍍忚檿鐞嗙殑宸ヤ綔鏈韓錛岄伩鍏嶈糠澶卞湪搴曞堡鐨勬紨綆楁硶瑁¢潰銆?/p>
鐢辨柤褰卞儚铏曠悊鐗芥秹鍒頒簡澶ч噺鐨勬暩瀛擱亱綆楋紝鍥犳 PIL 涓湁璦卞鐨勬ā緄勬槸鐢?C 瑾炶█鎵瀵垚鐨勶紝浠ユ彁鏄囪檿鐞嗙殑鏁堢巼銆備笉閬庯紝鍦ㄤ嬌鐢ㄧ殑鏅傚欙紝鎴戝戠暥鐒朵笉蹇呭湪鎰忛欐ǎ鐨勫晱欏岋紝鍙鏀懼績鍦扮敤灝辨槸浜嗐?/p>
1.1 PIL 鑳界偤浣犱綔鐨勪簨
PIL 鍏峰倷 (浣嗕笉闄愭柤) 浠ヤ笅鐨勮兘鍔涳細
- 鏁? 鍗佺ó鍦栨獢鏍煎紡鐨勮畝瀵兘鍔涖傚父瑕嬬殑 JPEG, PNG, BMP, GIF, TIFF 絳夋牸寮忥紝閮藉湪 PIL 鐨勬敮鎻翠箣鍒椼傚彟澶栵紝PIL 涔熸敮鎻撮粦鐧姐佺伆闅庛佽嚜璦傝鑹茬洡銆丷GB true color銆佸付鏈夐忔槑灞х殑 RBG true color銆丆MYK 鍙婂叾瀹冩暩紼殑褰卞儚妯″紡銆傜浉鐣墮綂鍏ㄣ?
- 鍩烘湰鐨勫獎鍍忚硣鏂欐搷浣滐細瑁佸垏銆佸鉤縐匯佹棆杞夈佹敼璁婂昂瀵搞佽緗?(transpose)銆佸壀涓嬭垏璨間笂絳夌瓑銆?
- 寮峰寲鍦栧艦錛氫寒搴︺佽壊瑾褲佸皪姣斻侀姵鍒╁害銆?
- 鑹插僵铏曠悊銆?
- PIL 鎻愪緵鍗佹暩紼烤閺?(filter)銆傜暥鐒訛紝閫欏嬫暩鐩仩閬犱笉鑳借垏 Photoshop® 鎴?GIMP® 閫欐ǎ鐨勫皥妤壒鏁堣檿鐞嗚粺楂旂浉姣旓紱浣?PIL 鎻愪緵鐨勯欎簺嬋鵑彙鍙互鐢ㄥ湪 Python 紼嬪紡瑁¢潰錛屾彁渚涙壒嬈″寲铏曠悊鐨勮兘鍔涖?
- PIL 鍙互鍦ㄥ獎鍍忎腑綣湒瑁介粸銆佺窔銆侀潰銆佸咕浣曞艦鐙銆佸~婊褲佹枃瀛楃瓑絳夈?
鎺ヤ笅渚嗭紝鎴戝戦枊濮嬩竴姝ヤ竴姝ュ湴灝?Python/PIL 鐨勫獎鍍忚檿鐞嗙▼寮忚ō璦堥茶璦庤珫銆?/p>
2 杞夋彌鍦栨獢鏍煎紡
甯傞潰涓婃湁璦卞褰卞儚铏曠悊紼嬪紡錛屼竴鑸漢鏈甯哥敤瀹冨戜締铏曠悊鐨勫伐浣滃ぇ姒傚氨鏄湒妾旀牸寮忚綁鎻涗簡錛涢欐槸褰卞儚铏曠悊杌熼珨鏈鍩烘湰鐨勫姛鑳斤紝PIL 鐣剁劧涔熻鏀彺銆?/p>
鍋囪ō鎴戝戞湁涓鍊?JPG 妾旀錛屽悕瀛楀彨浣?sample01.jpg錛岄偅楹鹼紝浠ヤ笅鐨勭▼寮忔渻鎶婇欏嬫獢妗堣級鍏?Python錛?/p>
>>> import Image
>>> im = Image.open( "sample01.jpg" )
im 閫欏嬬墿浠舵槸鐢?Image.open() 鏂規硶鎵鐢㈢敓鍑轟締鐨?Image 鐗╀歡銆傛垜鍊戝彲浠ョ敤 Image 鐗╀歡鍏х殑灞т締鏌ヨ闂滄柤姝ゆ獢妗堢殑璩囪▕錛?/p>
>>> print im.format, im.size, im.mode
JPEG (2288, 1712) RGB
鏍? 寮忓瓧涓叉斁鍦?format 灞ц!錛屽昂瀵告斁鍦?size 灞ц!錛岃?(瑾胯壊鐩? 妯″紡鏀懼湪 mode 灞ц!銆傚緸浠ヤ笂鐨勫煼琛岀祼鏋滐紝鍙互鐪嬪嚭渚嗘垜鍊戣畝鐨勭⒑瀵︽槸涓鍊?JPEG 妾旀錛屾獢妗堢殑灝哄鏄?2288 鍍忕礌瀵?712 鍍忕礌楂橈紝瑾胯壊鐩ゆ槸 RGB 鍏ㄥ僵妯″紡銆?/p>
鏃㈢劧鎴戝戝凡綞撴妸鍦栨獢璁鍏ヤ簡 Python錛岃铏曠悊瀹冨氨綈″柈浜嗐傚埄鐢?Image 欏炲垾鐨?save() 鏂規硶錛屽彲浠ユ妸妾旀鍎插瓨鎴?PIL 鏀彺鐨勬牸寮忥細
>>> im.save( "fileout.png" )
濡傛灉鍦栨獢寰堝ぇ錛岄欐渻鑺變笂涓榛炴檪闁撱侷mage.save() 鏂規硶鏈冩牴鎿氭瀛樻獢鐨勫壇妾斿悕錛岃嚜鍕曞垽鏂瘋瀛樺湒妾旂殑鏍煎紡 (鍓涘墰鎴戝戠敤鐨?open() 鍑藉紡涔熸渻閫欐ǎ浣?銆?/p>
save() 鍙互鎸囧畾瀛樻獢鏍煎紡銆傚湪浠ヤ笅鐨勪緥瀛愯!錛屾垜鍊戞妸瀛樻獢鏍煎紡鎸囧畾鐐?JPEG錛?/p>
>>> im.save( "fileout.png", "JPEG" )
閫欐檪鍊欏壇妾斿悕鏄劇鎵瓔傜殑銆?/p>
鍙檿鐞嗕竴鍏╁嬫獢妗堢殑鏅傚欙紝浣跨敤 Python 鐩磋鍣ㄥ氨鐩哥暥鍚堥仼銆傜劧鑰岃嫢瑕佽檿鐞嗕竴澶х兢妾旀錛岃濡傛妸涓鏁村嬬洰閷勭殑 JPEG 妾旇綁鎻涚偤 PNG 妾旓紝閭i杭瀵垚涓鍊嬬▼寮忔獢鏈冩瘮杓冩柟渚匡紝渚嬪錛?/p>
#!/usr/bin/env python
from glob import glob
from os.path import splitext
import Image
jpglist = glob( "python_imaging_pix/*.[jJ][pP][gG]" )
for jpg in jpglist:
im = Image.open(jpg)
png = splitext(jpg)[0]+".png"
im.save(png)
print png
鍙鍦ㄤ竴鍊嬫斁浜?*.jpg 鎴?*.JPG 妾旀鐨勭洰閷勮!闈㈠煼琛岄欏嬫寚浠ょǹ錛屽畠灝辨渻鎶婃墍鏈夌殑 JPEG 妾旇綁鎴?PNG 妾旀錛?/p>
$ ./convertdir.py
file0001.png
file0002.png
.
.
file9999.png
鏃㈢劧 PIL 鏈冨緸妾斿悕鍋墊脯甯哥敤鐨勬獢妗堟牸寮忥紝瀛樻獢鏅傛垜鍊戦氬父閮戒笉鏈冩寚瀹氬瓨妾旀牸寮忋?/p>
鐒? 鑰岋紝渚濇摎妾旀鏍煎紡鐨勪笉鍚岋紝save() 鏂規硶鎻愪緵浜嗕笉鍚岀殑閬擱爡鍙冩暩銆備互 JPEG 鑰岃█錛屽畠鍙互鎺ュ彈 quality (寰?1 鍒?100 鐨勬暣鏁革紝闋愯ō鐐?75)銆乷ptimize (鐪熷亣鍊? 鍙?progression (鐪熷亣鍊?銆傚湪浠ヤ笅鐨勪緥瀛愯!錛屾垜鍊戜互 100 鐨? quality 渚嗗劜瀛?JPEG 妾旀錛?/p>
>>> im.save( "quality100.jpg", quality=100 )
瑕佽ǎ
PIL 涔熸敮鎻?EPS (Encapsulate PostScript) 鏍煎紡鐨勫鍏ャ俆eX 鐨勪嬌鐢ㄨ呭彲浠ュ埄鐢?PIL 渚嗙啊鍠湴鎶婂湒妾旇綁鎴?EPS 浠ヤ緵 TeX compiler 浣跨敤銆?/p>
3 鏀硅畩褰卞儚鑸囪=浣滅府鍦?/a>
鍦ㄤ簡瑙d簡鍩烘湰鐨勫湒妾旇綁鎻涗箣寰岋紝鎴戝戜締鐪嬬湅濡備綍灝嶅獎鍍忛茶灝哄鏂歸潰鐨勪慨鏀廣侾IL 灝?Image 鐗╀歡鎻愪緵浜?resize 鏂規硶錛屼互鍩瘋褰卞儚鐨勭府鏀懼伐浣溿傜敤鎴戝戠殑 sample01.jpg 妾旀渚嗙暥渚嬪瓙錛?/p>
>>> im = Image.open( "sample01.jpg" )
>>> print im.size
(2288, 1712)
>>> width = 400
>>> ratio = float(width)/im.size[0]
>>> height = int(im.size[1]*ratio)
>>> nim = im.resize( (width, height), Image.BILINEAR )
>>> print nim.size
(400, 299)
>>> nim.save( "resized.jpg" )
鐒跺緦鎴戝戝氨鏈冨緱鍒版瘮杓冨皬鐨?resized.jpg錛?/p>

resize() 閫欏嬫柟娉曟渻鍌沖洖涓鍊嬫柊鐨?Image 鐗╀歡錛屾墍浠ヨ垔鐨?Image 涓嶆渻琚洿鍕曘俽esize() 鎺ュ彈鍏╁嬪弮鏁革紝絎竴鍊嬬敤渚嗘寚瀹氳畩鏇村緦鐨勫ぇ灝忥紝鏄竴鍊嬮洐鍏冪礌 tuple錛屽垎鍒ョ敤浠ユ寚瀹氬獎鍍忕殑瀵垏楂橈紱絎簩鍊嬪弮鏁稿彲浠ョ渷鐣ワ紝鏄敤渚嗘寚瀹氳畩鏇存檪浣跨敤鐨勫収鎻掓硶錛岄爯璦槸 Image.NEAREST (鍙栨渶榪戦粸)錛岄欒!鎴戝戞寚瀹氱偤鍝佽唱姣旇純濂界殑 Image.BILINEAR銆?/p>
resize() 鍙互鎶婂獎鍍忔斁澶х府灝忥紝鍦ㄤ嬌鐢ㄦ檪涓瀹氳鍌沖叆瀵垏楂樸備笂闈㈢殑紼嬪紡鏈冨厛闄愬畾鏂板獎鍍忕殑瀵紝鍐嶆牴鎿氳垔褰卞儚鐨勯暦瀵瘮渚嬩締綆楀嚭鏂板獎鍍忕殑楂樻噳瑭叉槸澶氬皯錛屾渶寰屾妸灝哄鍊煎偝鍏?resize() 鍘匯傜敱姝ゅ彲鐭ワ紝resize() 鏄厑璦辨垜鍊戜笉絳夋瘮渚嬬府鏀劇殑錛?/p>
>>> width = 400
>>> height = 100
>>> nim2 = im.resize( (width, height), Image.BILINEAR )
>>> nim2.save( "resize2wide.jpg" )
鏈冨緱鍒板艦鐙濂囨殑綹湒錛?/p>

鎴戝戝彲浠ヤ換鎰忔敼璁婃柊褰卞儚鐨勫昂瀵稿箋?/p>
鍙︿竴鍊嬪父鐢ㄧ殑鎿嶄綔鏄棆杞夛紱rotate() 鏂規硶鍙互鐢ㄤ締鏃嬭綁褰卞儚銆傚畠鍙栧叐鍊嬪弮鏁革紝絎竴鍊嬪弮鏁告槸涓鍊嬮嗘檪閲濈殑搴︽暩錛岀浜屽嬪弮鏁稿墖涔熸槸褰卞儚铏曠悊鏅傜殑鍏ф彃娉曪紝鍙渷鐣ワ細
>>> nim3 = nim.rotate( 45, Image.BILINEAR )
>>> nim3.save( "rotated.jpg" )
rotate() 涓︿笉鏈冩敼璁婂獎鍍忕殑灝哄 (dimension)錛屾墍浠ヤ綘鏈冪湅鍒幫細

鍑虹従浜嗛粦閭娿傚鏋滄垜鍊戞兂瑕侀e獎鍍忓昂瀵鎬竴璧瘋畩鍕曪紝寰楄鏀圭敤 transpose() 鏂規硶錛?/p>
>>> nim4 = nim.transpose( Image.ROTATE_90 )
>>> nim4.save( "transposed90.jpg" )
緄愭灉鏄細

transpose() 鏂規硶鎺ュ彈 Image.FLIP_LEFT_RIGHT, Image.FLIP_TOP_DOWN, ROTATE_90, ROTATE_180, ROTATE_270 絳変簲紼弮鏁革紱鍏朵腑寰屼笁紼殑鏃嬭綁鍧囩偤閫嗘檪閲濄俽otate() 鏂規硶鏈冨皪鍍忕礌璩囨枡閫茶鍏ф彃錛涜?transpose() 鍓囧彧鏄綁緗儚绱犺硣鏂欙紝鎵浠ユ矑鏈夊収鎻掑弮鏁稿彲浠ヨō瀹氾紝涔熶笉鏈冨獎闊垮獎鍍忕殑鍝佽唱銆?/p>
綹斁鑸囨棆杞夋槸鏈甯哥敤鐨勫叐鍊嬫搷 浣滐紝鑰屽湪鍏朵腑錛岀府鍦栫殑瑁戒綔鍙兘鏄壒鍒ュ父鐢ㄧ殑錛汸IL 灝嶇府鍦栨彁渚涗簡涓鍊嬫柟渚跨殑 thumbnail() 鏂規硶銆倀humbnail() 鏈冪洿鎺ヤ慨鏀? Image 鐗╀歡鏈韓錛屾墍浠ラ熷害鑳芥瘮 resize() 鏇村揩錛屼篃娑堣楁洿灝戠殑璦樻喍楂斻傚畠涓嶆帴鍙楁寚瀹氬収鎻掓硶鐨勫弮鏁革紝鑰屼笖鍙兘綹皬褰卞儚錛屼笉鑳芥斁澶у獎鍍忥紱鐢ㄦ硶鏄細
>>> im = Image.open( "sample01.jpg" )
>>> im.thumbnail( (400,100) )
>>> im.save( "thumbnail.jpg" )
>>> print im.size
(133, 100)
thumbnail() 鍦ㄦ帴鍙楀昂瀵稿弮鏁哥殑鏅傚欙紝琛岀偤鑸?resize() 涓嶅悓錛況esize() 鍏佽ū鎴戝戜笉絳夋瘮渚嬮茶綹斁錛屼絾 thumbnail() 鍙兘閫茶絳夋瘮渚嬬府灝忥紝涓︿笖鏄互闀楓佸涓瘮杓冨皬鐨勯偅涓鍊嬪肩偤鍩烘簴銆傚洜姝わ紝涓婇潰鐨勭▼寮忔墍浣滃嚭鐨?thumbnail.jpg 璁婃垚浜?133*100 鐨勫皬鍦栫墖錛?/p>

鏈変簡閫欎簺鎿嶄綔錛屾垜鍊戝彲浠ュ緢杓曟槗鍦板煼琛屽獎鍍忕鐞嗙殑浠誨嫏銆?/p>
4 淇敼鍦栧艦鍏у
闄や簡鍙互閲濆皪鍦栧艦鐨勫昂瀵鎬綔璁婃洿涔嬪錛孭IL 鏇存彁渚涙垜鍊戣畩鏇村獎鍍忓収瀹圭殑鑳藉姏銆傞欐ǎ錛屾垜鍊戝氨涓嶅彧鑳藉皪褰卞儚閫茶綆$悊錛岃岃兘鏇撮蹭竴姝ュ湴鍒╃敤紼嬪紡渚嗘妸褰卞儚鐨勫収瀹規敼鎴愭垜鍊戞兂瑕佺殑妯e瓙銆?/p>
鎴戝戝緸銆岃布鍦栥嶉枊濮嬶細
>>> baseim = Image.open( "resized.jpg" )
>>> floatim = Image.open( "thumbnail.jpg" )
>>> baseim.paste( floatim, (150, 50) )
>>> baseim.save( "pasted.jpg" )
鍒╃敤 paste() 鏂規硶錛屾妸涔嬪墠浣滅殑 thumbnail.jpg 璨煎埌 resized.jpg 瑁¢潰鍘伙細

姝ょó鐢ㄦ硶鐨?paste() 鏂規硶瑕佹眰鍏╁嬪弮鏁革紝絎竴鏄璨間笂鐨?Image錛岀浜屾槸瑕佽布涓婄殑浣嶇疆銆傜浜屽嬪弮鏁告湁涓夌ó鎸囧畾鐨勬柟寮忥細
- None錛氫笉鎸囧畾浣嶇疆鑸囧昂瀵革紝閭i杭 pasted() 鏈冨亣璦璨間笂鐨?Image 鑸囪璨間笂鐨?Image 鐨勫昂瀵稿畬鍏ㄧ浉鍚屻?
- (left, upper)錛氶洐鍏冪礌 tuple銆俻asted() 鏈冩妸瑕佽布涓婄殑 Image 鐨勫乏涓婅灝嶉綂鍦ㄦ寚瀹氱殑浣嶇疆銆?
- (left, upper, right, lower)錛氬洓鍏冪礌 tuple銆俻aste()` 闄や簡鏈冩妸 Image 鐨勫乏涓婅灝嶉綂澶栵紝涔熸渻灝嶉綂鍙充笅瑙掋備笉閬庡熀鏈笂閫欑ó瀵硶鍜屼笂闈㈤偅涓紼竴妯o紝鍥犵偤 paste() 瑕佹眰瑕佽布涓婄殑褰卞儚鑸囬欒!鎸囧畾鐨勫昂瀵鎬竴鑷達紝鎵浠ヤ笉鍙兘鍑虹従涓嶅悓鐨勫叐緄?right, lower銆?
闄や簡銆岃布鍦栥嶄箣澶栵紝鎴戝戦倓鍙互灝嶅獎鍍忕殑鍏у閫茶瑁佸垏錛?/p>
>>> im = Image.open( "sample01.jpg" )
>>> nim = im.crop( (700, 300, 1500, 1300) )
>>> nim.thumbnail( (400,400) )
>>> nim.save( "croped.jpg" )
(鍥犵偤瑁佸垏涔嬪緦鐨勫湒褰㈤倓鏄ぇ浜嗛粸錛屾墍浠ュ啀綹湒涓嬈? 寰楀埌鐨勭祼鏋滄槸錛?/p>

crop() 鎺ュ彈鐨?box 鍙冩暩鎸囧畾瑕佽鍒囩殑宸︺佷笂銆佸彸銆佷笅鍥涘嬮倞鐣屽鹼紝褰㈡垚涓鍊嬬煩褰€?/p>
闄や簡鍓布涔嬪錛孭IL 閭勫彲浠ヤ嬌鐢ㄥ収寤虹殑嬋鵑彙 (filter) 浣滀竴浜涚壒鏁堣檿鐞嗐傞欎簺嬋鵑彙閮芥斁鍦?ImageFilter 妯$祫瑁¢潰錛屼嬌鐢ㄥ墠瑕佸厛鍖叆閫欏嬫ā緄勶細
>>> import ImageFilter
鎴戝戠敤鍊嬩緥瀛愶紝灝嶅墰鍓涜鍒囩殑 "No Riding" 紱佹鐗屼綔 20 嬈?blur (緋婂寲)錛屼締鐪嬬湅 PIL 嬋鵑彙鐨勬晥鏋滐細
>>> im = Image.open( "croped.jpg" )
>>> nim = im
>>> for i in range(20): nim = nim.filter( ImageFilter.BLUR )
...
>>> nim.save( "blured.jpg" )
浣犳噳瑭茬湅涓嶅嚭渚嗗畠鏄?"No Riding" 浜嗗惂錛?/p>

浣跨敤嬋鵑彙鐨勫熀鏈獮娉曟槸錛?/p>
newim = im.filter( ImageFilter.FILTERNAME )
鍏? 涓?FILTERNAME 鏄?PIL 涓敮鎻寸殑嬋鵑彙鍚嶇ū錛岀洰鍓嶆湁錛欱LUR, CONTOUR, DETAIL, EDGE_ENHANCE, EDGE_ENHANCE_MORE, EMBOSS, FIND_EDGES, SMOOTH, SMOOTH_MORE, SHARPEN錛屾铏曞氨涓嶄竴涓浠嬬垂浜嗭紝浣嗗緩璀頒綘鍙互鑷繁渚嗘妸姣忎竴鍊嬫烤閺¢兘瑭﹁│鐪嬨?/p>
鍒╃敤嬋鵑彙錛屾垜鍊戝彲浠ュ皪鍚屼竴欏炵殑褰卞儚閫茶鐩稿悓鐨勭壒鏁堣檿鐞嗐傜暥鐒訛紝褰卞儚鐗規晥闇瑕佸緢綺劇窗鐨勮鏁達紝鍦ㄨ嚜鍕曞寲浣滄キ涓氬父鍙兘閬斿埌寰堢矖鐣ョ殑鏁堟灉錛涗絾 PIL 鏃㈢劧鎻愪緵浜嗭紝鎴戝戠殑鑷嫊紼嬪簭灝辨搧鏈夋洿澶氱殑宸ュ叿鍙互浣跨敤銆?/p>
5 鐢?PIL 瑁戒綔鏂板獎鍍?/a>
闄や簡灝嶅凡瀛樺湪鐨勫獎鍍忛茶綬ㄤ慨涔嬪錛屽緸闆墮枊濮嬪緩绔嬫柊褰卞儚涔熸槸寰堥噸瑕佺殑宸ヤ綔銆侾IL 涓殑 ImageDraw 妯$祫鎻愪緵緄︽垜鍊戠躬瑁藉獎鍍忓収瀹圭殑鑳藉姏銆傚湪浣跨敤 ImageDraw 涔嬪墠錛岃鍏堝緩绔嬪ソ絀虹櫧鐨勬柊褰卞儚錛?/p>
>>> import ImageDraw
>>> im = Image.new( "RGB", (400,300) )
>>> draw = ImageDraw.Draw( im )
鏈 寰屽緩鍑轟締鐨?draw 鏄竴鍊?ImageDraw 鐗╀歡鏈冩彁渚涘悇紼躬瑁藉獎鍍忕殑鏂規硶銆傞嚌灝嶅咕浣曞湒褰紝draw 鐗╀歡鎻愪緵 arc() (寮х窔)銆乧hord() (寮?銆乴ine() (綬氭)銆乪llipse() (姍㈠湏)銆乸oint() (榛?銆乺ectangle() (鐭╁艦) 鑸?polygon() (澶氶倞褰?銆備笉閬庯紝鎴戝戜笉婧栧倷璦庤珫騫句綍鍦栧艦鐨勭躬瑁斤紱鐩鎬俊閫欎簺鏂規硶鐨勪嬌鐢ㄥ皪涓鑸漢渚嗚鎳夎┎閮藉緢鐩磋鎵嶆槸銆?/p>
瑕佽ǎ
浣? 鍙互鍦ㄦ寚浠よ杓稿叆 pydoc ImageDraw.ImageDraw.<<methodname>> 渚嗘煡瑭笂榪版柟娉? (<<methodname>>) 鐨勮鏄庯紝璀 pydoc ImageDraw.ImageDraw.line銆?/p>
閫欒!瑕佷粙绱圭殑涓嶆槸騫句綍鍦栧艦錛岃屾槸鏂囧瓧鐨勭躬瑁姐傛垜鍊戣鍐嶄粙绱逛竴鍊嬫ā緄勶細ImageFont錛屼甫涓斾互瀵︿緥渚嗚鏄庡浣曠敤 PIL 銆屽瀛椼嶏細
>>> import Image, ImageDraw, ImageFont
>>> font = ImageFont.truetype( "
... "/usr/share/fonts/truetype/freefont/FreeMono.ttf", 24 )
>>> im = Image.new( "RGB", (400,300) )
>>> draw = ImageDraw.Draw( im )
>>> draw.text( (20,20), "TEXT", font=font )
>>> im.save( "text.jpg" )
閫欐ǎ灝卞湪涓鍊嬮粦鑹插簳鍦栦笂鐢ㄧ櫧絳嗗浜?"TEXT" 鍥涘嬪ぇ瀛楋細

鎺? 钁椾竴涓瑾槑鍓涘墰浣滅殑鍕曚綔銆傞鍏堟垜鍊戠敤 ImageFont 鐨?truetype() 鍑藉紡寤虹珛浜嗕竴鍊?TrueType 瀛楀瀷錛屽ぇ灝忚ō瀹氱偤 16 榛炪倀ruetype() 鍑藉紡鐨勭涓鍊嬪弮鏁稿繀闋堟槸瀛楀瀷妾旂殑鎼滃皨璺緫錛岀浜屽嬪弮鏁告槸瀛楀瀷鐨勯粸鏁搞傜劧寰屼緷搴忓緩绔嬪獎鍍忕墿浠惰垏 draw 鐗╀歡銆傚瀛楃殑鍕曚綔鐢? draw 鐗╀歡鐨?text() 鏂規硶渚嗗畬鎴愶紝瀹冩帴鍙楀叐鍊嬪弮鏁革紝鍒嗗垾鏄枃瀛楃殑宸︿笂瑙掗粸銆佸瓧涓詫紝鍙﹀鍙互鐢?font 閬擱爡渚嗘寚瀹氭墍浣跨敤鐨勫瓧鍨? (鑻ヤ笉鎸囧畾錛屼究浣跨敤闋愯ō瀛楀瀷)銆?/p>
鍦?1.1.4 鐗堜箣鍓嶏紝PIL 鏄彧鑳戒嬌鐢ㄩ粸闄e瓧鍨嬬殑銆傜従鍦? PIL 鍔犲叆浜?TrueType 鍚戦噺瀛楀瀷鐨勬敮鎻達紝灝嶆柤瑕併屽瀛椼嶇殑浜轟締瑾鍦ㄦ槸涓澶х闊熾傚皪榛為櫍瀛椾締瑾紝鎯蟲敼璁婂瓧鍨嬬殑澶у皬寰楄鏇存彌瀛楀瀷鎵嶄綔寰楀埌錛屼絾 TrueType 灝辨矑鏈夐欏嬮檺鍒躲傚鏋滄垜鍊戞兂瑕佸鍑哄叐涓蹭笉鍚屽ぇ灝忕殑鏂囧瓧錛岄欐ǎ浣滃氨鍙互浜嗭細
>>> largefont = ImageFont.truetype( "
... "/usr/share/fonts/truetype/freefont/FreeMono.ttf", 48 )
>>> smallfont = ImageFont.truetype( "
... "/usr/share/fonts/truetype/freefont/FreeMono.ttf", 24 )
>>> im = Image.new( "RBG", (400,300) )
>>> draw = ImageDraw.Draw( im )
>>> draw.text( (20,20), "SmallTEXT", font=smallfont )
>>> draw.text( (20,120), "LargeTEXT", font=largefont )
>>> im.save( "multitext.jpg" )
緄愭灉濡傦細

浠ヤ笂灝辨槸鍦?PIL 瑁″緩绔嬫枃瀛楀湒褰㈢殑鏂規硶銆?/p>
鏈寰岋紝鎴戝戣瑾槑濡備綍鏀硅畩綣=鍦栧艦 (鏂囧瓧) 鏅傜殑欏忚壊錛涚躬鍦栨檪鐣瓎鐨勯鑹叉槸閫忛亷 draw 鐗╀歡鐨?ink 灞т締鏀硅畩鐨勶細
>>> draw.ink = 0 + 255*256 + 0*256*256
浠ヤ笂鏈冩妸鐣瓎璦垚綞犺壊銆俰nk 鍊煎繀闋堣鏄竴鍊嬫暣鏁革紝鍏跺肩敱鑹插僵鐨?RGB 鍊肩畻鍑恒傝垑騫懼?ink 鍊肩殑渚嬪瓙錛?/p>
- 绱呰壊鐨?ink 鍊兼噳璦偤 255(R) + 0(G)*256 + 0(B)*256*256錛?
- 钘嶈壊鐨?ink 鍊兼噳璦偤 0(R) + 0(G)*256 + 255(B)*256*256錛?
- 闈涜壊鐨?ink 鍊兼噳璦偤 0(R) + 255(G)*256 + 255(B)*256*256
鎵璦畾鐨?ink 鏈冨獎闊挎墍鏈夊緦綰岀殑綣湒鍕曚綔銆?/p>
6 緄愯獮
鏈枃浠嬬垂浜嗘柟渚垮ソ鐢ㄧ殑 PIL 濂椾歡錛屽彲浠ヨ畵鎴戝戠敤 Python 鎾板褰卞儚铏曠悊鐨勭▼寮忋傛垜鍊戝皪鍦栨獢鐨勬牸寮忚檿鐞嗐佸昂瀵歌檿鐞嗕互鍙婂収瀹圭殑綬ㄤ慨閮戒綔浜嗚◣璜栵紝鏈寰屼篃瑾槑濡備綍寰為浂闁嬪鍓典綔涓鍊嬪獎鍍忋?/p>
灝嶇恫闋佺▼寮忎締瑾紝鍕曟厠鐢㈢敓綈″柈鐨勫獎鍍忔槸鐗瑰垾鏈夌敤鐨勫姛鑳斤紝鍙互鐢ㄤ締瑁滆凍 HTML 鑸?CSS 鐨勪笉瓚充箣铏曘傚埄鐢?PIL 渚嗗煼琛屾壒嬈″獎鍍忚檿鐞嗙殑宸ヤ綔錛屾洿鑳界渷鍘繪垜鍊戣ū澶氱殑鎿嶄綔鏅傞枔銆傜浉淇¤畝鑰呰兘寰炲叾涓櫦鐝懼畠鎵鎻愪緵鐨勭敓鐢㈠姏銆?/p>