2016-10-12 1 views
1

画像を特定のピクセルで保存したい場合、誰かがdjangoモデルに画像をアップロードすると、サイズが変更され、IDに従って保存されます。私はそれらをpath product/medium/idに保存しておきたい。私はイメージを保存するパスを定義しようとしましたが、私が必要とするパスにはありません。ここで djangoのピクセルで画像を保存する

はこれに今私のmodels.py

class Product(models.Model): 
product_name = models.CharField(max_length=100) 
product_description = models.TextField(default=None, blank=False, null=False) 
product_short_description = models.TextField(default=None,blank=False,null=False,max_length=120) 
product_manufacturer = models.CharField(choices=MANUFACTURER,max_length=20,default=None,blank=True) 
product_material = models.CharField(choices=MATERIALS,max_length=20,default=None,blank=True) 
No_of_days_for_delivery = models.IntegerField(default=0) 
product_medium = models.ImageField(upload_to='product/id/medium',null=True,blank=True) 

def save(self, *args, **kwargs): 
    self.slug = slugify(self.product_name) 
    super(Product, self).save(*args, **kwargs) 

ですが、私はイメージが、それはIDが取得し、パスに保存サイズを変更したいproduct/medium/id/image.jpg

答えて

0
from PIL import Image 
import StringIO 
import os 
from django.core.files.uploadedfile import InMemoryUploadedFile 


class Product(models.Model): 
    pass # your model description 

    def save(self, *args, **kwargs): 
     """Override model save.""" 
     if self.product_medium: 
      img = Image.open(self.image) 
      size = (500, 600) # new size 
      image = img.resize(size, Image.ANTIALIAS) #transformation 
      try: 
       path, full_name = os.path.split(self.product_medium.name) 
       name, ext = os.path.splitext(full_name) 
       ext = ext[1:] 
      except ValueError: 
       return super(Product, self).save(*args, **kwargs) 
      thumb_io = StringIO.StringIO() 
      if ext == 'jpg': 
       ext = 'jpeg' 
      image.save(thumb_io, ext) 

      # Add the in-memory file to special Django class. 
      resized_file = InMemoryUploadedFile(
       thumb_io, 
       None, 
       name, 
       'image/jpeg', 
       thumb_io.len, 
       None) 

      # Saving image_thumb to particular field. 
      self.product_medium.save(name, resized_file, save=False) 

     super(Product, self).save(*args, **kwargs) 
関連する問題