TrueColor GIF ★

TrueColor GIF (191.75КиБ)

Была у меня такая задумка — попробовать сделать полноцветную GIF-анимацию. Сразу скажу, идея провалилась, к сожалению.

Мысль-то простая — каждый полноцветный кадр должен представлять из себя полноцветный GIF. Общеизвестно, что формат GIF поддерживает только 256 цветов. Не страшно, разбиваем картинку так, чтобы каждый кадр содержал в себе не более 256 цветов и ляпаем их каждый поверх другого без задержки, в конце получится полноцветное изображение. Несколько таких изображений с задержкой между ними — и готова анимация.

Разбиение для начала выбрал простое — исходя из площади покрытия, думал потом взяться за оптимизацию (выбирать площадь, потом брать все цвета, которые в ней содержатся), но этого не понадобилось, оказалось, что если поставить задержку между кадрами ноль, то каждый браузер всё равно будет отрисовывать анимацию с очень заметной на глаз задержкой. Кажется в спецификации вообще не определено что означает нулевая задержка:

Delay Time — If not 0, this field specifies the number of hundredths (1/100) of a second to wait before continuing with the processing of the Data Stream. The clock starts ticking immediately after the graphic is rendered. This field may be used in conjunction with the User Input Flag field.

Но и если поставить задержку в 1/100 секунды, браузеры всё так же неторопливо отрисовывают картинку. Нарезанные кадры я собирал через утилиту gifsicle, она ещё и оптимизирует изображение — ненужные мне области я заливал прозрачным цветом, gifsicle умеет такие области отбрасывать, что уменьшает размер изображения:

gifsicle --delay 0 --crop-transparency -O3 out/*.gif > out.gif

Жаль, что ничего не получилось. Всё-таки надо переходить на APNG.

Зато выяснились любопытные подробности. Не знаю как это выглядит в IE (негде попробовать), а вот FireFox и Chrome умеют, один раз отрисовав конечную анимацию, потом мгновенно доставать её из кеша на перезагрузке страницы. «Опера», как и следовало ожидать, постоянно перерисовает анимацию — стоит только вернуться на страницу с другого таба или прокрутить её обратно до анимированного изображения.

43 комментария

JavaScript GeoAPI и timeout

Если вы пользовались каким-либо навигатором, то знаете, что первый запрос на определение местоположения, как правило, очень долгий. С другой стороны, возможно устройство находится в таких условиях (метро, например), когда координаты определить не удаётся.

Коллега из «Яндекса» провёл исследование — попросил всех знакомых зайти на специальную страницу, где использовалось Geolocation API. Выводы любопытные:

Среднее время работы геолокации 8 секунд. Максимальное 24 сек. Но в 15 секунд уложились все устройства, кроме одного.

C первой попытки с тестом справилось 18 из 21 устройства.

Всегда стоит использовать геоопредление высокой точности, так как геоопределение низкой точности не работает на Андроидах без включенной геолокации по wifi сетям. Щупанье чужих телефонов показало что как правило люди ее не включают.

3 комментария