70 行 Python 代码写春联,行书隶书楷书随你选

Python45

前言

相信现在有很多小伙伴都不会写毛笔字了,今天想用python来写一幅春联,不知道有没有人喜欢。该文用的是田英章老师的楷

书,我在网上总共找到了1600个汉字,因此,春联用字被限制在这1600个汉字的小字库中。我个人精力有限,同时受知识产权保

护的限制,不可能制作完整的毛笔字库。那么,能否借用现有的矢量字库,满足朋友们的要求呢?经过一番尝试,发现操作系统

自带的某些矢量字库,是可以作为毛笔字库使用的。以下是简单的演示代码,仅供学习编程技术之用,绝无侵犯字体权利人之权

力的故意,特此声明。

选择矢量字库

虽然有很多方法可以帮你呈现出系统支持的所有字体文件,我建议最直接的方式是去查看操作系统的字体目录。以Windows为例,我直接在C:\Windows\Fonts这个路径下找到了"华文隶书"这个字库文件,查看属性可知,该文件名为STLITI.TTF。找到了喜欢的字库文件,只需要将其全路径文件名替换到代码中的FONT_FILE常量即可,不需要做其他操作。

; 选择一款喜欢的春联背景图案

还是以"龙凤呈祥"这个图案为例。如果换用其他的图案,请确保图案是.png格式(背景透明),且是方形的。同字体文件一样,我

们需要将这个背景图案的全路径文件名替换到代码中的BG_FILE常量即可。

完整代码

全部代码总共70余行,使用方法请看注释。

python学习交流Q群:906715085####
-*- 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')

样例

最后,祝大家虎年大吉,虎虎生威,身体健康,事事顺心。

Original: https://www.cnblogs.com/1234567FENG/p/16381788.html
Author: 蚂蚁爱Python
Title: 70 行 Python 代码写春联,行书隶书楷书随你选



相关阅读1

Title: 钻石价格分析

本文件探讨的数据集是有关钻石各种属性与价格,数据集中有53,943颗钻石,有10个特征(carat, cut, color, clarity, depth, table, price, x, y, z)。

总共10个变量,其中3个为Object类型 [cut、 color 和 clarity],1个为整数(int64)类型[price],6个为数值(float64)类型[carat, depth, table, x, y, z]。

pandas 缺乏区分 str和object类型,都对应dtype('O')类型,既是强制类型为dtype('S')也无效。

Numpy 可以区分 str和object类型,dtype('O') 和 dtype('S')分别对应与 object 、str。

carat

钻石的重量,单位克拉

0.2-5.01

cut

切割质量

Fair(一般), Good(好), Very Good(非常好), Premium(优质), Ideal(理想)

color

钻石颜色

J (最差)到 D (最好)

clarity

钻石的透明度

I1(最差) ,SI2,SI1,VS2,VS1,VS2,VS1,IF (最好)

depth

总深度百分比

43-79

table

钻石顶部相对于最宽点的宽度,钻石的台面

43-95

price

钻石的美元价格,单位是美元

326-18823

钻石长度,单位mm

0-10.74

钻石宽度,单位mm

0-58.9

钻石深度,单位mm

0-31.8

1、钻石中最常见的类别

2、不同属性与价格的相关度

3、每个分类的价格分布

原始数据存在以下问题:

1.不一致——数据内涵出现不一致情况

2.重复 3.不完整——感兴趣的属性没有值 4.含噪声——数据中存在着错误、或异常(偏离期望值)的数据 5.高维度

数据清洗

去掉噪声和无关数据

数据集成

将多个数据源中的数据结合起来存放在一个一致的数据存储中

数据变换

把原始数据转换成为适合数据挖掘的形式

数据归约

主要方法包括:数据立方体聚集,维归约,数据压缩,数值归约,离散化和概念分层等

在这里我们发现没有缺失值、也没有重复值,因此原始数据可以直接使用。

输出结果

默认6种颜色:deep,muted, pastel, bright, dark, colorblind seaborn, color_palette(palette=None, n_colors = None, desat = None)

可以得出结论:对应属性最多数量的是---->最理想的切割钻石21551,G的颜色是11292,SI1的净度是13067

70 行 Python 代码写春联,行书隶书楷书随你选

70 行 Python 代码写春联,行书隶书楷书随你选

70 行 Python 代码写春联,行书隶书楷书随你选

  • 第1四分位数 (Q1),又称"较小四分位数",等于该样本中所有数值由小到大排列后第25%的数字。
  • 第2四分位数 (Q2),又称"中位数",等于该样本中所有数值由小到大排列后第50%的数字。
  • 第3四分位数 (Q3),又称"较大四分位数",等于该样本中所有数值由小到大排列后第75%的数字。

ascending表示排序方式,值为True表示升序,可以省缺,值为False表示降序。

corr()函数的作用是用于求解不同变量之间的相关性,值越大表示变量之间的相关性越大。

KDE分布图,是指Kernel Density Estimation核概率密度估计。可以理解为是对直方图的加窗平滑。通过KDE分布图,可以查看并对训练数据集和测试数据集中特征变量的分布情况。

Original: https://blog.51cto.com/lanxf/5623785
Author: lanxiaofang
Title: 钻石价格分析

相关阅读2

Title: 办公自动化:几行代码将PDF文档转换为WORD文档(代码实战)!

看了四五个PDF文件对象相关的插件库,比如:pdfminer.six、PyPDF2、pikepdf、pdfplumber、PyMuPDF之类的有很多,最后发现pdf2docx比较简单,只需要几行代码便可以实现。本着使用最简单的方法来解决实际问题的至高境界,我们就使用它来演示。

