快過年了,教大家用python來寫春聯,支持行書隸書楷書

僅供學習編程技術之用,絕無侵犯字體權利人之權力的故意,特此聲明。

創新互聯專注骨干網絡服務器租用10年,服務更有保障!服務器租用,資陽服務器托管 成都服務器租用,成都服務器托管,骨干網絡帶寬,享受低延遲,高速訪問。靈活、實現低成本的共享或公網數據中心高速帶寬的專屬高性能服務器。

選擇矢量字庫

雖然有很多方法可以幫你呈現出系統支持的所有字體文件,我建議最直接的方式是去查看操作系統的字體目錄。以Windows為例,我直接在C:\Windows\Fonts這個路徑下找到了“華文隸書”這個字庫文件,查看屬性可知,該文件名為STLITI.TTF。找到了喜歡的字庫文件,只需要將其全路徑文件名替換到代碼中的FONT_FILE常量即可,不需要做其他操作。


選擇一款喜歡的春聯背景圖案

還是以“龍鳳呈祥”這個圖案為例吧。如果換用其他的圖案,請確保圖案是.png格式(背景透明),且是方形的。同字體文件一樣,我們需要將這個背景圖案的全路徑文件名替換到代碼中的BG_FILE常量即可。

完整代碼

全部代碼總共70余行,使用方法請看注釋。

# -*- 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= 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')

網頁標題:快過年了,教大家用python來寫春聯,支持行書隸書楷書
當前URL:http://m.kartarina.com/article32/dsojdsc.html

成都網站建設公司_創新互聯,為您提供網站策劃標簽優化云服務器手機網站建設移動網站建設網站營銷

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

成都app開發公司
主站蜘蛛池模板: 亚洲AV色吊丝无码| 亚洲av永久无码精品秋霞电影影院| 在线观看片免费人成视频无码| 国产精品成人无码久久久久久 | 无码熟妇人妻AV在线影院| 亚洲AV无码成人网站在线观看| 国产成人无码精品一区在线观看| 无码孕妇孕交在线观看| 国产丝袜无码一区二区视频| 久久久国产精品无码免费专区| MM1313亚洲精品无码久久| 亚洲Av永久无码精品三区在线| 国产AV无码专区亚洲AV麻豆丫| 日韩精品无码久久久久久| 欧日韩国产无码专区| 亚洲av无码成人精品区| 精品欧洲AV无码一区二区男男| 国产精品xxxx国产喷水亚洲国产精品无码久久一区 | 乱人伦中文无码视频在线观看| 无码人妻一区二区三区免费视频| 人妻丝袜中文无码av影音先锋专区| 亚洲AV无码一区二三区| 亚洲综合无码一区二区痴汉| 无码专区天天躁天天躁在线| 惠民福利中文字幕人妻无码乱精品| 亚洲色在线无码国产精品不卡| 午夜不卡无码中文字幕影院| 亚洲熟妇无码乱子AV电影| 无码国模国产在线无码精品国产自在久国产 | 亚洲日韩精品无码专区网站| 人妻少妇精品无码专区漫画| 无码视频在线观看| 国产日韩精品中文字无码| 最新高清无码专区| 伊人久久大香线蕉无码麻豆| 精品无码成人久久久久久| 无码人妻精品内射一二三AV| 少妇无码AV无码专区线| 老司机无码精品A| 日韩AV无码精品一二三区| 国产成人无码区免费A∨视频网站 国产成人无码午夜视频在线观看 国产成人无码精品一区不卡 |