最新版的Python寫春聯,支援行書隸書楷書,不再有缺失漢字
# -*- coding: utf-8 -*-
import os
import freetype
import numpy as np
from PIL import Image
FONT_FILE = r'C:\Windows\Fonts\STLITI.TTF'
BG_FILE = r'D:\temp\bg.png'
def text2image(word, font_file, size=128, color=(0,0,0)):
""" 使用指定字型檔將單個漢字轉為影像
word - 單個漢字字串
font_file - 向量字型檔檔名
size - 字號,預設 128
color - 顏色,預設黑色
"""
face = freetype.Face(font_file)
face.set_char_size(size*size)
face.load_char(word)
btm_obj = face.glyph.bitmap
w, h = btm_obj.width, btm_obj.rows
pixels = np.array(btm_obj.buffer, dtype=np.uint8).reshape(h, w)
dx = int(face.glyph.metrics.horiBearingX/64)
if dx > 0:
patch = np.zeros((pixels.shape[0], dx), dtype=np.uint8)
pixels = np.hstack((patch, pixels))
r = np.ones(pixels.shape) * color[0] * 255
g = np.ones(pixels.shape) * color[1] * 255
b = np.ones(pixels.shape) * color[2] * 255
im = np.dstack((r, g, b, pixels)).astype(np.uint8)
return Image.fromarray(im)
def write_couplets(text, horv='V', quality='L', out_file=None, bg=BG_FILE):
""" 寫春聯
text - 春聯字串
bg - 背景圖片路徑
horv - H- 橫排, V- 豎排
quality - 單字解析度, H-640 畫素, L-320 畫素
out_file - 輸出檔名
"""
size, tsize = (320, 128) if quality == 'L' else (640, 180)
ow, oh = (size, size*len(text)) if horv == 'V' else (size*len(text), size)
im_out = Image.new('RGBA', (ow, oh), '#f0f0f0')
im_bg = Image.open(BG_FILE)
if size < 640:
im_bg = im_bg.resize((size, size))
for i, w in enumerate(text):
im_w =外匯跟單gendan5.com text2image(w, FONT_FILE, size=tsize, color=(0,0,0))
w, h = im_w.size
dw, dh = (size - w)//2, (size - h)//2
if horv == 'V':
im_out.paste(im_bg, (0, i*size))
im_out.paste(im_w, (dw, i*size+dh), mask=im_w)
else:
im_out.paste(im_bg, (i*size, 0))
im_out.paste(im_w, (i*size+dw, dh), mask=im_w)
im_out.save('%s.png'%text)
os.startfile('%s.png'%text)
if __name__ == '__main__':
write_couplets(' 普天同慶 ', horv='V', quality='H')
write_couplets(' 歡度春節 ', horv='V', quality='H')
write_couplets(' 國泰民安 ', horv='H', quality='H')
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69946337/viewspace-2853834/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SSL證書屬於數字證書嗎?數字證書有哪些
- ByBlog 支援markdown 書寫部落格
- 數字證書不僅有SSL證書,數字證書型別科普大全型別
- Python書籍|分享一本Python的書籍Python
- DPOS 共識演算法 - 缺失的白皮書演算法
- 多元數字閱讀:看書、聽書、視訊講書
- 原生Ajax書寫
- SSL數字證書是什麼?SSL數字證書具體有什麼作用?
- SSL數字證書有什麼功能?為什麼需要SSL證書?
- 2 JS的書寫位置JS
- 行,這本 Python 書徹底火了!Python
- Python寫春聯(turtle版)Python
- https數字證書作用和數字證書是否可以登出?HTTP
- go-自籤ca證書,客戶端數字證書,服務端數字證書Go客戶端服務端
- css書寫規範CSS
- CSS HACK 如何書寫CSS
- Markdown 書寫規範
- Markdown書寫規範
- python電子書Python
- Python PEP8程式碼書寫規範Python
- 開發申請的書寫
- 提交bug的書寫規範
- 【日記】新看的書有點難 QvQ(563 字)
- 贈書《流暢的Python》Python
- 行書賞析
- 薦書 | 《利用Python進行資料分析》Python
- 我的新書出版啦!和大家聊聊寫書的酸甜苦辣新書
- 有沒有通用的SSL證書
- 有了它,免費下載英文專業書籍不再煩惱!
- mysql 中sql語句關鍵字的書寫順序與執行順序MySql
- SSL證書的分類有哪些?如何選擇SSL證書?
- 踩樓贈書 —— Python安全攻防圖書的“頭把交椅”Python
- css BEM書寫規範CSS
- Makefile-4-書寫命令
- SQL書寫規範(通用)SQL
- js中有哪些書寫位置JS
- 數字證書掃盲
- 【日記】書荒了(337 字)