關於python圖片轉字符畫,相信大家都不陌生,經常出現在 n個超有趣的python項目中。
今天我也來實踐這個有趣的項目,更進一步的是把這個功能做成一個在線的網站,直接上傳圖片生成字符畫,在線預覽可以讓更多的人來體驗。
體驗網址:https://www.manjiexiang.cn/blog/post_img
舉個栗子,就是這是一張圖片
經過轉換成的字符畫是這樣的,這個txt的文件
代碼部分:
使用PIL處理圖片,resize方法轉成指定寬高
from PIL import Image
im = Image.open("qq.png")
im = im.resize((width, height), Image.NEAREST)
像素轉字符方法,將r,b,g轉化為灰度值,然后根據灰度值的大小確定所選字符在ascii_char中的位置。
def get_char(r, g, b, alpha=256):
ascii_char = list("$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,\"^`'. ")
if alpha == 0:
return ' '
length = len(ascii_char)
gray = int(0.2126 * r + 0.7152 * g + 0.0722 * b)
unit = (256.0 + 1) / length
return ascii_char[int(gray / unit)]
處理圖片,遍歷圖片中的每一個像素,依次調用get_char方法即可得到每一個像素對應的字符,然后將這些字符組合起來即可得到所需的字符畫了,輸出到txt文件。
def draw():
im = Image.open("qq.png")
im = im.resize((width, height), Image.NEAREST)
txt = ""
for i in range(height):
for j in range(width):
txt += get_char(*im.getpixel((j, i)))
txt += '\n'
with open("qq.txt", 'w') as f:
f.write(txt)
至此,生成字符畫的腳本完成了。
接下來就是運用到網站項目中,區別是圖片是上傳的,不是本地的路徑,這里采用的是django的項目,圖片上傳到項目里的路徑
media_root = os.path.join(settings.BASE_DIR, 'upload/')
原本想將生成的txt文件下載下來的,發現下載的txt文件里面字符畫錯亂了,索性就重定向進行瀏覽,效果一樣。
設置的寬高可以修改生成字符畫的大小,即上面的width、height
網站地址:
https://www.manjiexiang.cn/blog/post_img
歡迎大家使用
腳本github地址:https://github.com/taixiang/py_draw
歡迎關注我的個人博客:https://www.manjiexiang.cn/
更多精彩歡迎關注微信號:春風十里不如認識你
一起學習,一起進步,歡迎上車,有問題隨時聯系,一起解決!!!