LINUX.ORG.RU

Как вернуть измененную картинку в ответе клиенту?

 ,


1

1

class PromoPhotosHandler(tornado.web.RequestHandler):
  def get(self, id):
    if not id :
      id = "Не найден"

    file = Promos.get_photo(id)
    #fileData = file.getValue()

    self.set_header('Content-type', 'image/png')
    self.set_header('Content-length', len(file))
    self.write(file)


class Promos(object) :

  @staticmethod
  def get_photo(id) :

    text1 = u"%s" % (settings['text']['text'])

    reqCheck = requests.get('http://localhost/hsclients/hs/clients/checkpromo/?id='+id)
    print ("%s" % (reqCheck.text))

    #img = Image.new('RGBA', settings['pic']['size'], settings['pic']['bg_col'])
    img = Image.open(settings['pic']['src'])
    d = ImageDraw.Draw(img)

    if reqCheck.text.find('Не найден!') >= 0 :
      # 1) return picture with text on it
      #text = u"%s" % (settings['not_found']['text'])
      #font = ImageFont.truetype(settings['not_found']['font'], settings['not_found']['size'], encoding='unic')
      #d.text(settings['not_found']['pos'], text, fill=settings['not_found']['col'], font=font)

      img = Image.open(settings['not_found']['pic'])

    else :
      text2 = u"%s" % (reqCheck.text)
      
      font1 = ImageFont.truetype(settings['text']['font'], settings['text']['size'], encoding='unic')
      font2 = ImageFont.truetype(settings['code']['font'], settings['code']['size'], encoding='unic')

      d.text(settings['text']['pos'], text1, fill=settings['text']['col'], font=font1)
      d.text(settings['code']['pos'], text2, fill=settings['code']['col'], font=font2)

    #img.save(response, "png")
    return img

Суть - при обращении к УРЛ дергаю хттп-сервис 1Ски (не суть), оттуда строку печатаю шрифтом на заранее подготовленной картинке. Потом эту картинку нужно вернуть клиенту в браузер.

Не пойму, почему не работает. Говорит, что размер отдаваемых клиенту данных не соответствует установленному в заголовках.

Гуглил, пробовал разные варианты отдачи картинки.

Хелп.

★★★★★

Последнее исправление: bvn13 (всего исправлений: 1)

Разобрался.

Код хендлера:

    image = Promos.get_photo(id)
    #fileData = file.getValue()

    o = io.BytesIO()
    image.save(o, format="PNG")
    content = o.getvalue()

    self.set_header('Content-type', 'image/png')
    self.set_header('Content-length', len(content))
    self.write(content)
bvn13 ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.