2011-09-23 14 views
5

Bir resmin boyutunu, kaydetmeden önce kontrol etmeye çalışıyorum. Onu değiştirmeye ihtiyacım yok, sadece sınırlarıma uyduğundan emin ol.Yüklenen bir dosyayı Django'daki PIL görüntüsüne dönüştürme

Şu anda dosyayı okuyabilir ve AWS'ye sorun olmadan kaydedebilirim.

output['pic file'] = request.POST['picture_file'] 
conn = myproject.S3.AWSAuthConnection(aws_key_id, aws_key) 
filedata = request.FILES['picture'].read() 
content_type = 'image/png' 
conn.put(
     bucket_name, 
     request.POST['picture_file'], 
     myproject.S3.S3Object(filedata), 
     {'x-amz-acl': 'public-read', 'Content-Type': content_type}, 
     ) 

Dosyanın doğru boyut/genişlik boyutlarına sahip olmasını sağlayan bir adım atmam gerekiyor. Dosyanm ImageField'ı kullanan bir formdan değil, gördüğüm tüm çözümleri kullanmıyor.

img = Image.open(filedata) 

cevap

1

Bunu daha önce yaptık ama benim eski parçacığını bulamıyorum gibi bir şey yapmanın bir yolu biz başımın üstünü kapatıp gidecek işte ... var mı

picture = request.FILES.get['picture'] 
img = Image.open(picture) 
#check sizes .... probably using img.size and then resize 

#resave if necessary 
imgstr = StringIO() 
img.save(imgstr, 'PNG') 
imgstr.reset() 

filedata = imgstr.read() 
+0

StringIO nesnesi, resmimi geçici olarak bellekte saklamak için eksik olduğum şeydi. Teşekkürler! – Mashakal

3
image = Image.open(file) 
#To get the image size, in pixels.  
(width,height) = image.size() 
#check for dimensions width and height and resize 
image = image.resize((width_new,height_new)) 
+0

(genişlik, yükseklik) = image.size boyut değil() –

1

kod feryat istediğiniz kadar isteğinden görüntüyü oluşturur:

from PIL import ImageFile 
def image_upload(request): 
    for f in request.FILES.values(): 
     p = ImageFile.Parser() 
     while 1: 
      s = f.read(1024) 
      if not s: 
       break 
      p.feed(s) 
     im = p.close() 
     im.save("/tmp/" + f.name)