快过年了,教大家用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:https://www.cdcxhl.com/article32/dsojdsc.html

成都网站建设公司_创新互联,为您提供网站策划标签优化云服务器手机网站建设移动网站建设网站营销

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

成都app开发公司