Блог gigimon'а

Отдаем сгенерированную картинку сайту без сохранения

Хочу рассказать немного про генерацию картинок и их отдачу на лету, с помощью 1 примера, где надо было генерирвоать по полученым параметрам (от js) картинку и отдавать ее - эта картинка становилась фоном. Если о генерации ее вопросов не было, появился вопрос о том, как ее отдать. На 1 англйиском сайте нашел простео объяснение, что можно отдавать в request. И так, пример: В html страничке, делаем такой скрипт:

var height = innerHeight;
var width = innerWidth;
document.body.background = "/utils/genback/?width="+width+"&height="+height;
document.body.style.backgroundAttachment = 'fixed';
document.body.style.backgroundPosition = 'right center';

Он узнает размера окна браузера и передает их скрипту по адресу /utils/genback/?width=”+width+”&height=”+height;  с помощью GET запроса. В ответ получает картинку и устанавливает ее фоном. На стороне сервера имеем вот такой скрипт: /utils/genback/?width=”+width+”&height=”+height;

На стороне сервера у нас такой скрипт:

#-*-coding:utf8-*-
from PIL import Image, ImageDraw
from django.http import HttpResponse

def generation_background(request):
    if request.method == 'GET':
        screen_width = int(request.GET['width'])
        screen_height = int(request.GET['height'])
    else:
        screen_width = 1024
        screen_height = 768
    COLOR = (240, 239, 239, 128)
    image = Image.new("RGBA", (screen_width, screen_height), (0,0,0,0))
    draw = ImageDraw.Draw(image)
    draw.ellipse((100, -10, 100+screen_width, -30+screen_width), fill=COLOR, outline=COLOR)
    del draw
    response = HttpResponse(mimetype="image/png")
    image.save(response, 'PNG')
    return response

Данный скрипт, получает из GET запроса размеры, генерирует по ним фон (круг), устанавливает тип запроса image/png:  response = HttpResponse(mimetype=”image/png”),  сохраняет картинку в request и возвращает ее.

Конечно специалисты и так знают, а новичкам в django будет помощь :)

2008 — 2018