Python 生成微信头图

简介: Python 生成微信头图

前两天我的朋友肖和我说 “完啦完啦,现在微信公众号没法弄了”。我就纳闷了,问她怎么回事。她告诉我 “黑洞图片事件你不知道,好多微信公众号号都有被告图片侵权,赔偿还不少。虽然我一直注意,但是有些图片根本不知道有没有版权啊。自己的小号,被告了可赔偿啊不起。” 我本来想告诉她,你想多了,就你那破号,但是这样怕是没法做朋友了。机智的我转说她 “太简单了,我帮你做个图片小程序吧,自动生成图片,一劳永逸”。肖立马说 “好啊,好啊,到时候赚钱了分你!” 于是就有了黑洞微信头图生成器。


使用 Pillow 处理图片



Pillow 是python的图片处理库,可以用来处理图片。核心代码大概如下:


from PIL import Image, ImageDraw, ImageFont
...
# 生成图片
image = Image.new("RGBA", (WIDTH, HEIGHT), background_color)
draw = ImageDraw.Draw(image)
# 设置字体大小
font = ImageFont.truetype(font_name, 20)
w, h = font.getsize(word)
# 文字垂直和水平居中
draw.text(((WIDTH - w) / 2, (HEIGHT - h) / 2), word, fill=font_color, font=font)
# 生成图片文件
image.save("output/{}_{}.png".format(filename, idx, "png"))


核心功能都是使用 Pillow 提供的api,生成一个rgb图片,然后往上贴文本,步骤和Photoshop创建图片类似。创建的图片效果有:


image.png


英文会生成10种,中文生成4种。更多效果图,请见github/game404


使用 click 封装cli



python的命令行工具有 docopt, fireclick。 比较了一下,觉得 click 更适合本项目。


@click.command(context_settings=CONTEXT_SETTINGS)
@click.option("--word", prompt="the word",
              help="图片文字")
@click.option("--bcolor", default="white", help="图片背景色,默认白色,支持颜色值['red', 'cyan', 'green', ...]及rgb hex值#ffffff")
@click.option("--fcolor", default="#2496ed",
              help="文字颜色,默认docker蓝,支持颜色值['red', 'cyan', 'green', ...]及rgb hex值#ffffff")
@click.option("--fpath", default=None, help="字体文件路径,默认空,使用预制字体。也许相对路径更合适。")
def generator(word, bcolor, fcolor, fpath):
    """
    黑洞图片生成器,协助生成微信公众号头图。自由不侵权,game404 出品。
    python运行示例:
        python blackhole.py --word docker
        python blackhole.py --word docker --bcolor black --fcolor #ffffff
        python blackhole.py --word docker --fpath some.ttf
    Docker运行示例:
        docker run -it --rm game404/blackhole docker
        ...
    """


运行效果如下:


(pywork-Y7-meC5z) C:\pywork\blackhole>python blackhole.py --help
Usage: blackhole.py [OPTIONS] 
  黑洞图片生成器,协助生成微信公众号头图。自由不侵权,game404 出品。
  python运行示例:
      python blackhole.py --word docker
      python blackhole.py --word docker --bcolor black --fcolor #ffffff
      python blackhole.py --word docker --fpath some.ttf
  Docker运行示例:
      docker run -it --rm game404/blackhole docker
      ...
Options:
  --word TEXT    图片文字
  --bcolor TEXT  图片背景色,默认白色,支持颜色值['red', 'cyan', 'green', ...]及rgb hex值#ffffff
  --fcolor TEXT  文字颜色,默认docker蓝,支持颜色值['red', 'cyan', 'green', ...]及rgb
                 hex值#ffffff
  --fpath TEXT   字体文件路径,默认空,使用预制字体。也许相对路径更合适。
  -h, --help     Show this message and exit.


做完程序,我正在想怎么发给肖,封装成pypi package呢,还是exe呢。 这时候旁边的肖恩顿,突然插了一句。“直接编成docker镜像吧,多方便啊,还跨平台”。原来他都知道啊,希望分帐的消息他不知道。


应用docker镜像制作



Dockerfile 如下:


FROM python:3.7-alpine3.9
LABEL maintainer="shawn <studyoo@foxmail.com>"
WORKDIR /app
COPY requirements.txt /app
RUN apk add --no-cache jpeg-dev \
                       zlib-dev \
                       freetype-dev \
                       lcms2-dev \
                       openjpeg-dev \
                       tiff-dev \
                       tk-dev \
                       tcl-dev \
                       harfbuzz-dev \
                       fribidi-dev \
                       gcc \
                       musl-dev \
    && echo "[global] \
index-url = http://pypi.tuna.tsinghua/simple \
trusted-host = pypi.tuna.tsinghua \
timeout = 120 \
" > /etc/pip.conf \
    && pip install --upgrade pip \
    && pip install -r requirements.txt \
    && mkdir output
COPY . /app
ENTRYPOINT ["python","blackhole.py"]


pillow涉及的dev包比较多,属于比较难装的package。


封装完成后,提交到docker hub,肖直接可以使用:


docker run -it -v $PWD/output:/app/output --rm game404/blackhole --word docker


和python方式运行类似,区别在于只用输入--word docker参数


image.png


总结



简单总结一下:


  1. 使用pillow制作图片文件。


  1. 使用click封装代码命令行工具。


  1. 编写docker镜像方便使用。



目录
相关文章
|
8月前
|
安全 开发者 Python
用Python找出了删除自己微信的所有人并将他们自动化删除了
用Python找出了删除自己微信的所有人并将他们自动化删除了
|
8月前
|
JSON Java 测试技术
Python + Appium 自动化操作微信入门
Python + Appium 自动化操作微信入门
151 0
|
5天前
|
数据采集 测试技术 API
python爬虫之app爬取-微信朋友圈
搭建appium环境,appium基本使用,API操作等等
102 0
|
5天前
|
数据采集 存储 人工智能
【Python+微信】【企业微信开发入坑指北】4. 企业微信接入GPT,只需一个URL,自动获取文章总结
【Python+微信】【企业微信开发入坑指北】4. 企业微信接入GPT,只需一个URL,自动获取文章总结
43 0
|
5天前
|
人工智能 机器人 API
【Python+微信】【企业微信开发入坑指北】3. 如何利用企业微信API给微信群推送消息
【Python+微信】【企业微信开发入坑指北】3. 如何利用企业微信API给微信群推送消息
34 0
|
5天前
|
缓存 人工智能 API
【Python+微信】【企业微信开发入坑指北】2. 如何利用企业微信API主动给用户发应用消息
【Python+微信】【企业微信开发入坑指北】2. 如何利用企业微信API主动给用户发应用消息
23 0
|
5天前
|
XML 人工智能 数据安全/隐私保护
【Python+微信】【企业微信开发入坑指北】1. 数据链路打通:接收用户消息处理并回复
【Python+微信】【企业微信开发入坑指北】1. 数据链路打通:接收用户消息处理并回复
17 0
|
5天前
|
Linux 网络安全 开发工具
【超详细!超多图!】【代码管理】Python微信公众号开发(3)- 服务器代码上传Github
【超详细!超多图!】【代码管理】Python微信公众号开发(3)- 服务器代码上传Github
35 0
|
5天前
|
数据采集 存储 关系型数据库
Python爬虫-使用代理获取微信公众号文章
使用代理爬取微信公众号文章
76 0
|
5天前
|
监控 安全 API
怎么用Python找回微信撤回信息
怎么用Python找回微信撤回信息
38 0