前言

写文章最头疼的一件事就是文章封面的选择,拧几个关键词出来做成文字封面显得过于单调,用一张好看的壁纸做封面又有点图不对题。既然这样,那就结合一下吧,用Python来生成文字图片,看下效果:

  • 原壁纸

2023-05-01-Python制作文字图片-1

  • 加个透明蒙版(蒙版颜色、透明度可调整)

2023-05-01-Python制作文字图片-2

  • 添加文字(最终效果)

2023-05-01-Python制作文字图片-3

实现方法

  • 安装依赖库
1
2
# 安装可能不成功,可以切换镜像源
pip install pillow
  • pip国内常用镜像
1
2
3
4
5
6
7
清华大学:https://pypi.tuna.tsinghua.edu.cn/simple
阿里云:http://mirrors.aliyun.com/pypi/simple/
中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/
华中理工大学:http://pypi.hustunique.com/
山东理工大学:http://pypi.sdutlinux.org/
豆瓣:http://pypi.douban.com/simple/
网易:http://mirrors.163.com
  • 临时使用方法
1
2
3
4
# 形式1
pip install 安装包名 -i https://pypi.tuna.tsinghua.edu.cn/simple
# 形式2
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple 安装包名
  • 核心函数1——图片加蒙版
1
2
3
4
5
6
7
8
9
10
11
12
13
14
def drawRect(img_path, savepath, **kwargs):
'''
:param img_path: 原始图片路径
:param savepath: 文件保存路径
:param kwargs: 蒙版颜色、透明度
:return: 加蒙版的图片
'''
img = Image.open(img_path).convert('RGBA')
transp = Image.new('RGBA', img.size, (0, 0, 0, 0))
draw = ImageDraw.Draw(transp, "RGBA")
draw.rectangle((0, 0, img.width, img.height), **kwargs)
img.paste(Image.alpha_composite(img, transp))
img.convert('RGB')
img.save(savepath)
  • 核心函数2——图片加文字
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
def image_add_text(img_path, text, logo, fontsPath, savePath):
'''
:param img_path: 图片路径
:param text: 需要添加的文字
:param logo: 图片右下角水印
:param fontsPath: 字体路径
:param savePath: 图片保存路径
:return:
'''
im = Image.open(img_path).convert("RGBA")
txt_img = Image.new('RGBA', im.size, (0, 0, 0, 0))
font_size = (txt_img.size[0] // len(text))
logo_font_size = font_size // 2
tfont = ImageFont.truetype(fontsPath, size=font_size)
logofont = ImageFont.truetype(fontsPath, size=logo_font_size)
draw = ImageDraw.Draw(txt_img)
text_x, text_y = draw.textsize(text, font=tfont)
xz, yz = (txt_img.size[0] - text_x) / 2, (txt_img.size[1] - text_y) / 2
lx, ly = (txt_img.size[0] - logo_font_size * len(logo)), (txt_img.size[1] - logo_font_size * 2)
# (0, 0, 0, 180):前三个数代表RGB(范围0-255),最后一个数代表透明度
draw.text((xz, yz), text=text, fill=(0, 0, 0, 180), font=tfont)
draw.text((lx, ly), text=logo, fill=(0, 0, 0, 180), font=logofont)
out = Image.alpha_composite(im, txt_img)
out = out.convert('RGB')
out.save(savePath)
  • 调用
1
2
3
4
5
6
7
8
9
if __name__ == '__main__':
img_path = r"C:\Users\hxh\Desktop\test-01.jpg"
addtext = "『Python制作文字图片』"
logo = "何小藤"
fonPath = r"C:\Users\hxt\Desktop\包图小白体.ttf"
savePath = r"C:\Users\hxt\Desktop\test-02.jpg"
zhezhaoSavePath = os.path.join(os.path.dirname(img_path), os.path.basename(img_path).split('.')[0] + "_new.png")
drawRect(img_path, zhezhaoSavePath, fill=(255, 255, 255, 150))
image_add_text(zhezhaoSavePath, addtext, logo, fonPath, savePath)

推荐几个壁纸网站

极简壁纸

Wallpaper Abyss

Awesome Wallpapers

Wallpaperscraft

Unsplash

Wallroom

GameWallpapers

CGWallpapers

Wallpaper Cave

必应每日高清壁纸

WallpaperMaiden

字体

为了避免不必要的麻烦,建议采用无版权字体,以下几个网站可以下载常用的无版权字体,同时可以查询某字体有无版权。

求字体

360查字体-查版权,免纠纷