2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

DALL-E3の結果画像をJSON圧縮画像文字列データに変換する方法

Last updated at Posted at 2024-03-01

この記事では、DALL-E3から提供されるBase64 JSON形式の画像結果を、Webページの表示やストレージに適した圧縮画像文字列に変換する効率的な方法について説明します。このプロセスは、アプリケーションの帯域幅とストレージ要件を犠牲にすることなく最小限に抑えたい開発者にとって特に有用です。以下に説明する方法では、Python Imaging Library(PIL)、またはPillowとしても知られるライブラリを使用してこの圧縮を実現します。

前提条件

開始する前に、システムにPythonがインストールされていること、およびPillowライブラリがpipパッケージマネージャーを使用してインストールされていることを確認してください:

pip install pillow

ステップバイステップガイド

1. Base64 JSON画像データのデコード

最初のステップは、DALL·E 3から受け取ったBase64エンコードされたJSONデータをbase64.b64decode()関数を使用してデコードすることです。

import base64
from PIL import Image
from io import BytesIO

# 'response.data[0].b64_json'がDALL·E 3から受け取ったBase64 JSONデータであると仮定
image_data = base64.b64decode(response.data[0].b64_json)

2. PIL画像への変換とリサイズ

次に、デコードされたデータをPIL画像オブジェクトに変換します。このオブジェクトを使用して、画像を簡単に操作できます。例えば、画像の寸法を縮小してファイルサイズを減らすことができます。ここでは、画像を256x256ピクセルにリサイズします。

pil_image = Image.open(BytesIO(image_data)).resize((256, 256))

3. 圧縮してBase64に再変換

リサイズ後、JPEG形式で画像を保存し、特定の品質レベルを指定して圧縮します。ここでは、画質とファイルサイズのバランスが良い80の品質を使用します。画像はBytesIOオブジェクトに保存されます。これは、メモリ内のバイナリストリームとして機能します。

image_data = BytesIO()
pil_image.save(image_data, format='JPEG', quality=80)
compressed_image = base64.b64encode(image_data.getvalue()).decode('utf-8')

4. 圧縮画像文字列の作成

最後に、必要なデータURIスキームdata:image/jpeg;base64,を圧縮されたBase64文字列の前に追加します。これにより、HTML画像要素で直接使用できる完全な画像データ文字列が作成され、必要に応じて保存できます。

str_image = 'data:image/jpeg;base64,' + compressed_image

結論

これらのステップに従うことで、DALL·E 3の画像結果をより管理しやすい形式に効果的に圧縮することができます。これにより、ネットワークおよびストレージリソースの使用を最適化しつつ、高いレベルの画像品質を維持できます。Webアプリケーションの開発を行っている場合でも、単に大量の画像を効率的に保存したい場合でも、この方法は実用的な解決策を提供します。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?