sonyps4.ru

Прогрессивный jpg. Прогрессивный JPEG: новый best practice

Нарезной батон. Подходит к борщу на ужин

В Школе редакторов есть преподаватель - Николай Товеровский. Жена часто просит его купить хлеб к ужину . На этом примере он объясняет разницу между “делать” и “сделать”.

Ты можешь спасти мир по дороге в магазин, оказаться в Индии, найти последний уцелевший батон, отвоевать его у злобных инопланетян, но если в итоге он окажется чёрствым или плесневым, значит, ты не выполнил задание. Делал, но не сделал.

Метод прогрессивного джипега - это способ делать и сделать одновременно. Его автор, Артемий Лебедев, описал суть метода одной картинкой:

Картинка из параграфа 167 Ководства студии Артемия Лебедева

По Лебедеву , надо стремиться к тому, чтобы в любой момент времени задание было готово на 100%. Вопрос лишь в степени детализации. Если есть время и возможность - добивайся совершенства сколько тебе влезет. Не хватает ресурсов на доработку - не беда, задание уже выполнено, то есть сделано.

Метод зацепил, но я никак не могла найти ему применение. Борщ готовится постепенно, прогружаясь как обычный джипег, и есть его можно только при 100% готовности. Ворота во дворе не хотят открываться до тех пор, пока я не откидаю от них 100% снега. Собаку нужно помыть двумя шампунями, вытереть полотенцем, расчесать и на 100% высушить феном, - только тогда она становится чистой.

Я страдала, но не прекращала попытки. На моё счастье, началась учёба в Школе редакторов. Первое же практическое задание дало возможность попрактиковаться в методе прогрессивного джипега.

Задание из курса “Управление и результаты”. Надо нарисовать двух осьминожек. Ножки осьминожек - мои навыки. У одной осьминожки ножек немного и они коротенькие - это я сегодня. У второй ножек больше и они длиннее - это я через год.

Для вдохновения нам дали две картинки:

У осьминожки дизайнера короткие ножки-умения

Другое дело - осьминожка артдиректора. Даже взгляд изменился

Тут надо признаться, что у меня есть диплом художника-оформителя четвёртого разряда, но рисовать в компьютере я не умею. От слова вообще.

Чтобы прекратить панику и успокоиться, посмотрела мультик. Если есть 10 минут, гляньте, не пожалеете.

Потом пошла советоваться с дочерьми. Они у меня богини фотошопа и всё такое. Старшая посоветовала не париться, нарисовать на бумаге красками, потом сфотать да и всё. Младшая сказала: “Напиши, что надо, сколько щупалец, какой длины, я тебе нарисую”. Но я решила, что уже большая и должна делать свои уроки сама.

Первая стадия, 20%

Пошла в Гугл-документы и создала таблицу. Выписала в столбец все навыки, которые у меня есть, добавила к ним те, что хочу развить к концу года, придумала шкалу роста, раскрасила ячейки в разные цвета и получила осьминожку без головы. Потратила 30 минут.

Задание выполнено. Но степень проработки оставляет желать лучшего

Обрадовалась, загрузила в школьную папку “Результаты заданий” и съела кусок торта в награду.

Вторая стадия, 60%

Решила приделать осьминожке какую-никакую голову. Покопалась в инструментах Гугл-таблиц, нашла рисование. Стандартных фигур вполне хватило, чтобы у осьминожки появились голова, глаз и рот.

Это всё ещё таблица, но согласитесь, она похожа на осьминожку

Думала, что на этом закончу, но заботливый однокурсник написал, что лучше сделать скриншот. Скрин получился неряшливый, пришлось его почистить от лишних деталей. На весь этап потратила около часа.

Скриншот ещё больше похож на осьминожку

Третья стадия, 97%

От автора: прогрессивные изображения на HTTP2 быстрее отрисовываются на экране, что повышает восприятие производительности. Используйте сканирующие слои JPEG изображений для показа понятного контента при отправке всего лишь 25% от самого изображения. Для максимального увеличения производительности ключевых изображений используйте HTTP2 Server Push для сканирующих слоев JPEG.

Проблемы с изображениями

Изображения очень важны: они завлекают нас, бесят, побуждают к чему-либо. Интернет в известной нам форме зависит от изображений. Изображения составляют ~65% от общего веса страницы, а также они сильно связаны со временем загрузки страницы и индексом скорости. Если коротко, изображения очень тяжелые и все замедляют.

Сжимайте!

