2011-12-23 9 views
10

¿Es posible generar una imagen en la memoria con fines de prueba?Generar imagen en memoria para la prueba de Django

Aquí está mi código actual:

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 ignorante de django, pero ¿qué es client.post esperando una imagen? un archivo como objeto? una cadena de bytes? – dskinner

+0

@dskinner Un objeto similar a un archivo –

Respuesta

1

Gracias a la ayuda de Eduardo , Pude obtener una solución de trabajo.

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

Así que si client.post está esperando un archivo como objeto, se puede crear una imagen de ejemplo (si se desea comprobar visualmente como resultado después de las pruebas) o simplemente hacer una 1px png y leyó en voz desde la consola

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

que en mi caso objeto de dumping a cabo

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' 

entonces usted puede utilizar StringIO que actúa como un archivo como objeto, por lo anterior, la imagen sería

from StringIO import StringIO 

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

y que tendrá un archivo como objeto con los datos de imagen

0

¿Ha utilizado el módulo PIL? Te permite manipular imágenes, y también debe permitir la creación.

De hecho, esta es una entrada de blog con algo de código que lo hace http://bradmontgomery.blogspot.com/2008/07/django-generating-image-with-pil.html

No saber si usted probar la máquina tiene una conexión a Internet, pero también se podría tirar hacia abajo las imágenes al azar de Google para variar los datos de prueba?

14

para generar una imagen de 200x200 prueba de color rojo fijo:

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

para convertirlo en un objeto de tipo fichero, entonces:

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

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

+0

esta es una buena opción también si se instala PIL – dskinner

8

respuesta aceptada de Jason no está funcionando para mí en Django 1.5

Suponiendo que el archivo generado se va a guardar a la ImageField desde dentro de una unidad de prueba de un modelo, que tenía que dar un paso más allá mediante la creación de un ContentFile a conseguir que funcione:

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

En 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) 
Cuestiones relacionadas