2009-07-02 6 views
25

Jak mogę wyświetlać dynamicznie generowany obraz w Django?Udostępnianie dynamicznie generowanego obrazu za pomocą Django

Mam znacznika HTML

<html> 
... 
    <img src="images/dynamic_chart.png" /> 
... 
</html> 

połączone do tej obsługi żądania, który tworzy obraz w pamięci

def chart(request): 
    img = Image.new("RGB", (300,300), "#FFFFFF") 
    data = [(i,randint(100,200)) for i in range(0,300,10)] 
    draw = ImageDraw.Draw(img) 
    draw.polygon(data, fill="#000000") 
    # now what? 
    return HttpResponse(output) 

Zamierzam także zmienić żądania Ajax, i dodać kilka rodzaj mechanizmu buforowania, ale rozumiem, że nie wpłynie to na tę część rozwiązania.

Odpowiedz

27

zakładam używasz PIL (Python Biblioteka obrazowania). Trzeba wymienić swój ostatni wiersz z (na przykład, jeśli chcesz służyć obrazu PNG):

response = HttpResponse(mimetype="image/png") 
img.save(response, "PNG") 
return response 

Zobacz here aby uzyskać więcej informacji.

+1

Używam PIL dla tego przykładu, ale prawdopodobnie zamierzam użyć innych bibliotek, takich jak matplotlib. Powinien też działać. – pufferfish

+1

użyj content_type zamiast mime jeśli używasz Django 1.10 + – codingrhythm

3

Jestem względnie nowy dla Django. I nie były w stanie znaleźć coś w sam Django, ale mam natknął projektu na Google Code, które mogą być pomocne dla Ciebie:

django-dynamic-media-serve

+0

Dobry link, może być przydatny, gdy dojdę do etapu buforowania – pufferfish