圖片轉文字小工具
講者: 楊平
大小: 800 x 483
位元深度: 24
色彩模式: RGB
單位是像素(Pixel)
800 x 483
寬
高
總共有386400個像素
R: 94
G: 11
B: 141
01011110 00001011 10001101
位元深度: 8+8+8 bits
144
1001 0000
位元深度: 8 bits
PIL(Python Imagine Library)是一套處理圖片的Python套件
在Python中,套件指的是別人寫好的工具
我們可以透過API(Application Programming Interface)來使用這些工具
Theta = -90
from PIL import Image
img = Image.open('emoji1.png')
img = img.rotate(-90)
img.save('rotated.png')
背後的邏輯
img = img.rotate(-90)
API
txt = open('test.txt', 'w')
w: 寫
r: 讀
a: 寫,寫入的東西附加在檔案後面
w+: 讀加寫,檔案不存在則創一個新的
r+: 讀加寫,檔案不存在則報錯誤
a+: 讀加寫,寫入附加在檔案後面,檔案不存在則創一個新的
2. 寫檔
txt.write('哈囉你好 安安\n')
3. 關檔
txt.close()
收到使用者輸入圖片檔名以及最大寬度之後:
1. 開啟圖片
2. 顯示圖片資訊(大小、檔案格式、色彩模式)
3. 判斷是否為RGB模式,不是則轉換成RGB
4. 調整圖片大小
5. 將圖片轉為黑白模式
6. 開檔
7. 讀取每個pixel的值:
是0的話填入"@"
是255的話填入"_"
8. 關檔
pip install pillow
確認有沒有安裝成功,打開交互模式,執行這行
>>> from PIL import Image
跑完後沒有錯誤就是成功
安裝指令
from PIL import Image
def image_to_txt(imgName, maxSize):
pass
name = input('請輸入圖片檔案名稱(圖片需置於同一層資料夾): ')
maxSize = int(input('請輸入最大寬度(100~500): '))
if maxSize < 100 or maxSize > 500:
print('輸入錯誤')
else:
image_to_txt(name, maxSize)
print('程式結束')
引入PIL套件中的Image模組
建立image_to_txt函式,帶兩個參數,檔名以及最大寬度
提示使用者輸入資料,並呼叫image_to_txt函式
print("開啟圖片[{}]".format(imgName))
img = Image.open(imgName)
print("圖片資訊: 大小為{}x{}, 格式為{}, 色彩模式為{}".format(\
img.size[0], img.size[1], img.format, img.mode))
img.size: 一個tuple,值為寬與高
img.format: 檔案格式的string
img.mode: 色彩模式的string
if img.mode != 'RGB':
print("圖片顏色編碼不是RGB,進行轉換")
img = img.convert('RGB')
print("轉換完成")
width = img.size[0]
height = img.size[1]
zoom = 0 # 縮小比率
if width >= maxSize:
zoom = width / maxSize
width = int(width / zoom)
height = int(height / zoom)
height = int(height / 2) # 除2讓比例看起來比較正確
img = img.resize((width, height))
print("圖片寬於{},已縮小為{}x{}".format(\
maxSize, img.size[0], img.size[1]))
2
1
img = img.convert('1')
namestr = imgName.split('.')[0] + '.txt'
txt = open(namestr, 'w')
image.png
image.txt
imgName.split('.')
image
png
[0]
[1]
.txt
print()
print('開始進行圖片轉txt程序')
print('...')
for y in range(height):
for x in range(width):
pixel = img.getpixel((x, y))
if pixel != 0:
txt.write(' ')
else:
txt.write('@')
txt.write('\n')
_
_
_
_
_
@
@
@
@
@
@
@
@
@
print('程序執行完成')
print('檔案儲存為[{}]'.format(namestr))
txt.close()
print('保存完成')
填個問卷,讓我們更好