Сжатие – лучший способ исправления отрицательного эффекта от загрузки изображений. С помощью сервисов типа ImageOptim от Kornel Lesiński, который использует замечательные библиотеки mozjpeg и pngquant, можно уменьшить вес изображений без визуальных потерь качества. Благодаря библиотекам типа DSSIM мы можем тестировать качество изображений на разных уровнях сжатия.

Плохая новость заключается в том, что даже после сжатия изображений в среднем на ~29% с помощью описанных выше инструментов, а также при использовании других форматов типа WebP, изображения все равно остаются самыми большими файлами на сайте. Ближайший собрат в этом отношении – JS. Нужно найти способ, как быстрее поставлять эти компоненты, чтобы быстрее завлекать пользователя.

Знакомство с многоканальной передачей

Частично вопрос производительности решается с помощью HTTP2. Одно из главных преимуществ данного протокола – многоканальная передача – способность обрабатывать несколько запросов и ответов за раз, используя одно TCP соединение.

Многоканальная передача ускоряет загрузку файлов с сайта. В зависимости от структуры сайта можно выставить приоритет ресурсов при многоканальной передаче: если критическому CSS поставить высокий приоритет, он будет загружаться быстрее через HTTP2. Кроме того, подгружая еще не запрошенные файлы через HTTP2 Server Push, при правильном подходе можно серьезно улучшить восприятие производительности. Более подробно на эту тему чуть ниже.

При загрузке изображений через многоканальную передачу данных появляется интересный побочный эффект: с точки зрения восприятия производительности отдельные типы изображений загружаются значительно быстрее из-за того, что первичная информация об изображении загружается параллельно через многоканальную передачу данных HTTP2. К таким типам можно отнести прогрессивный JPEG и чересстрочный PNG.

Все прогрессивно

Прогрессивные и чересстрочные изображения похожи на слоеный пирог: информация в них хранится не в едином потоке, который отрисовывает изображения от верхнего левого угла до правого нижнего, а в форме стека, где каждый слой дополняет уже предоставленную ранее информацию. Отдельные слои весят намного меньше конечного файла.

Загрузка файлов с сайта через HTTP2 Multiplexing начинается одновременно, и первичные, легковесные слои прогрессивных и чересстрочных изображений начнут отрисовываться намного быстрее, чем последовательно закодированные изображения. Последовательно закодированные изображения отрисовываются наподобие жалюзи: стока за строкой, пока не загрузится все изображение.

Джон Меллор из Google в 2012 году уже говорил о восприятии производительности и индексе скорости при загрузке сканирующих слоев прогрессивных JPEG изображений через HTTP2 Multiplexing. Он экспериментировал с протоколом SPDY, предшественником HTTP2. Сегодня мы можем продвинуть еще дальше его открытие и заставить прогрессивные изображения загружаться еще быстрее.

Возвращаем власть в наши руки или сканирующие файлы

По умолчанию в прогрессивных JPEG изображениях 10 сканирующих слоев. То есть для загрузки изображения с исходным качеством проходит 10 итераций с загрузкой слоев с информацией. Первый слой JPEG изображений всегда имеет высокую пикселизацию и зачастую выполнен в черно-белом варианте для экономии на цветовых каналах. Хотите узнать, как выглядят все слои? Воспользуйтесь инструментом jsk от Frédéric Kayser, в котором прогрессивное изображение можно разбить на отдельные слои.

Почему именно 10 слоев? Это значение по умолчанию во всех стандартных кодировках JPEG. Так достигается идеальный баланс между размером каждого слоя и качеством, а также данное значение помогает достичь наименьшего веса конечного файла путем оптимизации через таблицы Хаффмана .

Современные тенденции и подходы в веб-разработке

Узнайте алгоритм быстрого роста с нуля в сайтостроении

В отличие от PNG изображений, где для создания черессточных слоев используется фиксированный метод кодировки Adam7, JPEG кодировки можно расширить директивами: флаг «-scans» для кодировок JPEG. С mozjpeg флаги можно использовать следующим образом: «cjpeg -quality 75 -scans customscans.txt -outfile output.jpg input.jpg». Кодеры JPEG принимают текстовые файлы с вашими командами для создания слоев.

Каждая строка в сканирующих файлах задает новый сканирующий слой. Каждый слой хранит много информации о цветовом канале, индексе матрицы и потерях.

В сканирующем файле есть три канала – яркость (Y), синий (Cb) и красный (Cr) под номерами 0, 1 и 2 соответственно. Индекс матрицы в файле начинается с 0 и идет до 63, покрывая блок в 64 пикселя (кодировка JPEG имеет блок 8х8).

Креативим

