2012-10-02 2 views
3

GAE의 이미지 위에 일부 텍스트를 오버레이하려고합니다. 이제 그들은 문제가되어서는 안되는 PIL 라이브러리를 공개합니다.App Engine, PIL 및 오버레이 텍스트

다음은 내가 가지고있는 것입니다. 그것은 작동하지만, 별도의 오버레이 이미지를 작성한 후 병합하지 말고 직접 배경 이미지에 직접 써야한다고 생각합니다.

내가 Image.frombuffer라도 사용할 수, 나는 그것을 갈 준하지만 난 당신이 대신 [Image.open][1] 방법을 사용해야합니다 ...

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) 
+0

Plz, 어떻게 googleappengine에 PIL을 설치할 수 있습니까? 고맙습니다. – armandomiani

답변

2

그것을받지 못했습니다. Image.frombufferImage.fromstring은 원시 데이터가 아닌 픽셀 데이터를 디코딩합니다. 당신은 같은 것을 사용할 수 있습니다 귀하의 경우에는

: 배경 이미지에 직접 그리려면

blob_reader = blobstore.BlobReader(key) 
text_img = Image.open(blob_reader) 
......... 
+0

다음과 같은 오류가 있습니다.'IOError (이미지 파일을 식별 할 수 없습니다.) ' – bradley

+0

어떤 이미지 유형을로드하려고합니까? 또한 다음과 같은'text_img = Images.open (StringIO (blob_reader.read))'를 사용해 볼 수도 있습니다. –

+0

그들은 단지 표준 jpeg입니다. StringIO를 사용하여'TypeError : '모듈'객체를 호출 할 수 없습니다. '라는 메시지가 나타납니다. – bradley

0

는 가장 간단한 것 :

draw = ImageDraw.Draw(background) 
draw.text((0, 0), 'HELLO TEXT', font=ImageFont.load_default()) 
+0

이렇게하면 다음과 같은 오류가 발생합니다. 'AttributeError :'Image '객체에'load'' 속성이 없습니다. – bradley

2

당신은, PIL로 이미지를 열 필요가 없습니다 앱 엔진 이미지 유형 (다른 문자는 이 아니고 이 아니라

)
blob_reader = blobstore.BlobReader(key) 
text_img = Image.open(blob_reader)