Пользователь
0,0
рейтинг
17 января 2012 в 04:44

Разработка → Картинки в чате skype

image

Оказывается, в чате скайпа работают некоторые HTML-теги, в том числе и <font color="">
Благодаря этому возможно создавать несложные картинки в тексте сообщений.

Список поддерживаемых в скайпе тегов www.wikireality.ru/wiki/HTML_в_Скайпе
Для того чтобы оправить HTML-код в чате нужно зажать CTRL+SHIFT и кликнуть на кнопку отправки сообщения.

Код картинки pastebin.com/raw.php?i=z4EspzjC

Ниже показан пример генерации HTML-кода из изображения на PHP.



$imgw = imagesx($img);
$imgh = imagesy($img);
$ratio = $imgw/$imgh;
$newh = floor(sqrt(800 / $ratio));
$neww = floor($ratio * $newh);

$newimg = imagecreatetruecolor($neww, $newh);
imagecopyresampled($newimg, $img, 0, 0, 0, 0, $neww, $newh, $imgw, $imgh);
imagedestroy($img);
$out = '<font size="1"><u>';
for($j = 0; $j < $newh; $j++) {
	for ($i = 0; $i < $neww; $i++) {
		$color = imagecolorat($newimg, $i, $j);
		$out .= '<font color="#'.strtoupper(dechex($color)).'">███</font>';
	}
	$out .= "\n";
}
$out .= '</u></font>';
echo $out;


Код достаточно примитивный, потому как обрабатывается каждый пиксель, даже если подряд идут несколько пикселей одного цвета. Если оптимизировать код, таким образом, чтобы генерировать более компактный HTML, возможно создавать картинки более высокого разрешения. Всё упирается в максимальный размер сообщения в skype — 29,999 символов (символ █ считается за три обычных).

Внимание, при большом количестве таких картинок skype начинает сильно тормозить, спасает только очистка истории. Поэтому лучше удалять сообщение с картинкой.

image

Работает только в Windows версии.

Попробовать можно тут img4skype.com

P.S. Будем рады если кто-то сможет оптимизировать код для генерации картинок бОльшего разрешения.

UPD: sergey_dobrodey Написал версию на .NET с возможностью создавать картинки 40х40 пикселей но с инвертированием цветов github.com/sergeydobrodey/SkypeImage

UPD: aruz Написал реализацию на .NET генерирующую оптимизированный HTML-код с возможностью регулировать конечный размер и возможностью уменьшение количества цветов github.com/aruz/img4skype
Это позволило создавать огромные картинки (первая сгенерирована моим алгоритмом) image

UPD: В новой версии скайпа 5.8.0.154 больше нет возможности отправлять HTML. Но при этом код отправленный с версии младше, отображается в новой версии нормально. Для отправки кода нужна версия ≤5.7
Павел Жовнер @zhovner
карма
172,0
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Разработка

