2017-10-23 3 views
0

これを保存すると、画像のサイズを変更しようとしています。具体的には、私のイメージはAmazon S3の上に格納されている は、その後、私はそのような次のようにアクセスもURLを持つ、Amazon S3の画像(サムネイル)のサイズ変更 - Django

画像が保存される

が、これは私のAmazon S3バケットに格納されdjango-storagesboto3サードパーティ製のアプリケーションを使用します。

class UploadStudyOffer(models.Model): 
    study_offer = models.ForeignKey(StudiesOffert, related_name='uploadsstudyoffer') 
    image = models.ImageField(upload_to=get_image_path) 
    # images folder per object 

    def save(self, *args, **kwargs): 
     super(UploadStudyOffer, self).save(*args, **kwargs) 
     # We first check to make sure an image exists 
     if self.image: 
      # Open image and check their size 
      image = Image.open(self.image) 
      i_width, i_height = image.size 
      max_size = (100,100) 

      # We resize the image if it's too large 
      if i_width > 1000: 
       image.thumbnail(max_size, Image.ANTIALIAS) 
       image.save(self.image.path) 

私は画像をアップロードすると、私はこのメッセージを得る:

https://s3-sa-east-1.amazonaws.com/ihost-project/media/studyoffer_images/algoritmos-para-ensenanza/15061122523583.jpg

保存した画像のサイズを変更するコードはこれです

Exception Type: NotImplementedError at /host/study-offer/algoritmos-para-ensenanza/edit/images/ 
Exception Value: This backend doesn't support absolute paths. 

とエラーがstoragesまたはbotoバックエンドで、またはPillowで管理されている場合、私は、わかりません。

image.save(self.image.path) 

へ:

image.save(self.image.name) 

そして

私はセクションコードを変更: はその後Pillowのレベルで私は、次のように、の瞬間に次のオプションは、画像を保存しましたこのエラーが発生する:

File "/home/bgarcial/workspace/hostayni_platform/hosts/models.py" in save 
    542.     image.save(self.image.name) #[Errno 2] No such file or directory: 'studyoffer_images/ingenieria-de-sistemas/15061122523583.jpg' 

File "/home/bgarcial/.virtualenvs/hostayni/lib/python3.6/site-packages/PIL/Image.py" in save 
    1725.    fp = builtins.open(filename, "w+b") 

Exception Type: FileNotFoundError at /host/study-offer/algoritmos-para-ensenanza/edit/images/ 
Exception Value: [Errno 2] No such file or directory: 'studyoffer_images/algoritmos-para-ensenanza/1900-X-1080-Wallpapers-022.jpg' 

もちろん、私のイメージ

私は

image.save(self.image.url) 

image.save(self.image.name) 

を変更し、私はこれを取得:OMアマゾンS3はなく、ローカルに私のプロジェクトやハードディスクで、その後、私はこの方法のurlパラメータを使用して保存されていますエラー:

Exception Type: FileNotFoundError at /host/study-offer/algoritmos-para-ensenanza/edit/images/ 
Exception Value: [Errno 2] No such file or directory: 'https://s3-sa-east-1.amazonaws.com/ihost-project/media/studyoffer_images/algoritmos-para-ensenanza/15061122523583.jpg' 

アマゾンのs3イメージURLの取得は動作しません。彼URLが有効なURL https://s3-sa-east-1.amazonaws.com/ihost-project/media/studyoffer_images/algoritmos-para-ensenanza/15061122523583.jpg

ですその後、私はに

image.save(self.image.url) 

を変更:

image.save(self.image.file) 

そして、私のイメージがエラーなしでアップロードされますが、リサイズされていないと、元の形式としてアップロードされます。

アプリケーションからアップロードした画像を処理する方法とその結果はAmazon S3で使用後に保存されましたか?

+1

あなたが試すことができ'image = Image.open(self.image)'の代わりに 'image = Image.open(self.image.path)'を実行してください。保存方法を変更しないでください – ruddra

+0

@ruddra推奨事項に感謝しますが、同じ状況が私に起こります:) – bgarcial

答えて

1

easy_thumbnailsアプリを使いやすくすることができます。

あなたはあなたがそれを行うことができ、その後、保存上の画像をトリミングしたい場合:

from easy_thumbnails.fields import ThumbnailerImageField 

CROP_SETTINGS = {'size': (1000, 500), 'crop': 'smart'} 

class UploadStudyOffer(models.Model): 

    image =ThumbnailerImageField(upload_to=get_image_path, 
             resize_source=CROP_SETTINGS) 

それとも、手動でテンプレートに画像のサイズを指定することができます。

{% load thumbnail %} 

<img src="{% thumbnail offer.image 1000x500 crop %}" alt="" /> 
+0

定義フィールドの私のモデルのトリミングイメージ(最初のオプション)で、私はこのエラーを受け取ります 'Exception Type:TypeError 例外値: 'str'オブジェクトはアイテム割り当てをサポートしていません。 – bgarcial

+0

しかし、テンプレートにサムネイルを手動で指定していますが、これはレンダリングされません。私はこれを指定します: ' ' – bgarcial

+0

1. app、変更されたフィールド、マイグレーションをインストールしましたか?どのラインにこのエラーがありますか? –

関連する問題