Python 生成微信頭圖

前兩天個人朋友肖和我說 「完啦完啦,如今微信公衆號無法弄了」。我就納悶了,問她怎麼回事。她告訴我 「黑洞圖片事件你不知道,好多微信公衆號號都有被告圖片侵權,賠償還很多。雖然我一直注意,可是有些圖片根本不知道有沒有版權啊。本身的小號,被告了可賠償啊不起。」 我原本想告訴她,你想多了,就你那破號,可是這樣怕是無法作朋友了。機智的我轉說她 「太簡單了,我幫你作個圖片小程序吧,自動生成圖片,一勞永逸」。肖立馬說 「好啊,好啊,到時候賺錢了分你!」 因而就有了黑洞微信頭圖生成器。python

使用 Pillow 處理圖片

Pillow 是python的圖片處理庫,能夠用來處理圖片。核心代碼大概以下:git

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建立圖片相似。建立的圖片效果有:github

Python

英文會生成10種,中文生成4種。更多效果圖,請見github/game404docker

使用 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 ... """
複製代碼

運行效果以下:api

(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鏡像吧,多方便啊,還跨平臺」。原來他都知道啊,但願分賬的消息他不知道。bash

應用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。app

封裝完成後,提交到docker hub,肖直接可使用:工具

docker run -it -v $PWD/output:/app/output --rm game404/blackhole --word docker
複製代碼

和python方式運行相似,區別在於只用輸入--word docker參數

docker

總結

簡單總結一下:

  1. 使用pillow製做圖片文件。
  2. 使用click封裝代碼命令行工具。
  3. 編寫docker鏡像方便使用。
相關文章
相關標籤/搜索