Наша цель – как можно быстрее показать осмысленное изображение, чтобы наш сайт отрисовывался быстрее. Наш первый сканирующий слой должен быть легким, но в то же время осмысленным, что приведет к резкому скачку восприятия производительности визуального качества.

Первый представленный слой в сканирующем файле обеспечивает нас подходящими цветами. Второй слой – это уже приемлемое превью изображения. На третьем и четвертом слое находится необходимая информация о цвете: красный канал расположен перед синим, так как красный канал намного важнее для повышения визуального качества, например, при показывании лиц. Последний пятый слой дает нам конечное изображение с прорисовкой мелких деталей. Эти улучшения выливаются в примерный рост индекса скорости на 6%, что в свою очередь влияет на восприятие производительности.

Скрипт сканирования выше – лишь один пример настройки кодировки прогрессивных JPEG изображений: используя этот подход, можно воссоздать технику LQIP от Guy Podjarny в прогрессивных изображениях JPEG, как показал Jon Sneyers.

Push! Push! Push!

Для еще более быстрой загрузки изображений в HTTP есть еще один инструмент — Server Push. На серверах с поддержкой HTTP2 есть возможность помечать отдельные слои прогрессивных JPEG изображений высоким приоритетом, что заставит сервер передать эти слои в Push-кэш браузера пользователя еще до самого запроса на изображение. Браузеры могут выстраивать структуру страницы и отрисовывать первичные слои изображения из кэша, ускоряя тем самым для пользователей воспринимаемую отрисовку изображений.

Более подробно изучить HTTP2 Server Push можно в замечательной статье в разделе Performance Advent Calendar .

Данную технику стоит использовать только для выстраивания стратегии: выясните, какие изображения в первую очередь влияют на привлечение пользователей на странице, например, баннеры, пробуждающие определенные эмоции, или изображения с обзором на товар, и используйте Server Push для загрузки первичных слоев этих JPEG изображений. Так вы привлечете пользователей, что выльется в повышение конверсии без ущерба общей загрузки сайта.

Заключение

Благодаря многоканальной передаче через HTTP2, прогрессивные и чересстрочные изображения отрисовываются гораздо быстрее.

Управление созданием прогрессивных JPEG изображений может дать пользователю лучший визуальный опыт.

HTTP2 Server Push может улучшить восприятие производительности важных изображений.

OptiPic allows your website to demonstrate better technologies and display jpeg faster thanks to progressive jpeg technology.

The technology of progressive jpeg allows you to keep the original quality of the picture, but the speed of loading such a file is greatly higher than of loading photos with other technical data. Let us consider this issue in more detail and more closely, and also talk about those aspects that require closer attention.

Progressive JPEG means faster loading of JPEG

Web optimized photos are in JPEG format. It has a certain classification and is represented by two following categories:

  • Sequential (baseline) – provides a regular boot image in one layer. Images are loaded from top to bottom with full resolution;
  • Progressive – includes a series of successive layers with gradually improving quality.

Progressive jpg first simply marks the contours of the future photo, and then loads the image into layers - from the layer with the worst quality to the last final layer with the maximum quality.

The advantages of this format are obvious and undeniable. Such a photo appears on the screen much faster, and its volume can be quite impressive. And this speed has a positive impact on the overall download speed of the web page as a whole.

It is enough to recall one simple fact for a better understanding. Even if you use low speed connection, a file in progressive jpg format with a size of 80 KB will be displayed much faster than a similar image of a sequential jpeg, which is reduced in size and has only 5 KB. Isn’t it impressive? Oh, yes it is!

During the first pass, the progressive jpeg has a lower resolution. However, the file includes the amount of data that are similar to a smaller image. And when displaying an object on a mobile device, the vast majority of users will not even notice the low resolution.

Despite all the advantages of progressive jpeg , its popularity today is significantly less than of the one. Over 90% of all images in the Web have a consistent display format.

But the situation is gradually changing in the opposite direction. The first steps in this direction are made by Google, which introduces new services for working with progressive jpeg and its subsequent promotion. Moreover browsers by the most different manufacturers gradually give preference to this format of display of photographs. Technology, which has been in a kind of isolation for the past few years, is now becoming more and more popular and in demand.

Now progressive jpeg has a wide range of advantages and benefits that are unquestioned. This format will confidently take its own place in future and in all its aspects is much better than outdated analogues of previous years.

Для любителей фотографии сезон длится круглый год. За это время можно отснять просто гигантский объём материала, как по количеству единиц кадров, так и по общему весу файлов на диске.

Это характерно как для профессиональных фотографов, так и для любителей. И первых, и вторых объединяет одна общая черта: главные судьи для фотографа - конечно же зрители.

