3

GAE で画像の上にテキストを重ねようとしています。現在、彼らは PIL ライブラリを公開していますが、問題にはなりません。

これが私が持っているものです。それは機能しますが、別のオーバーレイ画像を作成してからマージするのではなく、背景画像に直接書き込む必要があると思わずにはいられません。

Image.frombufferなどを使用できますか、試してみましたが、取得できません...

from PIL import Image, ImageDraw, ImageFont
from google.appengine.api import images
from google.appengine.ext import blobstore
from google.appengine.api import files

def compose(key):

    # create new image
    text_img = Image.new('RGBA', (800,600), (0, 0, 0, 0))
    draw = ImageDraw.Draw(text_img)
    draw.text((0, 0), 'HELLO TEXT', font=ImageFont.load_default())

    # no write access on GAE
    output = StringIO.StringIO()
    text_img.save(output, format="png")
    text_layer = output.getvalue()
    output.close()

    # read background image
    blob_reader = blobstore.BlobReader(key)
    background = images.Image(blob_reader.read())

    # merge
    merged = images.composite([(background, 0, 0, 1.0, images.TOP_LEFT), 
                               (text_layer, 0, 0, 1.0, images.TOP_LEFT)], 
                               800, 600)

    # save
    file_name = files.blobstore.create(mime_type='image/png')
    with files.open(file_name, 'a') as f:
        f.write(merged)
    files.finalize(file_name)
4

3 に答える 3

2

[Image.open][1]代わりにメソッドを使用する必要があります。Image.frombuffer生の画像ではなくピクセルデータをImage.fromstringデコードします。

あなたの場合、次のようなものを使用できます:

blob_reader = blobstore.BlobReader(key)
text_img = Image.open(blob_reader)
.........
于 2012-10-02T18:08:49.133 に答える
2

アプリ エンジンのイメージ タイプではなく、PIL でイメージを開く必要があります (別の回答では 1 文字ずれていました:ImageではなくImages):

blob_reader = blobstore.BlobReader(key)
text_img = Image.open(blob_reader)
于 2012-10-02T23:01:00.717 に答える
0

背景画像に直接描画するのが最も簡単です。

draw = ImageDraw.Draw(background)
draw.text((0, 0), 'HELLO TEXT', font=ImageFont.load_default())
于 2012-10-02T20:36:45.857 に答える