70 行 Python 代码写春联,行书隶书楷书随你选

首先,通过pip的方式安装再导入模块。

pip install pdf2docx  # 安装 pdf2docx

# 导入文件转换对象Converter
from pdf2docx import Converter

分别定义好word与pdf文件的存储路径,再将已经存在pdf文件转换成python的插件对象。

# 定义PDF文件路径
pdf_file_path = 'Python 集中营.pdf'

# 定义WORD文件路径
docx_file_path = 'Python 集中营.docx'

# 初始化PDF转换对象
converter = Converter(pdf_file_path)

将初始化的pdf对象转换成word文档存储。

'''
实现PDF转换成WORD
convert(path, start=0, end=None)
path: word文档路径
start: 开始页数,0 从第一页开始
end: 结束页数,None 无限制
pages: 指定哪几页需要转换
'''
# 连续页面进行转换
converter.convert(docx_file_path, start=0, end=None)

# 指定页面进行转换
# converter.convert(docx_file_path, pages=[0,2,4,6,8,10])

# 关闭转换对象
converter.close()

70 行 Python 代码写春联,行书隶书楷书随你选

【往期精彩】

● 办公自动化:轻松提取PDF页面数据,并生成Excel文件(代码实战)!

● sched 模块中巨好用的轻量级定时任务神器scheduler!

● 不用再使用命令行打包成exe,有人写出了UI应用,可视化UI界面对python程序进行打包的方法!

● 发现一个秘密:既python3.6之后字典竟然变成了有序集合,我再次验证了一下!

● 大厂校招白菜打包价40W+,可高兴坏了房东大妈...

● 这么多的内置函数能记住吗?对python的68个内置函数分类总结!

● 必须要会的文件操作对象File,python文件读写操作利器!

● 你不知道的CS模式的进程管理工具,状态监测、项目启停一目了然!

● 如何将一个python应用以docker镜像的方式来运行?

● python-celery专注于实现分布式异步任务处理、任务调度的插件!

● python远程服务操作工具:fabric,远程命令、本地命令、服务器操作利器!

● 办公自动化:Python-win32com自动将word文档转换成pdf格式!

● Git LFS 3.0.0 发布,对大文件进行版本控制的 Git 扩展

● pandas数据统计插件的连接函数concat()妙用,灵活处理数据对象!

Original: https://www.cnblogs.com/lwsbc/p/15510763.html
Author: Python集中营
Title: 办公自动化:几行代码将PDF文档转换为WORD文档(代码实战)!

相关阅读3

Title: python 中单元测试的应用

python 中单元测试的应用

原创

口袋里的小龙©著作权

文章标签 python 单元测试 开发语言 java 文章分类 Python 编程语言

©著作权归作者所有:来自51CTO博客作者口袋里的小龙的原创作品,请联系作者获取转载授权,否则将追究法律责任

前言

&#x200B;pytho&#x7684;&#x5355;&#x5143;&#x6D4B;&#x8BD5;&#xFF0C;&#x8FD9;&#x4E2A;&#x5982;&#x679C;&#x4F60;&#x4E86;&#x89E3;java &#x4E2D;&#x7684;&#x5355;&#x5143;&#x6D4B;&#x8BD5; &#x5927;&#x540C;&#x5C0F;&#x610F;&#x200B;

一、python 测试类

python 的测试需要引入 import unittest 这个包

二、测试步骤

1.创建用户输入类

此处模拟用户输入

name_function.py

## 获取全名def get_fromat_name(first,last):    """生成整洁的名称"""    full_name = f"{first}-{last}"    return full_name.title()

names.py

## 引入方法from name_function import get_fromat_nameprint("Enter 'q' at any time quit. ")## 模拟用户输入 在python 中使用input函数 来进行获取用户输入while True:    first = input("Please gait me a first name :")    if first == "q":        break    last = input("Please gait me a last name :")    if last == "q":        break    format_name = get_fromat_name(first,last)    print(f"\t full-name:{format_name}")

2.测试示例

代码如下(示例):

test_name_function.py

## 测试包import unittestfrom name_function import get_fromat_name## 测试类 必须继承 unittest.TestCase类class NamesTestCase(unittest.TestCase):    ## 测试方法 如果了解java 这个和java的junit框架差不多    def test_frist_last_name(self):        """输入参数获取结果 比对是否相等"""        formated_name = get_fromat_name("王五","王五")        """ 获取断言 """        self.assertEqual(formated_name,"王五-王五")        if __name__ == "__main__":    unittest.main()

运行此类 可以从控制台得到结果:

## 正确的断言.----------------------------------------------------------------------Ran 1 test in 0.001sOK## 错误的断言F======================================================================FAIL: test_frist_last_name (__main__.NamesTestCase)输入参数获取结果 比对是否相等----------------------------------------------------------------------Traceback (most recent call last):  File "d:\python_work\第十一章:代码测试\test_name_function.py", line 12, in test_frist_last_name    self.assertEqual(formated_name,"王五-王五1")AssertionError: '王五-王五' != '王五-王五1'- 王五-王五+ 王五-王五1?      +----------------------------------------------------------------------Ran 1 test in 0.001sFAILED (failures=1)PS D:\python_work>

总结

其实很简单,单元测试

  • 收藏
  • 评论
  • *举报

上一篇:Python-Django 项目模块-年级模块开发-新增(八)

下一篇:Python-Django 项目模块-年级模块开发-修改(九)

Original: https://blog.51cto.com/u_15446828/5507886
Author: 口袋里的小龙
Title: python 中单元测试的应用