Мы не сильно погрешим против истины, если скажем, что фотограф – это человек с фотоаппаратом, талантом и знаниями, плюс своя аудитория.

В конце концов, не только фотографы-профессионалы жаждут презентовать своё творчество зрителям, которые могут стать еще и потенциальными клиентами впоследствии.

Буквально все, у кого есть современные устройства, активно эксплуатируют всемирную паутину для донесения застывших моментов реальности широкой публике.

Так, для хранения большого количества фотографий на компьютере может оказаться полезным графический формат Jpeg2000 - он позволит экономить дисковое пространство.

Но при размещении фотографий высокого качества в интернете, могут появиться определённые трудности.

Общая картина с приличными по скорости интернет-каналами заставляет желать лучшего. А уж высокоскоростная передача данных стационарного (оптика, ADSL и т.д.) и мобильного (UMTS, WiMax, LTE) типов доступна далеко не везде.

Вот ведь ирония: сейчас компания Yota разворачивает в ряде регионов сети 4G, на основе LTE Advanced. В то время, как предшественник - 3G, представлен скорее фрагментарно, ограничиваясь мегаполисами и связывающими их крупными транспортными артериями.

Внушительный процент всех существующих интернет-каналов (радио и проводных) представлен низкоскоростными каналами.

Это затрудняет использование фотосервисов, таких как Flick, Panoramio и прочих, содержащих графические файлы высокого разрешения с большим размером самих файлов.

Вывод на экран полноразмерного снимка при медленном интернете может достигать минут. Можно ли что-нибудь сделать? Пожалуй, что да.

Progressive JPEG - эффективное использование PJPEG

Речь здесь пойдёт не о каналах и провайдерах и не о тех случаях, когда постятся фотки с мобильника в Контакт. Но если загружаем снимки на 16 Мп в Panoramio, то достаточно пары кликов, чтобы существенно улучшить и скорость загрузки фото, и комфорт для зрителей.

Всё это при том же самом размере файлов и кадров.

Как правило, основная масса фото отправляется на сервер в формате JPEG после предварительной обработки - цвето и яркостная коррекция, обрезка и прочее.

И здесь есть шанс повлиять на ситуацию. При сохранении снимка в JPEG, по умолчанию используется метод Baseline. Снимок, созданный с его применением, в браузере "разворачивается" последовательно сверху донизу - по мере загрузки файла.

В случае просмотра изображения небольшого веса это происходит незаметно для зрения и терпения человека, но фото высокого разрешения загружается в браузере следующим образом:

И так – до победного конца. Но часто пользователь понятия не имеет о том, что находится на загружаемом фото и нужно ли оно ему.

Однако, приходится ждать, пока достаточный для понимания сути снимка объём загрузится.

Избежать такого неудобства для пользователя несложно: технология JPEG имеет ещё один метод построения снимка – прогрессивный метод или Progressive JPEG .

В нём весь массив данных может быть разделён особым образом на несколько групп по частотам либо по разрядам значений пикселей. Количество таких групп можно задать при сохранении файла.

Далее, при выводе снимка в браузере, разделённые группы данных выводятся поочерёдно. Сперва – соответствующие низким частотам, либо старшим разрядам коэффициентов пикселей, затем – с более высокими частотами или следующими разрядами в сторону снижения и т.д.

При этом грузится сразу весь снимок, но сниженного качества, т.к. передаётся лишь часть информации. Можно не дожидаясь вывода всех групп принять решение – нужен нам этот снимок или нет.

Так, последовательно друг за другом грузятся все группы (в стандарте они называются СКАНЫ):

Каждый новый передаваемый скан последовательно улучшает качество изображения. В конце концов, после передачи ряда сканов – загружается всё фото:

Таким образом, Progressive JPEG способен экономить время на медленных каналах. Кроме того, многочисленные опыты подтвердили снижение времени полной загрузки изображений в формате Progressive JPEG, по отношению к Baseline. В этом нетрудно убедиться каждому желающему.

Продолжаем начатый разговор об оптимизации изображений. Оптимизировать (сжимать) мы можем не только сторонние изображения, с которыми что-то сделали или те изображения авторами которых мы являемся, но и просто открывать их в Фотошоп с одной лишь целью - оптимизации.

Это могут быть, например, памятные фотографии с праздника или отдыха, которые мы хотим хранить на диске самого компьютера или съёмных носителях (флэш-накопители, жёсткие внешние диски).

