2013-03-20 39 views
9

Trong Django, có thể thay đổi (đổi kích thước) hình ảnh đã tải lên trước khi được lưu vào đĩa không? Tôi muốn làm điều này mà không cần sử dụng bất kỳ ứng dụng bổ sung nào.Django thay đổi kích thước hình ảnh trong khi tải lên

+3

[Bạn đã thử gì?] (Http://whathaveyoutried.com) – arulmr

+0

Sử dụng PIL cho công việc: http://stackoverflow.com/questions/273946/how-do-i-resize-an -image-using-pil-and-maintain-aspect-aspect-tỷ lệ –

+0

bạn cần phải sử dụng một thư viện bên ngoài hoặc một ứng dụng để đạt được điều đó như django không có bất kỳ phương pháp được xác định trước cho những gì bạn đang tìm kiếm để làm. – Amyth

Trả lời

19

Tôi đã cảm thấy khó chịu mà tôi không thể tìm thấy một ví dụ làm việc hoàn tất, chỉ bit ở đây và ở đó. Tôi đã tự mình cùng nhau giải quyết. Dưới đây là ví dụ hoàn chỉnh, tôi đặt nó trong phương thức clean() của biểu mẫu (bạn cũng có thể ghi đè lên mô hình phương thức save(), theo cách hoàn toàn - thay đổi thuộc tính tệp của ImageField).

import StringIO 
from PIL import Image 

image_field = self.cleaned_data.get('image_field') 
image_file = StringIO.StringIO(image_field.read()) 
image = Image.open(image_file) 
w, h = image.size 

image = image.resize((w/2, h/2), Image.ANTIALIAS) 

image_file = StringIO.StringIO() 
image.save(image_file, 'JPEG', quality=90) 

image_field.file = image_file 
+0

Cảm ơn ví dụ này nhưng tôi không hiểu mọi thứ ... "Thông tin" là gì? Nếu không, trong python 3.x nó là io.StringIO (...) – HydrUra

Các vấn đề liên quan