2019年3月20日水曜日

pycairo で テキスト画像作成

CairoというライブラリのPython バインドでテキストの画像を作る。 サンプルが少なくてわかりにくかった。。 テキストの描画時のサイズをScaledFontを用いてextentsとしてうけとり、 それを使って位置決めしている。
> python test.py TEXT FONTSIZE
のように使う。
import cairo
import sys

WIDTH, HEIGHT = 256, 64
text = sys.argv[1]
fontsize = int(sys.argv[2])

surface = cairo.ImageSurface(cairo.FORMAT_RGB24, WIDTH, HEIGHT)
ctx = cairo.Context(surface)

ctx.set_source_rgb(1, 1, 1)  # White
ctx.rectangle(0, 0, WIDTH, HEIGHT) # clear background
ctx.fill()

ctx.set_source_rgb(0,0,0) # Black 
ctx.set_font_size(fontsize)

sf = ctx.get_scaled_font()
extents = sf.text_extents(text)
ctx.move_to(WIDTH / 2 - extents.width /2, HEIGHT /2 + extents.height / 2)
ctx.show_text(text)

surface.write_to_png("example.png")

2019年3月1日金曜日

django のテンプレートだけ使う

文献リストのHTML生成を以前からdjangoのテンプレートだけ使ってでやっていたのだけど、 Python2 系から 3系にあげて、djangoのバージョンを上げたら動かなくなってしまったので、 再調査して実現。こういうのを技術的負債というのだろう。

普通djangoはWebフレームワークとして初期化されるのだけど、 テンプレートエンジンだけ使おうとすると、本来通るべき初期化の部分を通らないので、 いろいろ自前でやらなければならない、ということ。

基本的には、

  • 設定ファイルをpythonコードとして書き
  • それを環境変数 DJANGO_SETTING_MODULE に指定してpythonを起動
すればいい。

設定ファイルはこんな感じ。SECRET_KEYは適当に設定しないと文句を言われる。。

import django
SECRET_KEY = '01234567890123456789012345678901234567890123456789'
django.setup()

DEBUG = True

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'APP_DIRS': True,
    },
]