Разговор об оптимизации ни в коем случае не является призывом, вернувшись из отпуска или каникул бросаться оптимизировать (сжимать) фотоснимки (графические данные). Но, может быть и есть смысл в том, чтобы эти самые снимки в процессе оптимизации поучаствовали. Разумно ли создавать и пополнять электронный фотоальбом фотографиями, размер которых при переводе в физические меры длины исчисляется метрами? В общем, давайте над этим поразмыслим, когда появится для этого настроение.

Фотошоп является программой, удовлетворяющей потребности в обработке и создании изображений различной степени сложности. В Фотошоп как и во многих других программах, да и в компьютерных программах вообще, многие процессы происходят самостоятельно. Но мы как пользователи можем вносить некоторые корректировки в эти самые процессы, что бесспорно удобно.

Итак, изображение в Фотошоп готово к сохранению в формате отличном от формата Фотошоп, то есть оптимизации. Если во вкладке «Файл» верхнего меню мы выберем опцию «Сохранить», то, допустим это наше творение, сохранится в формате PSD, то есть файл будет «фотошоповским». Но выбрав другую опцию, которая присутствует в подавляющем большинстве компьютерных программ и именуется «Сохранить как», то в этом случае у нас появляется возможность выбора, - каким типом файла быть нашему творению за пределами Фотошоп:

Сделав выбор из перечня типов, предлагаемого редактором, формат файла поименованный JPG, мы имеем возможность отрегулировать уровень сжатия (оптимизации) в специальном техническом окошке, которое появится в автоматическом режиме, стоит только выбрать этот самый формат (тип) JPG:

Это окошко откроется перед нами с уже установленными самим Фотошоп настройками. Мы можем, ничего не предпринимая, с ними согласиться нажатием кнопки «Ок». И при таких наших действиях мы можем «спать спокойно» (юмор), процедура оптимизации прошла успешно. А можем в процессе оптимизации и поучаствовать. Давайте увеличим масштаб видимости до 200%, закрыв предварительно открытое окошко регулировки уровня сжатия:

(Расположение кнопки выбора масштаба для версий CS4, CS5).

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

Изменение масштаба видимости было произведено для того, чтобы лучше видеть, что происходит с изображением, когда мы меняем настройки. Можем процент масштаба сделать ещё больше, а можем и вовсе этого не делать.

Итак, окно настроек перед глазами и мы можем преступать к сжатию изображения:

Для того чтобы видеть как меняется объём файла (изображения) нам нужно, щелчком левой кнопки мыши, поставить галочку в пустом квадратике рядом с надписью «Просмотр». После чего, всё теми же щелчками мыши, выбирать поочерёдно то одну то другую разновидность формата (Базовый стандартный, Базовый оптимизированный, Прогрессивный), дополнительно изменяя и количество шагов (3,4,5):

При всём том, что мы делаем, нам не следует забывать и о самом изображении. Ведь эти регулировки ради него. Поэтому мы не концентрируем всё своё внимание лишь на показателе объёма, а смотрим и на изменения, которые происходят с изображением.

Наши действия по выбору формата оптимизации (сжатия) могут быть дополнены изменением и других параметров изображения:

И опять у нас есть возможность на одном из нескольких параметров остановить свой выбор: Это может быть Низкий, Средний или Высокий, а может и Наилучший. Достаточно одного щелчка кнопкой мышки и варианты к нашим услугам. Мы можем и не раскрывать перечень вариантов, а просто подвигать ползунок - это будет тем же самым выбором из перечня вариантов параметра:

Следя за изменениями изображения и объёма файла, в то время, когда меняем параметры изображения и разновидность формата, мы прекращаем регулировку в тот момент, когда сочтём нужным. То есть тогда, когда по нашему мнению и объём файла достаточно уменьшился и видимой потери качества картинки не произошло. Ну и далее жмём кнопку «Ок», в этом же окошке.

Если откатиться в своих действиях назад и остановиться на том моменте, когда окошко регулировки уровня сжатия только открылось, и посмотреть на слои, то мы увидим, что они объединились в один общий слой, чего не происходит с многослойным изображением, остающимся файлом типа PSD.

Все файлы имеют свою кодировку (код) и именно по коду они и распознаются различными программами и операционными системами. То есть у файлов-изображений свой код, а у файлов-текстов свой, ну и так далее. Эти коды различными программами и операционными системами воспринимаются не одинаково, по этим самым причинам мы можем видеть незначительные отклонения в отображении значений параметров.

Например, мы сжали (оптимизировали) изображение и его объём в Фотошоп таков:

Оптимизированный файл JPG (изображение) я сохраню на рабочем столе компьютера. При наведении курсора на значок файла ОС Windows покажет несколько другое значение.



Загрузка...