为Django测试生成内存映像

Jas*_*sta 12 python django django-testing

是否可以生成用于测试目的的内存中图像?

这是我目前的代码:

  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)
Run Code Online (Sandbox Code Playgroud)

Edu*_*nec 14

要生成200x200纯红色测试图像:

import Image
size = (200,200)
color = (255,0,0,0)
img = Image.new("RGBA",size,color)
Run Code Online (Sandbox Code Playgroud)

要将其转换为类文件对象,则:

import StringIO
f = StringIO.StringIO(img.tostring())
Run Code Online (Sandbox Code Playgroud)

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


dsh*_*hap 11

在Django 1.5中,Jason接受的答案对我不起作用

假设生成的文件ImageField要从单元测试中保存到模型中,我需要更进一步,创建一个ContentFile以使其工作:

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')
Run Code Online (Sandbox Code Playgroud)


Jas*_*sta 1

感谢爱德华多的帮助,我找到了一个可行的解决方案。

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)
Run Code Online (Sandbox Code Playgroud)