Комментарии (147)

  • –48
    Спрашивается — зачем? Ведь они тег img поддерживают.
    • +24
      Это ложное утверждение.
      • –14
        О как, так img не пашет? Любопытно. Сорри тогда.
        • +42
          Ну ладно, ладно, хватит меня минусовать то :) Я вот вам подарю тег, который нигде не документирован :)

          <quote author="skype_id" authorname="DisplayedName" 
          conversation="ConversationName" timestamp="unixTimestamp">
          <legacyquote>[19:32:45] DisplayedName: </legacyquote>Quoted text</quote>
          
          • 0
            Круто, спасибо!
            • +10
              Примечание: то, что в legacyquote отображается в Линукс-версии Скайпа при цитировании. Видимо, в него не приделали полный обработчик всех параметров тега quote.

              Таким образом кстати можно создавать скрытые мессаги только для Линуксоидов или обладателей старых клиентов:

              <quote><legacyquote>Скрытый текст</legacyquote></quote>
              
          • +4
            Добавил в Вики по ссылке в топике
          • 0
            Очень круто!
      • +6
        Между прочим, у меня получалось слать некоторые картинки, которые отображались в мак-версии скайпа. Картинки кодировал в base64. Например, вот так:

        <img alt="2" width="16" height="16" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAMsSURBVDhPbZNrSFNhGMffT5Hlcpc8G0ERhWRlZUGBpNBdyqAvTTMriwq7jIjCD2JGBEWUQfd75iydlU2bSRdDLWZrRoqXza1tZ5uucq6cy1s7W/v3nlNGtw8/3j//93n+D+fwvAQA+R3zKSIatoiVQ9bp6kHrTOOAeZYx0Bav7muSKg0qIvq7/o9mfyNJDnoS9OHATkSCZxAJl/4geBbcp50ImObonWUk+feQXwFD5ihVqHclF+FOApEyfAvdQSR0m54lggY0iHAnMGhbynkex6hGQ4QA30uSxHlXAt8uwP+hEJ+7jgGhiwiPnBPgNe/1fyyk4WcQ6FyGtoskie8lbCn9Ztc8A7gjsOr34JpqNq7sikdzzSaATuRprskSPP7u3as9wNdD8BoSDQ/yiYgMdERnhvvS4TDmQJ2bgD5WhSHvAWgK5qOzPouyEZrDCwTvM7sXxblzwDbtwIhnI5y6aZmkv3lM8aBrBXyd2/HJkg2udxeCFL9jG7ymTZQs+O3bEPTmgPPths+aTeu2YtiTDbZyupoMd4w1tmtj4W5cglDPZgTsGxCwpWPAuQEDbAYGf/LFno4v9gyEaU2XYR1atXHoeiR7S/qaoo3uuomoPi6F6eFcjNhXIWBZi35zGvzmNfRcTVkjeF/ZNJhrFqPy6CQ4ayWwlknekp6G6GJfoxw2XSzKDopxP0+B5oo4dNYlwNqwgLKQ/odEtGhn4l7eZJTsE8NSKQPf035DoiY9daLMj89l6Hkuh+epHPXnaYhyMqqWx6MydQYlHlUraPP6Kag9HYPuJwx6GxRwVzNovSTNJNbyKNGHZzGGbh0Dd5Uc71/I4M9ZhOFFaRhalirAa97j77p0cnTrFDDflBmKdowVCYvk1o1L8lRL4LzHwEWDzPun4vWU2TDGzRLgtYl6/FS3VgGLeiIa8sf/WKTRlXRqY1QurTTkoiHsfQavtzComaYQMGyRw1ERSwfQyUWykPHkhD9XeTTEphGnsHelekd5LOzlDN6VUO4wcGgY2KhuuyzVvygYl/LfxzRq1h4WiUxFUmXHdam67arY2HKBck6sflMoUd5K/fc5fwexObaibZ5vTgAAAABJRU5ErkJggg%3D%3D" />
        

        • +2
          Если Ваша картинка — это знак вопроса, то это работает и в винде.
          • 0
            Нет, под виндой все картинки отображаются как знак вопроса. Меняется только размер этого знака вопроса, в зависимости от картинки, причём максимальный размер, насколько я помню, — 96x96.
            • 0
              но отображаются же, может как то можно сделать нормально картинку?
  • +6
    заходя в топик ожидал увидеть про , но оказался приятно удивлен, спасибо.
    • 0
      тег сожрался <[img /]> конечно же.
  • +8
    Месье знает толк.
    • +1
      Я помнится граффити вконтактике похожим образом рисовал ) Тогда ещё картинки нельзя было вставлять.
  • 0
    При загрузке некоторых картинок глючат цвета. Например синий внезапно сорвался в ярко красный.
    Сейчас попробую натыкать зависимость.
    • 0
      Да, есть проблемы с обработкой PNG.
      • 0
        У меня такое из .jpg лезет тоже.
    • 0
      да. Черный имеет свойство внезапно выскакивать в другие цвета, близкие к красному.
      • +4
        fixed
  • +5
    В линуксовом, увы, показывать отказывается.
    • +3
      Но отправлять даёт.
      • +3
        И получать видит обработанный html или плейнтекст?
        • 0
          * получатель
        • +4
          Получатель на Windows-версии видит обработанный html. Я, конечно, предполагаю, что
          • +10
            можно распарсивание этого прикрутить к SkypeTab, но сейчас времени нет, сессия-с.
            • +11
              Реквестую люто бешено. С меня печенье.
              • +4
                После небольшого исследования было выявлено, что виджет сообщений — это не QTextEdit и уж тем более не QWebView, а какой-то велосипед, в работу которого весьма проблематично вмешаться.
  • 0
    Внимание, при большом количестве таких картинок skype начинает сильно тормозить, спасает только очистка истории. Поэтому лучше удалять сообщение с картинкой.

    Каким образом можно удалить чужое сообщение (с картинкой или без)?
    • +4
      Это можно делать только в конференции, елси есть права модератора. Добавьте в разговор еще кого-нибудь и вы станете мастером, сможете удалить. Такие вот костыли.
      • +4
        Свои сообщения можно удалять везде.
  • +3
    В линуховом скайпе не работает.
    • –6
      не работает. Чёрные полосы.
  • –24
    Хостинг — 200. Защита от DDoS — 30 к. Удивить Татьяновича — бесценно! Есть вещи, которые нельзя купить. Для всего остального есть MasterCard.
  • +5
    Поставьте проверку наличия 6 символов в результирующем hex, иначе врёт цвета, значение которых ниже 1048575
    • +2
      done
  • 0
    В версии под мак есть возможность так делать?
    • +2
      Работает только в Windows версии.
      • +7
        А слона-то я и не приметил =)
    • 0
      Не знаю как насчет делать, но просматривать точно можно :)
      Скайп-румы заполонили
      • 0
        У вас какая версия? Пятая? Покажите скриншот
        • +1
          Версия скайпа 5.4.0.1217. Причем если отсылать сообщения с помощью api скайпа (ruby gem skype-rb) то теги обрабатываются.
          В предыдущем коменте тег IMG не отобразился, видимо нехватает кармы :)
          img.hambr.com/photos/troll-face-on-mac.png
          • 0
            Получается что без api отправить нельзя?
  • +15
    image
    • 0
      Реквестую Богунова
    • –3
      ничего так, я бы даже сказал заебок.
  • 0
    В версии 5.5.0.124 на Windows 7 не работают ни какие теги.
    • +47
      вы ctrl+shit зажать на забыли перед отправкой?
      • +16
        *Вы *shift поторопился
        • +26
          Предыдущий вариант мне понравился больше :)
      • +3
        О спасибо, действительно, я их просто нажимал, как написано в вики в посте, а не зажимал :)
      • +4
        Жалко больше одного плюса поставить нельзя.
    • +6
      Это неправда, попробуйте перед отправкой зажать CTRL+SHIFT и нажать _мышкой_ на кнопку отправки сообщения.

      Например вот такого <blink><font size=«60»color="#ff0000">привет</font></blink>
      • +7
        убил бы за такое сообщение
  • +1
    Интересно, как это отправить на маке, где кнопка отправки сообщения отсутствует.
  • НЛО прилетело и опубликовало эту надпись здесь
  • +1
    круто. Только картинок-примеров должно быть намного больше
    • 0
      Можете загрузить свои
    • +26
      Ок
      • 0
        мороженное? )
      • 0
        Удалили файл.
  • +5
    Обалденно, баловство начинается.
    Единственное, что огорчает — станет больше возможностей у спамеров, подменяющих ссылки. Например wikipedia.org (одна буква удалена, просто пример)
    • +2
      Коды «проглотились»

      Пример <а href="http://wkipedia.org">wikipedia.org</а> (одна буква удалена, просто пример)
      • +2
        да это пипец не продумали
      • 0
        у меня, как ни потей, ссылка такая не отправляется. Но никто не мешает делать так:
        vkont<font color='#ffffff' size='1'>l</font>akte.ru/coolgirl
        • 0
          И впрямь не отправляется. Зато такое работает:

          <a href=«xnxx.com»>wikipedia.org</a>

          Если не отправляет попробуйте руками написать и отправить, не знаю почему но при копипасте иногда не хочет.
          • +1
            Да, действительно, без http у href отправилось. Но в целом, палится при наведении, так что при должной бдительности попасться сложно.
          • 0
            Скобки не типографические надо. Сам сначала задумался
  • 0
    image
    • +5
      Странно, у меня лучше выглядит

      image

      Он ведь с помощью IE отрисовывает. У тебя какая версия ie?
      • +4
        я из превью запостил, а не из скайпа.
      • +2
        Зависит от шрифта.
  • +2
    Господа, вы извращенцы. В хорошем смысле этого слова :)
  • +1
    Блин, ЗАЖИМАЮ Ctrl+Shift и с ЗАЖАТЫМИ клавишами мышкой давлю на кнопку отправки. Ничего не отправляется. ЧЯДНТ?
    • +6
      вставить код не забыл?
      • 0
        Не забыл :)
    • +1
      Не закрытый парный тег? Превышен размер максимального сообщения? Версия скайпа какая?

      А такое работает: <blink>test</blink>
      • 0
        Разгадал секрет — при копи-пасте отсюда кавычки разные + пропущен пробел. Так что — скорее всего скайп проверяет сообщение на интерпретируемость перед отправкой
  • 0
    А как насчет компрессии цветов? Вместо #ffffff можно писать #fff; вместо #f00 можно писать red. Код такой компрессии можно подсмотреть в любом css minier'е
    • +1
      Нельзя, скайп понимает только числовую запись и только в полном виде.
    • 0
      > P.S. Будем рады если кто-то сможет оптимизировать код для генерации картинок бОльшего разрешения.
      • 0
        Случайно нажал отправить

        > P.S. Будем рады если кто-то сможет оптимизировать код для генерации картинок бОльшего разрешения.

        Если пиксели с одинаковым цветом идут подряд, то можно не создавать для каждого тег font, а объединять в один тег
        • 0
          Это очевидно, я про это писал. Еще можно не окрашивать черный пиксель, потому что он и так черный.

          Но проблема в том как определить заранее до ресайза максимальный размер с учетом повторяющихся и черных пикселей.
      • +1
  • 0
    Хм, а можно ли используя функцию правки сообщений таким образом создать анимацию? :D
    • 0
      Да можно с помощью API, где-то на github даже был готовый пример. Правда время пока можно редактировать или удалить сообщение ограничено.
  • 0
    Скайп замечательная вещь, каждый день находится что-то новое
    • +18
  • –20
    Пользуясь случаем, сообщаю, что картинку в скайп можно вставить тупо из буфера обмена, т.е ножницами что угодно откуда угодно — контрол це, а в окне сообщения скайпа — контрол вэ.

    Изобрели тут, паааанимаеш, колесо…
    • +10
      Это ложно утверждение. Если вставить из буфера обмена она будет переслана как файл.
    • +3
      ану-ану?
      • +2
        только что проверил — на Windows отправляет файл изображения.
  • +4
    Походу сегодня будет неумышленный DDos скайпа…
  • +8
    Пользуясь случаем, рекламирую мой юзер-скрипт, который преобразует код, подсвеченный в Source Code Highloghter, в HTML, который нормально отображается в скайпе.

    Теперь, если писать кому-то отрывки кода в скайпе, то его будет намного удобнее читать.

    userscripts.org/scripts/review/114459

    Тестировалось в Хроме.
    • 0
      Добавляет кучу ?nbsp? в код и сообщение в скайпе становиться не читаемым
      firefox, Chrome, VS2010, C#, Skype 5.5.0.124
      • 0
        А кнопку «Transform for Skype» вы нажали? Юзер-скрипт установили?
        Source Code Highlighter это ведь не мой сервис. А мой — только юзерскрипт, который трансформирует результат, полученный в Source Code Highlighter.
  • +1
    Вспомнились цветные японские кроссворды
  • +23
  • +1
    Реквестирую блекджек на html5 и набор фотографий распутных женщин в качестве смайликов.
  • +6
    Я топикстартера уважаю и ненавижу одновременно, у меня половина рабочих чатов превратились в комиксы :)
    • +5
      image
  • 0
    У меня все пробелы, генерируемые скриптом при вставке в окно скайпа превращаются в квадратики. Что я делаю не так?
    • 0
      Забываете при отправке зажать CTRL+SHIFT? Там и должны быть квадратики.
      • +2
        Не забываю. А из-за чего тогда растягивается картинка? Я думал из-за квадратов…
        img407.imageshack.us/img407/2104/stretch.jpg

        • 0
          Windows XP?
          • 0
            Да
            • +3
              А что вы тут видите: ↑ ↓ ® •

              Шрифтов нет, советую использовать Windows 95.
              • 0
                Стрелочки всякие. Но вот с тем символом засада… Странно, что я один с такой проблемой.
                • 0
                  Не один )
  • +3
    Мать вашу, работа встала… :(
  • 0
    Для мак версии skype есть интересная штука — skypestyles.com
    Учитывая, что это все на html, то, думаю для вин версии не проблема сделать.
    Это так, к слову об HTML :)
  • 0
    Пошел скачивать skype для windows под виртуалкой.
  • 0
    Осталось раскрутить на уязвимость. Например, на выполнение произвольного кода)
  • +4
    Написал свой вариант на .NET. В данный момент адекватно работает с разрешнием 40х40.
    Ниже в сравнении с оригиналом.
    image
    • +1
      И логотип Android.
      image
      • 0
        Терехов Павел негодуе…
      • +1
        Не много улучшил вашу версию (более лучше работает с градиентами)


        http://pastebin.com/u020raes

        надо ещё с максимальным размером сообщения поиграться, т. к. похоже не всегда разрешено 30 000 символов.
        • 0
          Отличная работа!
          Количество символов обратно зависит от количества █ в сообщении.
          • 0
            Почему так? Разве в юникоде не все символы по два байта? ASCII символов можно отправить ровно 29,999, а юникодовых не понятно сколько. Еще у некоторых в том числе и в Windows 7 вместо этого символа квадратик, из-за чего картинки растянуты.
            • 0
              Не знаю сколько он точно весит, но для Skype он равен размеру 3-х символов.
          • 0
            Обновил код с вашей «не много» улучшенной версией, с учетом того, что █ занимает 3 символа.
            • 0
              Нужна еще галочка «уложиться в максимум символов» а то часто получается код который нельзя оправить. Еще если поставить error 0 и нажать конвертировать то это значение изменяется произвольно. И баг-репорт, если взять эту картинку, поставить Height 70 Error 0 то программа зависает.

              Так же осталась проблема с черным цветом за место прозрачности.
              image
              • 0
                0 — как раз и означает подобрать под размер, только как оказалось, надо считать █ за 3 символа, а не за один.

                на счет зависания — как раз подбирает ошибку методом перебора (в начале с шагом 5, как достигнет нужного размера, то с шагом 1)

                да, с прозрачностью не успел, надо сделать так же как у sergey_dobrodey.
                • 0
                  сорри, как у aruz'а
                  • +1
                    Исправил с прозрачностью и зависанием(нельзя делать слишком большие картинки).
                    • 0
                      Отлично! А возможно как-то запустить под mono? Консольную версию чтобы на вход принимала файл и печатала результат в stdout?
              • 0
                ещё можно обернуть весь код картинки в , тоже неплохо получается ;)
        • 0
          Неплохо, кстати какого макс «разрешения» удалось добиться?
          • 0
            если ошибку увеличивать, то можно добиться полностью белой картинки с любым разрешением :)
        • –1
          Мы стали более лучше работать с градиентами. Символы там, размеры сообщения это всё.

  • +4
    • +1
      Я ждал этого. Странно почему еще никто не запостил

         
      • +3
        Эт кто?
        • 0
          Это древний скандинавский воин добра .
  • 0
    Я завтра свою версию допилю немного, уберу из нее говнокод, и выложу на общее обозрение на github. Кстати столкнулся с ограничением отправки сообщения содержащего «картинку» при длине over 20.000, а не указанные 29.999. Может кто еще сталкивался, или каки-либо советы. Буду признателен.
  • 0
    в OS X я так понимаю не работает?
  • +2
    Моя версия на гитхабе. С возможностью выбора итогового разрешения: 40х40, 35х35 и 30х30.
    github.com/sergeydobrodey/SkypeImage
    • 0
      Соберите пожалуйста версию и выложите архив там в раздел Downloads
  • 0
    Сделайте пожалуйста небольшую оптимизацию убрав лишние <font color="..."> если несколько пикселей идут с одним и тем же цветом, чтобы сэкономить трафик и скайп не так быстро начинал тормозить.
    • 0
      Уже есть такой функционал. Более того, «схожие» цвета группируются и заменяются одним, правда изза этого есть некоторые проблемы с передачей цвета, сейчас над этим работаю.
  • 0
    Круто, только можно как-нибудь удалить файл из общего доступа из Gallery я имею ввиду?
  • 0
    Зашёл на сайтик, так Outpost заблокировал запуск какого-то *.exe-шника в Temp папке. Java при этом в трее запустилась. Там всё чисто?
  • 0
  • 0
    Для того чтобы оправить HTML-код в чате нужно зажать CTRL+SHIFT и кликнуть на кнопку отправки сообщения.
    _______
    А что нужно на Mac OS такое нажать?
    • 0
      Для начала нужно прочесть дату поста :)

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.