2011-12-23 26 views
10

Có thể tạo hình ảnh trong bộ nhớ cho mục đích thử nghiệm không?Tạo hình ảnh trong bộ nhớ để kiểm tra Django

Đây là mã hiện tại của tôi:

def test_issue_add_post(self): 
     url = reverse('issues_issue_add') 
     image = 'cover.jpg' 
     data = { 
      'title': 'Flying Cars', 
      'cover': image, 
     } 
     response = self.client.post(url, data) 
     self.assertEqual(response.status_code, 302) 
+0

im dốt nát của django, nhưng client.post mong đợi cho một hình ảnh là gì? một tệp như đối tượng? một chuỗi byte? – dskinner

+0

@dskinner Một đối tượng giống như tệp –

Trả lời

1

Nhờ giúp đỡ từ Eduardo , Tôi đã có thể nhận được một giải pháp làm việc.

from StringIO import StringIO 
import Image 

file = StringIO() 
image = Image.new("RGBA", size=(50,50), color=(256,0,0)) 
image.save(file, 'png') 
file.name = 'test.png' 
file.seek(0) 
3

Vì vậy, nếu client.post đang mong đợi một tập tin như đối tượng, bạn có thể tạo ra một hình ảnh ví dụ (nếu bạn muốn trực quan kiểm tra kết quả sau khi xét nghiệm) hoặc chỉ làm cho một 1px png và đọc nó ra từ console

open('1px.png', 'rb').read() 

mà trong trường hợp của tôi đổ ra

image_data = '\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x01\x00\x00\x00\x01\x08\x02\x00\x00\x00\x90wS\xde\x00\x00\x00\x01sRGB\x00\xae\xce\x1c\xe9\x00\x00\x00\tpHYs\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\x00\x00\x00\x07tIME\x07\xdb\x0c\x17\x020;\xd1\xda\xcf\xd2\x00\x00\x00\x0cIDAT\x08\xd7c\xf8\xff\xff?\x00\x05\xfe\x02\xfe\xdc\xccY\xe7\x00\x00\x00\x00IEND\xaeB`\x82' 

sau đó bạn có thể sử dụng StringIO hoạt động như một tập tin như đối tượng, vì vậy ở trên, hình ảnh sẽ là

from StringIO import StringIO 

def test_issue_add_post(self): 
    ... 
    image = StringIO(image_data) 
    ... 

và bạn sẽ có một tập tin như đối tượng với các dữ liệu hình ảnh

0

Bạn đã sử dụng các mô-đun PIL? Nó cho phép bạn thao tác hình ảnh - và cũng nên cho phép tạo.

Trong thực tế, đây là một blog entry với một số mã nào đó http://bradmontgomery.blogspot.com/2008/07/django-generating-image-with-pil.html

Dont biết liệu bạn kiểm tra máy có kết nối internet, nhưng bạn cũng có thể kéo xuống hình ảnh ngẫu nhiên từ google để thay đổi dữ liệu thử nghiệm?

14

Để tạo ra một hình ảnh 200x200 thử nghiệm của màu đỏ rắn:

import Image 
size = (200,200) 
color = (255,0,0,0) 
img = Image.new("RGBA",size,color) 

Để chuyển đổi nó vào đối tượng tập tin giống như, sau đó:

import StringIO 
f = StringIO.StringIO(img.tostring()) 

http://effbot.org/imagingbook/image.htm

+0

đây cũng là một lựa chọn tốt nếu PIL được cài đặt – dskinner

8

câu trả lời chấp nhận của Jason không hoạt động đối với tôi trong Django 1,5

Giả sử các tập tin được tạo ra là để được lưu vào một ImageField từ bên trong một thử nghiệm đơn vị mô hình, tôi cần phải mang nó một bước xa hơn bằng cách tạo một ContentFile để làm cho nó làm việc:

from PIL import Image 
from StringIO import StringIO 

from django.core.files.base import ContentFile 

image_file = StringIO() 
image = Image.new('RGBA', size=(50,50), color=(256,0,0)) 
image.save(image_file, 'png') 
image_file.seek(0) 

django_friendly_file = ContentFile(image_file.read(), 'test.png') 
1

Trong Python 3

from io import BytesIO 
from PIL import Image 

image = Image.new('RGBA', size=(50, 50), color=(155, 0, 0)) 
file = BytesIO(image.tostring()) 
file.name = 'test.png' 
file.seek(0) 
Các vấn đề liên quan