7
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Cloud Storageの画像をリサイズして再アップロードする

Posted at

やりたいこと

Google Cloud Storage(GCS)に保存した画像ファイルを、リサイズして、別ファイルとしてGCSに再アップロードしたい。

困った点

どうやったらPILのImageをCloudStorageにアップロードできる形にできるのか。。。
GAEではローカルファイルシステムに書き込みできないので、ファイルを一時保存して読み込む実装は不可。

解決策

こちらのサイトを参考にした。
ファイルオブジェクトでアップロードする方法だと、ValueError: Stream must be at beginning.が発生してうまく行かなかった。
そのため、stringからアップロードして、JPEGで保存できるように実装した。

import io
from google.cloud import storage
from google.cloud.storage import Blob
from PIL import Image


# GCSから写真データを取得
client_storage = storage.Client()
bucket = client_storage.get_bucket('Bucket name')
target = bucket.get_blob('target_name')

# bytes形式で読み込み
img = Image.open(io.BytesIO(target.download_as_string()))

# resize処理
width_rev = 1200
height_rev = img.height * width_rev / img.width
img_resize = img.resize((int(width_rev), int(height_rev)))

# メモリでデータを保持する
bio = io.BytesIO()
img_resize.save(bio, format='jpeg')

# リサイズされた画像をGCSへアップロード
blob = Blob("file_name", bucket)
blob.upload_from_string(data=bio.getvalue(), content_type="image/jpeg")
7
7
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
7
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?