2017-12-30 38 views
0

AWS S3またはDigital Ocean空間に画像を保存するためのdjango_storagesパッケージを使用しようとしています。Django:デジタルオーシャンスペース/ AWS S3、django_storagesを使用して画像を作成する方法

フォームを使用して通常の画像アップロードを使用すると、画像は正常にサーバーにアップロードされています。

しかし、イメージを手動で作成してS3またはDigital Ocean Spaceバケットに書き込もうとすると、イメージが正しく作成されません。

from PIL import Image, ImageDraw, ImageFont 

img = Image.new('RGB', (500,500), (255,255,255)) 
d = ImageDraw.Draw(img) 
d.text((10,10), "Hello", font=ImageFont.truetype("tahomabd"), fill='BLACK') 
d.text((10,60), "World", font=ImageFont.truetype("tahomabd"), fill='BLACK') 


from django.core.files.storage import default_storage as storage 
JPEG_PATH = "pathtofile.jpeg" 
storage.exists(JPEG_PATH) 

storage.delete(JPEG_PATH) 
JPEG_STORAGE = storage.open(JPEG_PATH, "w") 
JPEG_STORAGE.write(img) 
JPEG_STORAGE.close() 

上記のコードは、保管場所に.JPEGファイルが作成されますが、それはどんな意味がありませんいくつかのデフォルトのファイルです:

は、私は、シェル上で実行され、たくさん試してみましたコードです。 コードの問題点をご提案ください。

+0

'some default file'。これはどういう意味ですか? – Jason

+0

私はイメージのサイズと内容は何であるかということを意味しました。同じサイズの同じサイズのデフォルトファイルを毎回58kbほど作成します。たとえば、500 x 500ピクセルのイメージを作成しようとしていますが、同じデフォルトファイルが作成されます。もし私が1000x1000を再び同じようにしようとすると。だから、画像ファイルを保存する方法を理解していない可能性があります。 –

答えて

0

この理由はdjango-storagesでは、理想的には、バイト0

あなたはnew()メソッドのための枕のドキュメントで見ることができるようにファイルポインタと、ファイルのようなオブジェクトを期待し、それがImageオブジェクトを返しますが、それはファイルオブジェクトではありません。その他の参照はImageモジュールのためのGithub上のコードを以下から見ることができます。

Image.new()

Image module

は別の方法として、私はあなたの枕の画像の作成に一時ファイルを使用します。これを画像のファイルオブジェクトとして使用し、アップロードするにはdjango-storagesに渡します。

from tempfile import TemporaryFile 

temp_file = TemporaryFile() 
img = Image.new('RGB', (500, 500), (255, 255, 255)) 
d = ImageDraw(img) 
d.text(10, 10), 'Hello', font = ImageFont.truetype('tahomabd', fill = 'Black') 
d.text(10, 10), 'World', font = ImageFont.truetype('tahomabd', fill = 'Black') 
im.save(temp_file, 'JPEG') 

temp.seek(0) 
# upload to S3 using temp_file rather than image. 
# Don't forget to close all open file pointers too. 
+0

一時ファイルとは、具体的にはどういう意味ですか?ファイルをローカルに保存してからS3に転送し、ローカルコピーを削除することを意味しますか? –

+0

いつかこれを試して更新します。一時ファイルのインポートTemporaryFileから –

+0

temp_file = TemporaryFile() img.save(temp_file、 'JPEG') temp_file.seek(0) JPEG_STORAGE = storage.open(JPEG_PATH、 "W") JPEG_STORAGE.write(temp_file) temp_file.close() JPEG_STORAGE.close() 私はあなたの提案を試みましたが、結果は同じです。同じイメージが作成され、開くことはできません。破損した画像ファイルのように。 –

関連する問題