SVGを出力したい
特に何も考えずに Content-Type
だけしっかり指定してあげればOK。
return {
'statusCode': 200,
'headers': {
'Content-Type': 'image/svg+xml',
},
'isBase64Encoded': False,
'body': '<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">svg version="1.1" xmlns="http://www.w3.org/2000/svg">...',
}
PNGを出力したい
こっちが主題になります。
Pythonで画像を取り扱う場合、何らかのライブラリを使用することになると思いますが、今回はおそらく一番使われてるであろうPillowを使っていることにします。
他のライブラリでも応用できると思います。
import io
import base64
from PIL import Image
# :
# ここら辺で画像を色々なんとかして最終的に`image`に何か入ってると思いねぇ
# :
bytes_io = io.BytesIO()
image.save(bytes_io, format='PNG')
return {
'statusCode': 200,
'headers': {
'Content-Type': 'image/png',
},
'isBase64Encoded': True,
'body': base64.b64encode(bytes_io.getvalue()).decode('UTF-8'),
}
ポイントはPillow.Image.save()
でio.BytesIO
に書き込み、getvalue()
で取得したbytes型をBase64でエンコードしてやる、ってところです。
出力がバイナリの場合はisBase64Encoded
をTrue
にした上でBase64でエンコードしたデータをbody
に入れる必要があります。
書き込み時のformat
をJPEG
等に変更すればその形式で出力することができます。
あとはSVGと同様にContent-Type
を指定してあげればOKです。
最後に
この記事書いてる人は実はあんまりPython得意じゃありません。
なのでもっと良い方法あるよ!って方はコメントとかで教えてください。
ついで(?)に弊社ではサーバーサイドエンジニアを募集していますので、まずはざっくばらんにお話ししてみませんか?
下記からご応募お待ちしております。
▼ https://herp.careers/v1/lanchester/Bucw0mXRKogc
▼ https://www.wantedly.com/companies/lanchester
▼採用動画について:https://moovy.jp/job/651