前言
相信现在有很多小伙伴都不会写毛笔字了,今天想用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
- 第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比较简单,只需要几行代码便可以实现。本着使用最简单的方法来解决实际问题的至高境界,我们就使用它来演示。
首先,通过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()
【往期精彩】
● 办公自动化:轻松提取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博客作者口袋里的小龙的原创作品,请联系作者获取转载授权,否则将追究法律责任
前言
​pytho的单元测试,这个如果你了解java 中的单元测试 大同小意​
一、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 中单元测试的应用