артефакты из-за пережатия в jpeg

Bug #457582 reported by Alex Turowskiy
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
Vkontakte Tool
Fix Released
Low
Unassigned

Bug Description

        #scale it for full view (in any case)
        (w, h) = image.size
        new_h = int(GRAFFITI_FULL_SIZE_W * h / w)
        if GRAFFITI_FULL_SIZE_W < w:
            self._full_image = image.resize((GRAFFITI_FULL_SIZE_W, new_h), PIL.Image.ANTIALIAS)
        else:
            self._full_image = image.resize((GRAFFITI_FULL_SIZE_W, new_h), PIL.Image.BICUBIC)
        stream = StringIO.StringIO()
        self._full_image.save(stream, "JPEG")
        self._full_image_data = stream.getvalue()

        #scale it for wall size (in any case)
        if GRAFFITI_THUMB_SIZE_W < w:
            self._wall_image = image.resize((GRAFFITI_THUMB_SIZE_W, GRAFFITI_THUMB_SIZE_H), PIL.Image.ANTIALIAS)
        else:
            self._wall_image = image.resize((GRAFFITI_THUMB_SIZE_W, GRAFFITI_THUMB_SIZE_H), PIL.Image.BICUBIC)
        stream = StringIO.StringIO()
        self._wall_image.save(stream, "JPEG")
        self._wall_image_data = stream.getvalue()

Соответственно, картинка пережимается в jpeg, а затем из jpeg — в png уже самим контактом (графити хранятся на сервере в png). В результате появляются артефакты, как например на такой картинке: http://cs9663.vkontakte.ru/u898061/l_a9e28045.png
Если же изменить в коде JPEG на PNG, то результат такой: http://cs9721.vkontakte.ru/u898061/l_ad22b6c6.png
Если есть какие-то причины для такого пережатия, то, я считаю, стоит добавить проверку, чтобы png нужного размера не пережималось?

Revision history for this message
Alexey Osipov (lion-simba) wrote :

Помнится, я пробовал ставить там PNG и у меня что-то не работало.

У вас нормально работает?

Насчет того, что можно не пережимать подходящие PNG - согласен.

Мне сейчас слегка некогда заниматься проектом. Сделайте патч, потестируйте и прикрепите сюда. Я внесу в основную ветку.

PS. Вообще утилита нормально работает? Графити сама подтверждает или приходится заходить через браузер и тыкать кнопку "Отправить графити"?

Changed in vkontakte-tool:
importance: Undecided → Low
status: New → Confirmed
Revision history for this message
Alex Turowskiy (a-turowskiy) wrote :

Эээ... Я, увы, не умею делать патчи. Просто в graffiti.py в вышеприведенном куске кода надо исправить в

self._full_image.save(stream, "JPEG")

и

self._wall_image.save(stream, "JPEG")

JPEG на PNG.
У меня все работает нормально, графити не нужно подтверждать.

Revision history for this message
Alexey Osipov (lion-simba) wrote :

Выложил исправление кода на ланчпад:
- отправка теперь в PNG;
- PNG нужной ширины теперь не пережимается вообще.

Однако, прозрачные PNG вконтакт не принимает - прозрачность заменяется черным цветом.

Релиз будет позже.

Changed in vkontakte-tool:
status: Confirmed → Fix Committed
Changed in vkontakte-tool:
status: Fix Committed → Fix Released
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.