C fnbt png: Сжатие PNG-изображений онлайн

Содержание

Онлайн-сжатие PNG

Ошибка: количество входящих данных превысило лимит в 3.

Чтобы продолжить, вам необходимо обновить свою учетную запись:

Ошибка: общий размер файла превысил лимит в 100 MB.

Чтобы продолжить, вам необходимо обновить свою учетную запись:

Ошибка: общий размер файла превысил абсолютный лимит в 8GB.

Для платных аккаунтов мы предлагаем:

Премиум-пользователь

  • Вплоть до 8GB общего размера файла за один сеанс конвертирования
  • 200 файлов на одно конвертирование
  • Высокий приоритет и скорость конвертирования
  • Полное отсутствие рекламы на странице
  • Гарантированный возврат денег

Купить сейчас

Бесплатный пользователь

  • До 100 Мб общего размера файла за один сеанс конвертирования
  • 5 файлов на одно конвертирование
  • Обычный приоритет и скорость конвертирования
  • Наличие объявлений

Мы не может загружать видео с Youtube.

Сжать JPG, PNG, GIF изображения онлайн

Зачем сжимать изображения?

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

Сжимайте JPG, PNG и GIF изображения онлайн

Необходимо сжать JPG, PNG или GIF изображение онлайн? Тогда вы в нужном месте! В зависимости от ваших потребностей, выберите оптимизацию или сжатие изображения в КБ/МБ. Интересно узнать как сжать изображение, не теряя качества? Давайте посмотрим.

Сжатие изображений без потери качества возможно благодаря автоматическому режиму сжатия. Он обеспечивает оптимальный баланс между визуальным восприятием и размером файла. При использовании этого инструмента размер сжатых изображений будет уменьшен до 70% без визуальной потери качества. Звучит отлично, не так ли?

Как сжать изображение?

  1. Загрузите JPG, PNG или GIF изображение, которое вы хотите сжать.
  2. Выберите опцию автоматического сжатия изображения. После этого нажмите кнопку «Сжать».
  3. Чтобы получить оптимизированное изображение, перейдите на страницу загрузки и нажмите кнопку «Скачать Изображение».

Бесплатный сжиматель фото

Бесплатный сжиматель изображений ResizePixel предоставляет простой в использовании, безопасный и надежный сервис для сжатия фотографий онлайн. С нашим вниманием к деталям и использованием новейших технологий, приоритет номер один для нас — это соответствие ожиданиям всех, кто посещает этот веб-сайт.

12 техник оптимизации размера PNG — CMS Magazine

Примерно четверть изображений на сайтах — это именно PNG. Понимание формата и средств его оптимизации позволит сделать сайты быстрее за счет меньшего размера PNG-изображений.

PNG-формат предполагает отсутствие потерь в качестве при сохранении изображений (да, он позволяет иметь полноцветное изображение с полупрозрачностью БЕЗ потерь качества). Но для сохранения этого преимущества не обязательно проигрывать в размере. В некоторых случаях — например, градиентные или малоцветные изображения — PNG является наиболее выгодным форматом с точки зрения размера.

Выбор правильного формата

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

В этом случае стоит рассмотреть вариант либо совмещения PNG-изображения с фоном для сохранения в формате JPEG, либо генерации набора изображений (с различными фонами) — опять-таки для финального сохранения в формате JPEG. В большинстве случаев полноцветное изображение в JPEG будет в 2-3 раза меньше по размеру PNG-эквивалента.

Удаление чанков

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

Первый из них: это удаление мусора в мета-информации (неиспользуемых чанков) и в используемой палитре (неиспользуемых цветов). Важными являются IHDR, IDAT и IEND-чанки. Все остальные содержат вспомогательную информацию (но, например, удаление чанка gAMA приводило к «порче» изображений в браузере Safari старых версий). Чанки с комментариями, датой изменения и цветовыми профилями (для полиграфии) можно смело вычищать: для браузера это бесполезный набор символов. Удалить чанки можно при помощи утилиты ExifTool.

Больше не нужно искать и обзванивать каждое диджитал-агентство
Создайте конкурс на workspace.ru – получите предложения от участников CMS Magazine по цене и срокам. Это бесплатно и займет 5 минут. В каталоге 15 617 диджитал-агентств, готовых вам помочь – выберите и сэкономьте до 30%.
Создать конкурс →

Правильный выбор палитры

Существует 6 вариантов формата PNG для разных задач: серая палитра, цветная палитра (256 цветов), полноцветная палитра, и дополнительно каждый вариант может включать прозрачность. Правильный выбор палитры и прозрачности позволяет сократить размер PNG изображения. Если у вас меньше 256 цветов, то всегда выбирайте PNG8 и следите за прозрачностью (некоторые редакторы не умеют сохранять полупрозрачность для PNG8).

Если изображение содержит исключительно оттенки серого, то ваш выбор — Grayscale.

Если в изображении больше 256 цветов — попробуйте преобразовать его к PNG8. Возможно, деградация качества будет незаметной. Если цветов слишком много — рассмотрите вариант с форматом JPEG. Если и это невозможно, то выбирайте TrueColor и следите за прозрачностью.

Оптимизация альфа-канала

Ряд инструментов позволяют использовать не индексированный альфа-канал, а полную полупрозрачность, сохраняя исходную палитру (например, в 256 цветов). Это существенно уменьшает размер изображения.

Дополнительно можно использовать размытие (Dithering), чтобы сгладить малое количество цветов при полупрозрачности.

Оптимизация фильтров

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

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

Оптимизация сжатия

Почти финальный пункт, где еще можно «дожать» PNG — это сжатие. Благодаря открытому формату (в отличие от GIF), PNG поддерживает большое количество алгоритмов сжатия, в частности, zlib, 7-zip, Kzip, zopfli. Разные утилиты оптимизируют изображения разными способами, и оптимизация за счет сжатия должна идти всегда в финале: уже после выбора палитры, прозрачности и оптимизации фильтров. Хотя иногда менее оптимальные наборы фильтров могут дать в совокупности с другим сжатием меньший по размеру файл.

Оптимизация сжатия данных применяется следующими утилитами: optipng, TruePNG, PNGwolf, AdfDef, PNGout.

Наиболее эффективный из всех алгоритм — это zopfli. Использование zopflipng для сжатия PNG-файлов (не путать с «сжатием на лету», которое применяется для текстовых файлов) уменьшает актуальный размер цветовой информации уже после того как применена самая эффективная палитра и самые эффективные фильтры (и отключить архивирование в других утилитах оптимизации). Это уменьшит размер PNG еще на 3-7% относительно сжатия другими формата без существенного увеличения времени оптимизации.

WebP: легковесная альтернатива

Формат WebP за счет большего количества фильтров и более адаптивного подхода к индексируемой палитре и прозрачности позволяет существенно уменьшить размер PNG-изображений. Стоит учитывать, что WebP поддерживается не всеми браузерами, поэтому PNG-альтернатива все равно должна присутствовать.

По тестам Айри.рф примерно в половине случаев PNG изображений может быть уменьшено, в среднем, на треть за счет перевода в WebP формат.

Постеризация, палитра и оттенки серого

Постеризация (не путать с пастеризацией) позволяет уменьшить количество цветов в PNG файле за счет какого-либо адаптивного алгоритма (например, mediancut или k-means). Обычно уменьшение количества цветов в 2-3 раза незаметно для глаза, но приводит уменьшению размера изображения на 20-50%.

Наиболее известные инструменты пастеризации — Photoshop, pngquant, pngnq и TruePNG.

Выбор правильной палитры (например, использование только оттенков серого или только 256 цветов) — если это еще не сделано — также позволяет существенно сократить размер изображения (каждый пиксель кодируется 1 байтом вместо 3).

Маска прозрачности

Малоизвестная техника, хорошая описанная Сергеем Чикуёнком. Суть ее заключается в удалении цветовой информации (зануление) у полностью прозрачных пикселей. Это сокращает актуальное количество байтов в IDAT-чанке и позволяет применить более оптимальные фильтры.

К счастью, некоторые утилиты по оптимизации PNG, в частности, TruePNG позволяют выполнить это автоматически.

Размытие (dithering)

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

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

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

Чрезстрочность (interlacing)

Техника чрезстрочности (interlacing) подобна последовательному (progressive) JPEG: при каждом проходе PNG-изображение получает больше информации, и детали изображения начинают «проявляться».

Графические редакторы, как и консольные утилиты (например, convert), позволяют использовать чрезстрочность (по линиям или цветам) для PNG изображений. В ряде случае выигрыш от такого метода может составить 5-10%.

Эвристика фильтрации

Основной подход для оптимизации представления цветовой информации в PNG — это полный перебор фильтров для каждой строки изображения, и подбор наиболее оптимального набора для изображения в целом. Но поскольку фильтры могут использовать цветовую информацию предыдущей строки, то количество вариантов даже для небольшого изображения (100 строк) получается значительным. Поэтому все утилиты делают те или иные предположения по эффективности фильтров и сокращают полный перебор.

Эвристические (предсказательные) алгоритмы могут обеспечить более эффективное применение фильтров, базируясь на особенностях данного изображения. Такой подход реализован, в частности, в утилите pngwolf. Использование эвристики фильтров в совокупности с другими оптимизаторами фильтров PNG уменьшает итоговый размер изображений.

В заключении рекомендую следующий справочник по утилитам оптимизации PNG, которые могут дополнить ваш арсенал инструментов оптимизатора: PNG Tools Overview.

По материалам searchengines.ru

Сжатие файлов PNG онлайн

Чтобы сжать все выходные файлы в файл ZIP, нажмите значок «» справа, затем нажмите «Добавить в ZIP».

Имя файлаИсходный размер файлаРазмер выходного файлаРазмер файла сжатдействия
  1. настройки

    Значение качества PNG может составлять от 1 (низкое качество изображения и максимальное сжатие) до 100 (наилучшее качество, но наименее эффективное сжатие). Настройки не являются обязательными, вы можете закрыть раздел «Настройки», нажав «X» справа.

  2. Добавить файлы

    Вы можете перетащить несколько файлов PNG в раздел «Добавить файлы». Каждый размер файла может быть до 40 МБ.

  3. компрессия

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

  4. Выходные файлы

    Выходные файлы будут перечислены в разделе «Выходные файлы». Чтобы сжать все выходные файлы в файл ZIP, нажмите значок «» справа, затем нажмите «Добавить в ZIP». Вы можете щелкнуть правой кнопкой мыши на имени файла и нажать «Сохранить ссылку как …», чтобы сохранить файл. Выходные файлы будут автоматически удалены на нашем сервере через два часа, поэтому, пожалуйста, загрузите их на свой компьютер или сохраните их в онлайн-хранилищах, таких как Google Drive или Dropbox, как можно скорее.

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

PNG — растровый формат хранения графической информации, использующий сжатие без потерь по алгоритму Deflate. Различные реализации алгоритма Deflate дают разную степень сжатия, поэтому были созданы программы для пережатия изображений с несколькими вариантами настроек в целях получения наилучшего сжатия — например, форк pngcrush OptiPNG и advpng из комплекта AdvanceCOMP (использует 7-Zip).

Copyright © 2021 Compresss.com — Универсальный файловый компрессор. Все права защищены. политика конфиденциальности
Aconvert.com является дочерним сайтом Compresss.com, он сосредоточен на преобразовании файлов вместо сжатия файлов.

Сжатие PNG-изображений онлайн без потерь

В большинстве случаев, веб-дизайнеры, фотографы и все, кто работает с изображениями, используют распространённый формат .png. Не менее популярен и jpg, ведь многие фотоаппараты снимают именно в таком формате.

Содержание: [показать]

К тому же, они поддерживаются любыми графическими редакторами, а сжатие png производится без потерь.

Самое интересное то, что в этом формате отдельные варианты изображений могут быть частично прозрачными. И это просто замечательное преимущество.

Ещё одной характерной особенностью формата является то, что на выходе файл имеет достаточно большой размер. А это уже проблема для некоторых пользователей. Особенно если вам нужно скачать png-файл с сайта или, наоборот, отправить его по электронной почте. Даже в наше время безлимитный интернет и скорость 100 Мбит/с есть далеко не у всех. Например, мобильный трафик часто тарифицируется. И когда нужно скачать картинку на телефон, начинаешь считать буквально каждый килобайт.

В этой статье мы рассмотрим, как сжать увесистые изображения без визуальной потери качества. Также мы расскажем вам о программке, которая способна сжать баннер в формате png 450 Кб в 3,5 раза.

Особенности программы PNG

Давайте сразу к сути. Подготовили краткое руководство о том, как правильно пользоваться приложением TinyPNG. Кстати, в народе его часто называют просто Панда. Просто потому что на главном сайте программы https://tinypng.com/ изображена панда, жующая бамбук.

Так вот, для каких целей используется программа TinyPNG? Она применяется для уменьшения размеров изображений, чтобы ускорить загрузку веб-страниц. Оптимизация осуществляется по заданному алгоритму – удаляются лишние данные, уменьшается количество цветов. Однако разница для человеческого глаза остаётся практически незаметной.

Как уменьшить картинку PNG без потери качества?

Используя программу TinyPNG, вы сможете значительно уменьшить размер изображений, и веб-страницы с ними начнут грузиться намного быстрее. Давайте приступим!

  1. Откройте официальный сайт сервиса: https://tinypng.com/
  2. Когда tinypng загружена во вкладке браузера, у вас появится выбор. Используя опцию Drag and Drop, вы сможете перетащить файл мышкой прямо из проводника либо программы Total Commander в область, выделенную штрихами. Также можно просто нажать на неё.
  3. После того, как файлы загружены, TinyPNG приступает к работе. Процесс отображается на экране, а после завершения сможете узнать, насколько качественно «Панда» смогла сжать файл как в процентах, так и в размерах.

Мы провели эксперимент на небольшом «подопытном» баннере размером 450 Кб. После того, как было выполнено сжатие, его размер уменьшился до 130 Кб, то есть на 72%.

Остаётся всего ничего – нажать ссылку Download и выполнить загрузку уже оптимизированного изображения.

Программа tinypng умеет сжимать и несколько файлов одновременно. Для этого нужно выполнить их загрузку, а после сжатия нажать кнопку Download All. Все картинки загрузятся в одном архиве. При желании, можно сохранить картинки в Dropbox или любой другой облачный сервис.

Таким образом, если вам приходится регулярно иметь дело с файлами png и jpg, сервис Panda станет отличным подспорьем в оптимизации картинок. Кстати, этот сервис ещё и плагины предлагает для того же Фотошопа, WordPress и Magento 2.

Особенности сервиса Kraken

Еще один полезный онлайн сервис для оптимизации фото и картинок. Позволяет сжимать обычные jpg файлы, а также статичные, анимированные «гифки», PNG с альфа-каналами. Поддерживает работу во всех браузерах, доступны плагины Firefox, Chrome.

Загрузка файлов осуществляется несколькими способами:

  • Через опцию Drag and Drop.
  • C использованием uploader (загрузчика).
  • С указанием ссылки.

Пользователь может выбрать 2 варианта оптимизации: без сжатия, сжатие с небольшими потерями. В 1-м случае качество практически не меняется, но и размер остаётся прежним. Во втором случае выигрыш просто разительный.

Особенности Optimizilla

Как сжать картинки с помощью сервиса «Оптимизилла» на сайте http://optimizilla.com?

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

  • Загружайте до 20 картинок сразу. Для этого достаточно нажать кнопку «Загрузить».
  • Нажимайте на изображения, чтобы управлять качеством.
  • Используйте слайдер и компьютерную мышь для выбора оптимального варианта сжатия.
  • Уже обработанные файлы вы можете скачивать по одному или сразу все в архиве ZIP.

Как работает сервис IMGonline сжатие?

Ещё один ультраполезный ресурс, который находится по адресу https://www.imgonline.com.ua/compress-image.php Просто укажите на ПК или телефоне количество фото (от 1 до 100) и нажмите ОК. Чем выше процент качества, тем большим будет размер фото. И наоборот, при меньшем качестве (от 50 до 75%) результатом будет уменьшенный размер картинку. При этом исходное фото остаётся без изменений, и вам будет предоставлено другое обработанное изображение.

Таким образом, используя перечисленные выше сервисы, можно сжимать рисунки, изображения в различных форматах, оптимизируя работу сайта.

4 метода сжатия файлов изображений PNG в Windows, Mac и Linux

PNG, расшифровывается как Portable Network Graphics, является широко используемым форматом изображений. Хотя это формат файла без потерь, он сжимает визуальный контент. Однако файлы изображений PNG всегда имеют больший размер. Чтобы сэкономить место на диске или быстро опубликовать в Интернете, вам может потребоваться сжать изображение PNG файлы регулярно. Поэтому в этой статье предполагается представить четыре способа сжатия файлов изображений PNG в Windows, Mac OS X / 11 и Linux. Некоторые из них даже могут сжимать изображения на 70% без размытия.

Сжать PNG

Часть 1: Самый простой способ сжать PNG

Если вы не любите устанавливать программное обеспечение на свой компьютер, Apeaksoft бесплатный онлайн-компрессор изображений это лучший вариант для сжатия PNG онлайн. Он не только прост в использовании, но и способен уменьшать изображения от МБ до КБ без потери качества.

1. Сжатие изображений PNG онлайн с сохранением прозрачности.

2. Пакетная обработка до 40 изображений без потери качества.

3. Повысьте производительность, используя передовые технологии.

4. Доступно для всех машин под управлением Windows, Mac OS X / 11 и Linux.

Одним словом, Free Online Image Compressor — это самый простой способ сжать размер файла изображения PNG.

Как сжать PNG онлайн

Шаг 1Откройте веб-браузер, скопируйте и вставьте https://www.apeaksoft.com/free-online-image-compressor/ в адресную строку и нажмите Enter ключ для доступа к онлайн-компрессору PNG.

Шаг 2Хит Добавить изображения кнопку на странице, чтобы активировать диалог открытия файла. Затем найдите файлы PNG, которые вы хотите сжать, выберите их и нажмите Откройте загрузить их. Или вы можете перетащить эти изображения PNG на веб-страницу напрямую.

Наконечник : Убедитесь, что размер каждого PNG-изображения не превышает 5 МБ.

Шаг 3После загрузки онлайн-компрессор PNG выполнит эту работу автоматически. Когда это будет сделано, вы увидите кнопку Скачать. Здесь вы можете скачать каждое сжатое изображение отдельно или получить все файлы в одном пакете, нажав Скачать все кнопку.

Часть 2. Сжатие изображения PNG в Windows

Если вы предпочитаете сжимать изображение PNG вручную на ПК, встроенная программа Paint — простой выбор. С помощью Paint вы можете обрезать изображение PNG, чтобы уменьшить размер файла или изменить размер. Кроме того, преобразование PNG в JPG может еще больше сжимать исходное изображение.

Шаг 1 Найдите изображение PNG, которое вы хотите сжать в JPG. Щелкните правой кнопкой мыши на файле, выберите Открыть с помощью и выберите Paint, чтобы открыть его в Windows Paint.

Шаг 2 Во-первых, используйте Выберите инструмент на верхней панели инструментов. Перетащите флажок, чтобы закрыть часть, чтобы оставить, а затем нажмите урожай инструмент для вырезания изображения.

Шаг 3 Затем выберите Изменение размера инструмент, чтобы открыть диалоговое окно изменения размера. выбирать Пикселейи установите меньшие значения в горизонтальный и вертикальный коробки. щелчок OK чтобы подтвердить это.

Шаг 4 Наконец, нажмите Файл меню, выберите Сохранить как и выберите JPEG изображение, Во всплывающем диалоговом окне перейдите в определенный каталог, чтобы сохранить выходные данные, добавьте имя и сохраните сжатый файл PNG на свой компьютер.

PowerPoint также является инструментом, помогающим сжать изображения на компьютере Windows.

Часть 3: Сжатие изображения PNG на Mac

Когда дело доходит до сжатия изображения PNG в Mac OS X / 11, у вас меньше возможностей, чем на ПК. Есть несколько редакторов изображений, предлагающих версию для Mac, например Photoshop. Он позволяет изменять размер изображения PNG и сжимать его.

Шаг 1 Запустите ваш Photoshop и перетащите изображение PNG в программу.

Шаг 2 Нажмите и раскройте Фото товара меню и выберите пункт Размер изображения чтобы открыть диалог Размер изображения. регулировать Ширина и Высота в меньший размер, чтобы сжать PNG. Проверьте Resample и выберите Бикубический Острый, которые сохраняют резкость при сжатии изображения.

Шаг 3 Удар OK кнопка, чтобы закрыть диалог Размер изображения. Если вы хотите сжать изображение PNG без потери качества, экспортируйте изображение напрямую. В противном случае вы можете сжать PNG в JPG, чтобы уменьшить размер файла.

Примечание: Как и в случае с Paint, Photoshop может одновременно сжимать только одно изображение PNG. Если у вас есть более крупные изображения, повторите описанную выше процедуру, чтобы сжать их одно за другим.

Больше решений для изменить размер фотографии на MacВы можете проверить это здесь.

Часть 4: Сжатие PNG в Linux

Хотя вы можете сжимать изображения PNG, сохраняя прозрачность, используя TinyPNG и другие веб-приложения в Linux, командные строки по-прежнему распространены. Мы используем Pngquant в качестве примера, чтобы показать вам процедуру.

Шаг 1 Установите компрессор PNG, выполнив командную строку $ sudo apt install pngquant.

Шаг 2 Показать оригинальный размер файла PNG с помощью команды $ du -sh pngimage.png, Замените pngimage.png именем вашего PNG-изображения.

Шаг 3 Сожмите ваше изображение с помощью команды $ pngquant pngimage.png, Тогда сжатый файл будет называться pngimage-fs8.png.

Шаг 4 Проверьте размер сжатого файла с помощью $ du -sh pngimage-fs8.png, Вы обнаружите, что размер файла PNG становится намного меньше. Согласно нашему тесту, командная строка может сжать изображение PNG размером 152 КБ в 48 КБ.

Часть 5. Часто задаваемые вопросы о сжатии PNG

Вопрос 1: Можно ли сжать изображения в формате PNG?

Ответ: Да, PNG изображения могут быть сжаты. Файлы изображений PNG представляют собой сжатые растровые изображения без потерь. Даже если изображения PNG сжаты, размер файла может быть очень большим. Таким образом, вы можете уменьшить размер файла PNG с помощью компрессора изображений.

Вопрос 2: Какой типичный размер файла для PNG до и после сжатия?

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

Вопрос 3: Для чего используется формат файла PNG?

Ответ. Файл PNG содержит растровое изображение проиндексированных цветов и использует сжатие без потерь. Это похоже на файл GIF, но без ограничений авторского права. Короче говоря, файлы PNG обычно используются для хранения графики для веб-изображений.

Вопрос 4: Каковы преимущества PNG?

Ответ: Чтобы узнать о преимуществах PNG, мы сравниваем его с другими популярными форматами изображений. Во-первых, PNG изначально создавался как улучшенная замена GIF. PNG не может хранить динамический визуальный контент, но он намного меньше, чем GIF. По сравнению с JPG, PNG больше, но он может хранить прозрачные слои. Если вы хотите сжать PNG при сохранении прозрачности, вы должны сохранить формат изображения. Сжатие PNG в JPG приведет к потере слоя прозрачности. Кроме того, JPG имеет большой коэффициент сжатия, что снижает качество изображения. JPG — лучший выходной формат для фотографий, в то время как PNG — лучший вариант для изображений, хранящих текст, штриховые рисунки и другую графику.

Заключение

В этой статье рассказывается о нескольких способах сжатия файлов изображений PNG в Windows, Mac OS X / 11 и Linux. Все они обладают уникальными преимуществами и преимуществами. Например, Apeaksoft Free Online Image Compressor может сжимать PNG онлайн без необходимости установки какого-либо программного обеспечения. Кроме того, как веб-приложение оно доступно для всех ноутбуков и компьютеров. Вы можете взять свой любимый инструмент и следовать нашему руководству, чтобы выполнить задание. Если у вас есть дополнительные вопросы, связанные со сжатием PNG, запишите их под этой статьей.

JPEG и PNG — в чём разница форматов?

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

Формат JPEG

JPEG (он же JPG) — это формат изображений, который использует сжатие с потерями и не поддерживает прозрачность. Позволяет настраивать уровень качества сохраняемого изображения — при его снижении удаляются детали и добавляются шумы на изображение, однако размер становится более компактным. JPG в зависимости от настроек может обеспечить сжатие как 2:1, так и 100:1 — но качество прямо пропорционально коэффициенту сжатия. Название формата — аббревиатура от Joint Photographic Experts Group.

JPEG поддерживает цветовые пространства 24-bit RGB и CMYK, а также 8-bit Grayscale. CMYK и Grayscale используются достаточно редко и их поддержка вызывает нарекания.

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

Используемые расширения для файлов — .jpg and .jpeg (работают идентично).

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

Формат PNG

PNG 24 — это формат изображений, который работает с полноцветными изображениями, использует сжатие без потерь и позволяет сохранять прозрачность. Настроить качество сохранения в PNG 24 невозможно, однако, можно адаптировать сохраняемое изображение для достижения минимального размера файла: для этого можно снизить количество цветов в изображении. Название формата — акроним от Portable Network Graphics.

Существует также формат PNG 8 — он более компактный, чем PNG 24, но применим только для изображений с очень ограниченных количеством цветов: 256 — это максимум. В случае использования PNG 8 для изображений с большим количеством цветов сжатие будет с потерями и с эффектом постеризации.

PNG до 2017 года не поддерживал EXIF, но затем его поддержка была реализована в стандарте. В фотографии PNG используется редко — для компактного хранения файлов больше подходит JPEG, а для профессиональной работы лучше подходят RAW-форматы DNG или TIFF.

PNG 24 и PNG 8 используют расширения для файлов .png, используемая битность записывается в метаданные файла и по расширению не определяется.

С прикладной точки зрения PNG 24 оптимален для изображений с небольшим количеством цветов, например, для иконок, схем, рисунков и скриншотов. Если же цветов в изображении меньше 256, то еще более эффективное сжатие возможно в PNG 8.

Резюме. JPEG и PNG — какой формат оптимальнее использовать?

Фотографии и изображения с большим количеством цветов лучше всего сохранять в JPEG. Но стоит помнить, что алгорим компрессии JPEG сжимает изображения с потерей качества.

Иконки, схемы, картинки с большим количеством текста и изображения с прозрачностью оптимальнее сохранять в PNG 24. Алгорим компрессии PNG 24 сжимает изображения без потери качества.

TinyPNG — сжатие изображений PNG с сохранением прозрачности

Что делает TinyPNG?

TinyPNG использует интеллектуальные методы сжатия с потерями, чтобы на уменьшить размер файла на PNG. За счет выборочного уменьшения количества цветов в изображении для хранения данных требуется меньше байтов. Эффект почти незаметен, но он очень сильно влияет на размер файла!

Почему мне следует использовать TinyPNG?

PNG полезен, потому что это единственный широко поддерживаемый формат, который может частично хранить прозрачных изображений .Формат использует сжатие, но файлы могут быть большими. Используйте TinyPNG для сжатия изображений для ваших приложений и сайтов. Он будет использовать меньшую полосу пропускания и будет загружаться быстрее .

Кто-нибудь может отличить?

Отличный вопрос! Позвольте мне провести параллельное сравнение. Ниже представлены две фотографии моего двоюродного брата. Левое изображение сохраняется как 24-битный PNG прямо из Adobe Photoshop. Справа то же изображение, обработанное TinyPNG. Заметили разницу?

Исходный прозрачный PNG
Размер файла 57 КБ vsShrunk прозрачный PNG
Размер файла 15 КБ

Как это работает?

Отличный вопрос! Когда вы загружаете файл PNG (переносимая сетевая графика), похожие цвета в вашем изображении объединяются.Этот метод называется «квантованием». Уменьшая количество цветов, 24-битные файлы PNG можно преобразовать в гораздо меньшие 8-битные цветные изображения с индексом. Также удаляются все ненужные метаданные. В результате лучше файлы PNG с 100% поддержкой прозрачности . Ешьте свой торт и тоже ешьте!

На изображении выше размер файла уменьшен на более чем на 70% . У меня отличное зрение, но я тоже не вижу разницы! Используйте оптимизированное изображение, чтобы сэкономить трафик и время загрузки, и посетители вашего сайта будут вам благодарны.

Везде ли поддерживается?

Отличный вопрос! Файлы, созданные TinyPNG, отлично отображаются во всех современных браузерах , включая мобильные устройства . По-прежнему требуется поддержка Internet Explorer 6? Обычно он игнорирует прозрачность PNG и отображает сплошной цвет фона. С TinyPNG фон снова становится прозрачным. Бинарная прозрачность без обходных путей!

Безопасно ли использовать анимированный PNG?

Отличный вопрос! Chrome, Firefox и Safari поддерживают APNG.Только Microsoft Edge пока не поддерживает формат. Если у вас есть браузер Edge, вы можете проголосовать за поддержку APNG на сайте отзывов разработчиков Microsoft.

Apple добавила анимированные стикеры в iMessage с выпуском iOS 10. Если вы хотите создавать и сжимать стикеры размером менее 500 КБ, взгляните на пример стикера iMessage Panda на Github.

А как насчет фотошопа?

Отличный вопрос! Только Photoshop CC 2015, 2017 и 2018 может сохранять изображения как проиндексированные файлы PNG с альфа-прозрачностью.В других версиях это невозможно, и Photoshop CS5 даже не может правильно их отображать.

Вы можете использовать Сохранить для Интернета , чтобы экспортировать изображения в виде 24-битных прозрачных файлов PNG и загрузить их в TinyPNG. Мы конвертируем их в крошечные проиндексированные файлы PNG. Вы также можете установить плагин TinyPNG Photoshop. Он позволяет масштабировать, просматривать и сохранять сжатые изображения PNG и JPEG прямо из Photoshop.

Почему вы создали TinyPNG?

TinyPNG — Developer API

Начало работы

Получив ключ, вы можете сразу же приступить к сжатию изображений.Официальные клиентские библиотеки доступны для Ruby, PHP, Node.js, Python, Java и .NET. Вы также можете использовать плагин WordPress для сжатия изображений JPEG и PNG. А если у вас есть магазин Magento, вы можете просто установить расширения для Magento 1 CE, Magento 1 EE или Magento 2 CE, чтобы оптимизировать изображения продуктов.

Сообщество также создало большое количество сторонних надстроек, использующих Developer API.

Вы также можете создать свою собственную интеграцию с любым клиентом HTTP (S).Сервер сожмет ваше изображение и ответит URL-адресом, по которому вы можете получить результат.

 curl --user api:  ВАШ_API_KEY  \
      --data-binary @  unoptimized.png  -i https://api.tinify.com/shrink
 

Функции

Одинаковый API для изображений JPEG и PNG

API сжимает изображения JPEG и PNG. Вам нужно только загрузить исходное изображение и загрузить результат. Все остальное происходит автоматически .

Загрузить напрямую или предоставить URL-адрес изображения

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

Сохранить метаданные

Вы можете выбрать сохранение информации об авторских правах , GPS-местоположения и даты создания в сжатых изображениях JPEG. Для изображений PNG может быть сохранена информация об авторских правах.

Amazon S3 и Google Cloud Storage

(новый)

Вы можете указать API для сохранения оптимизированных изображений непосредственно в ваших сегментах Amazon S3 или Google Cloud Storage . При этом вы также можете установить собственные заголовки Cache-Control и Expires.

Идеальное изменение размера изображения

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

Обнаружение интересующей области

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

Обнаружение вырезанного изображения

(новый)

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

TinyPNG — Поддержка плагинов Photoshop

Это раздел поддержки TinyPNG и TinyJPG Photoshop плагин с инструкциями по установке, дополнительной помощью, советами и трюки.Вы также всегда можете скачать ваш плагин , лицензия и счет-фактура еще раз.

Инструкции по установке Mac

Установка плагина на macOS довольно просто. Страница загрузки предлагает вам два файла. Один файл содержит плагин, а другой файл — вашу лицензию. Вы будете необходимо скопировать оба файла в папку плагинов Photoshop, как показано ниже.

  1. Вы получите ссылку на страницу загрузки по электронной почте. Загрузите двух файлов.

  2. Откройте Finder и перейдите к установке Adobe Photoshop. папка. Папка по умолчанию — Macintosh. HD / Applications / Adobe Photoshop … Здесь вы найдете папку под названием Plug-ins .

  3. Откройте второе окно Finder и перейдите в папку «Загрузки». Выбирать как TinyPNG-JPG.license , так и TinyPNG-JPG.plugin и перетащите эти два файла в папку Плагины папка.

  4. Плагин установлен.

Использование плагина на Mac

После того, как вы установили плагин, вы можете начать использовать его для сохранения сжатые файлы JPEG и PNG с помощью Adobe Photoshop.

  1. Перезапустите Photoshop и откройте файл изображения . Проверять чтобы убедиться, что он установлен в режим RGB, CMYK, lab или градации серого.

  2. В меню файла щелкните Файл> Экспорт> TinyPNG и TinyJPG … 900 24.

    Заметили сочетание клавиш на скриншоте? Продолжайте читать, если вы хотите использовать плагин как профессионал!

  3. Появится диалоговое окно плагина с предварительным просмотром ваше сжатое изображение PNG.Вы можете ввести в файл имя и при желании изменить масштаб изображения или расположение папки. Нажмите Сохранить , и все готово!

Инструкции по установке для Windows

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

  1. После покупки плагина вы получите ссылку на страницу загрузки.Здесь можно скачать как установщик и файл лицензии.

  2. Теперь запустите установщик. Это скопирует плагин в ваш Photoshop CS5, CS6, CC, CC 2014, CC 2015, CC 2017, CC 2018, Папки программы CC 2019 или CC 2020.

    Если вы используете антивирусный сканер, например Avast Business Antivirus или AVG AntiVirus и возникли проблемы с установкой, вам может потребоваться временно отключить это.

  3. Используйте Explorer, чтобы скопировать TinyPNG-JPG.файл лицензии из Загрузите папку в папку с плагинами Photoshop. Папка плагина обычно находится в C: \ Program Files \ Adobe \ Adobe Photoshop … \ Plug-ins .

    Если вы используете 64-битную версию Windows, вам может потребоваться скопировать файл лицензии дважды . Photoshop обычно находится в программные файлы и программные файлы (x86) .

  4. Плагин установлен.

Использование плагина в Windows

После того, как вы установили плагин, вы можете начать использовать его для сохранения сжатые файлы PNG с помощью Adobe Photoshop.

  1. Перезапустите Photoshop и откройте файл изображения . Проверять чтобы убедиться, что он установлен в режим RGB, CMYK, lab или градации серого.

  2. В меню файла щелкните Файл> Экспорт> TinyPNG и TinyJPG … 900 24.

    Заметили сочетание клавиш на скриншоте? Продолжайте читать, если вы хотите использовать плагин как профессионал!

  3. Появится диалоговое окно плагина с предварительным просмотром ваше сжатое изображение PNG.Вы можете ввести в файл имя и при желании изменить масштаб изображения или расположение папки. Нажмите Сохранить , и все готово!

Советы и приемы

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

  • Вы можете сохранить часть вашего изображения, создав выборов . Используйте инструмент Marquee Tool , чтобы создайте выделение и выберите File> Export> TinyPNG и TinyJPG .Окно предварительного просмотра теперь покажет это выделение и скажет Экспорт выделения в дно. Нажмите Сохранить , и ваш выбор будет сохранен.

  • Вы также можете сохранить часть изображения, используя ломтиков . Используйте инструмент Slice Tool , чтобы создать кусочек. Текущий выбранный фрагмент будет обозначен значком желтая граница. При желании дайте вашему фрагменту собственное имя с помощью щелкнув правой кнопкой мыши и выбрав Edit Slice Options … . В имя настраиваемого фрагмента будет использоваться для имени файла вместо имя изображения.Затем выберите File> Export> TinyPNG и Юрий Юрьевич . В окне предварительного просмотра теперь будет отображаться пользовательский фрагмент. и внизу будет указано Экспорт среза .

  • В Photoshop вы можете добавить сочетание клавиш в плагин. Для этого выберите Edit> Keyboard. Ярлыки … 900 24. Перейдите в меню приложения > Файл> Экспорт> TinyPNG и TinyJPG … и нажмите любимую клавишу комбинация. Например, вы можете нажать ⌘ + ⇧ + P.Photoshop предупредит вас, если комбинация уже занята.

  • Вам не нужно беспокоиться о цветовых профилях . Изображения автоматически конвертируются в sRGB для максимальной совместимость между браузерами и устройствами.

  • Вы можете использовать скрипт Photoshop для управления плагин с JavaScript, VBScript или AppleScript. Это очень удобен для работы с изображениями. Используя эту технику мы создали примеры скриптов которые сжимают файлы JPEG и PNG и пример экспорта Layer Comps для оптимизированных изображений.Ты можешь скачать скрипты и скопируйте их в папку «Сценарии» в Photoshop. Новое меню элементы появятся в Файл> Автоматизировать и в Файл> Скрипты после копирования скриптов в Photoshop.

  • Плагин поддерживает пакетную автоматизацию . Ты первый нужно будет создать экшен Photoshop, использующий плагин. При создании действия обязательно оставьте предложенный файл название без изменений. Затем вы можете выбрать File> Automate> Партия… . В появившемся диалоговом окне вы можете выберите вновь созданное действие из раскрывающегося списка. Под Source вы можете выбрать папку со всеми изображениями вы хотите сжать. Назначение необходимо установить на Нет , потому что плагин сохраняет JPEG и PNG файлы в свою папку. Вы можете изменить эту папку в панель действий. Дважды щелкните по нему, чтобы выбрать другой пункт назначения.

  • MacOS поддерживает табуляцию через диалоги , но это по умолчанию выключен.Вы можете включить его в Системе Настройки . Перейдите к Keyboard и нажмите на Ярлыки . Выберите радиокнопку Все элементы управления показаны внизу. После включения вы можете вкладывать через диалоговое окно предварительного просмотра и с помощью пробела нажмите кнопки. Полный доступ с клавиатуры также можно активировать с помощью клавиши комбинация Ctrl + Fn + F7.

  • Плагин поддерживает RGB, CMYK, лабораторный и оттенки серого изображений. Есть несколько форматов изображений, плагин не поддерживает.Это многоканальные, двухтональные и индексированные файлы изображений. Пункт меню TinyPNG и TinyJPG будет недоступны для этих изображений. Если вы хотите экспортировать это изображение форматы с плагином, вы можете сначала выбрать Image> Mode> Цвет RGB и пункт меню TinyPNG и TinyJPG будут снова активен.

  • Поддерживаются артборды Photoshop . Первый выбор любой артборд или слой внутри артборда в вашем Layers панель. Затем выберите File> Export> TinyPNG. и TinyJPG , чтобы открыть окно предварительного просмотра и сохранить выбранный артборд.

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

Известные ограничения

  • Меню Экспорт может быть затенено . К исправьте это, вам нужно будет изменить цветовой режим изображения, выбор Изображение> Режим> Цвет RGB и Изображение> Режим > 8 бит / канал . После внесения этих изменений вы должны быть возможность экспортировать изображение с помощью плагина.

  • Оптимизация изображений JPEG с помощью плагина может результат — немного больший выход , чем с веб-сервис и API. Причина, по которой это может произойти, заключается в том, что в Photoshop доступны только данные необработанного изображения , тогда как веб-сервис и API также знают предыдущий JPEG уровень сжатия.

О покупке

  • Ваша лицензия действительна для одного компьютера используется многими людьми, или несколько компьютеров используются one человек .Многопользовательские лицензии действительны для несколько компьютеров или несколько пользователи .

  • Вы можете получить дополнительные лицензии с тем же Адрес электронной почты. Просто купите их одну за другой на странице плагина. Будут показаны все плагины на странице загрузки вместе с датой покупки.

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

  • Вы можете загрузить счет вашей покупки на страницу загрузки плагина. Вы можете следовать этим инструкциям для macOS или Окна чтобы сохранить его как PDF .

Загрузите еще раз

Ищете свой плагин , лицензия или счет-фактура ? Перейти к вашей панель управления, чтобы просмотреть или загрузить их снова.

Системные требования

Плагин предназначен для Photoshop CS5, CS6, CC, CC 2014, CC 2015, CC 2017, CC 2018, CC 2019 и CC 2020.

Плагин Mac совместим с OS X 10.9 (Mavericks), OS X 10.10 (Йосемити), OS X 10.11 (El Capitan), macOS 10.12 (Sierra), macOS 10.13 (High Sierra), macOS 10.14 (Mojave), macOS 10.15 (Catalina) и macOS 11 (Big Sur). Если вы не уверены, какая версия macOS вы бежите, вы легко это узнаете. Щелкните значок Apple в верхнем левом углу экрана и выберите Об этом Mac . А появится диалоговое окно с номером версии macOS посередине. если ты используете Photoshop CS5, убедитесь, что вы запустить CS5 в 64-битном режиме что по умолчанию.

Плагин для Windows совместим с 32- и 64-разрядными версиями. версии фотошопа. Он поддерживает Windows 7, Windows 8, Windows 8.1 и Windows 10. Если вы не уверены, какая версия Windows, которую вы используете, вы можете щелкнуть правой кнопкой мыши Компьютер и затем на Properties . В появившемся диалоговом окне версия Windows, которую вы установили.

Инструкции для реселлеров

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

Цены, расходы на обслуживание и поддержку

Цена у посредника на плагин Photoshop такая же, как и цена для постоянных клиентов. Специальных скидок для реселлеров нет, договоренности с предпочтительными поставщиками или эксклюзивные контракты с торговыми посредниками. Лучшая поддержка включена в стоимость плагина и там нет обязательных затрат на обслуживание. Клиенты и реселлеры имеют гарантия возврата денег, если товар неудовлетворителен.Нет предложения со скидкой, но иногда мы раздаем скидку, когда компания покупает сразу много плагинов. Например, если реселлер заказывает 20 плагинов, мы можем раздать 1 или 2 плагина бесплатно.

Процедура оплаты

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

Форма заказа запрашивает Личная информация . Здесь Торговый посредник может указать название своей компании-посредника и адрес электронной почты.Квитанция об оплате и счет будут отправлены на этот адрес. Реселлерам из Европейского Союза также необходимо указать свои Номер НДС. Под Реквизиты для оплаты кредитная карта информация может быть заполнена или опция оплаты через PayPal может быть выбрал.

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

Отгрузка и доставка

Торгового посредника просят указать имя и адрес электронной почты конечный пользователь. После покупки ПО и лицензия будут передаются и отправляются в электронном виде конечному пользователю. Это ручной шаг в процессе.

Конечному пользователю будет предоставлен доступ к загрузке на Панель управления Photoshop. Здесь они могут скачать программное обеспечение и лицензию. Он также показывает установку инструкции и позволяет загружать незначительные обновления программного обеспечения в будущее.Программное обеспечение может быть отправлено напрямую по почте, если конечные пользователи трудности с доступом к приборной панели.

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

Будущие обновления подключаемых модулей

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

Дополнительная помощь и поддержка

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

Уровни сжатия PNG | CImage и img.php

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

PNG имеет набор алгоритмов сжатия, а именно от 0 (без сжатия) до 9. По умолчанию позволяет реализации PHP GD выбирать алгоритм.

Уровни представляют собой сочетание размера файла и времени на сжатие / распаковку. Формат PNG не содержит потерь, поэтому результирующее изображение всегда точно такое же.

Используйте опцию co, параметр compress , чтобы решить, какой алгоритм сжатия PNG должен использоваться. Вот пример того, как разные значения влияют на размер файла.

Этот пример основан на ? Src = kodim23.png .

Что Алгоритм Размер файла
по умолчанию PHP решает 820 КБ
& co = 1 1 929KB
& co = 2 2 917KB
& co = 3 3 891KB
& co = 4 4 845KB
& co = 5 5 834KB
& co = 6 6 820 КБ
& co = 7 7 815KB
& co = 8 8 811KB
& co = 9 9 809KB

Размер файла различается на 120 КБ (13%) в зависимости от используемого алгоритма.Настройка по умолчанию дает неплохую работу.

Примечательно, что размер исходного изображения на самом деле составляет 728 КБ. Обработка и сохранение с помощью PHP GD увеличивает размер файла или не прилагает максимальных усилий для сжатия изображения.

Последующая обработка изображения PNG с помощью внешнего инструмента может дополнительно уменьшить размер файла.

JPEG против PNG: какой формат сжатого изображения лучше?

Daven Mathies / Digital Trends

В цифровых изображениях преобладают два формата изображений: JPEG (или JPG) и PNG.

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

JPEG

Сокращение от Joint Photographic Experts Group — команды, которая разработала формат. JPEG стал стандартным сжатым форматом в цифровой фотографии и обмене изображениями в Интернете благодаря тщательному балансу размера файла и качества изображения.

Точное соотношение различается в зависимости от используемой программы и настроек, но типичное изображение JPEG имеет коэффициент сжатия 10: 1. Если вы начнете с изображения размером 10 МБ и экспортируете его как JPEG, у вас должно получиться изображение размером примерно 1 МБ. JPEG не должен иметь заметной разницы в качестве, хотя это зависит от содержания исходного изображения и типа файла.

Для этого JPEG использует дискретное косинусное преобразование (DCT). Хотя математика, лежащая в основе этого, сложна, этот алгоритм сжатия просматривает все изображение, определяет, какие пиксели в изображении достаточно похожи на пиксели вокруг него, и объединяет пиксели в плитки (группы пикселей, которые имеют одинаковое значение).

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

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

JPEG также следует избегать с изображениями с большим объемом текста или иллюстрациями с резкими линиями, поскольку определенные линии имеют тенденцию к размытию из-за сглаживания. (Сглаживание — это намеренное размытие, предназначенное для устранения грубых краев.) Как вы можете видеть на изображении ниже, снимке экрана, сделанном с нашей домашней страницы, текст и белый фон показывают много артефактов в формате JPEG (справа) по сравнению с PNG ( левый).

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

JPEG поддерживает 8-битные цветовые пространства как RGB, так и CMYK, но его возможности CMYK оставляют желать лучшего. (Современные принтеры прекрасно справляются с файлами RGB, так что это не большая проблема. Однако это поможет, если вы по-прежнему будете использовать более качественные форматы для печати.)

За прошедшие годы появилось и исчезло множество вариаций JPEG.Например, JPG-LS был разработан для исправления сжатия с потерями, но он так и не закрепился и в конечном итоге отошел на второй план. JPG2000 также попытался решить проблему без потерь, но ему тоже не удалось добиться успеха. BPG, новый формат, основанный на стандарте видео H.265, был полон решимости заменить JPEG, но так и не получил широкого распространения.

Создатели JPEG недавно поделились новым форматом, разработанным не для замены JPEG, а для того, чтобы существовать вместе с ним как вариант для более быстрой потоковой передачи. В JPEG XS сжатие всего шесть раз вместо 10, но более простые алгоритмы означают, что файл быстрее справляется с задачами потоковой передачи.Потенциальная замена может прийти в виде HEIF, который также основан на стандарте h.265. Там, где другие потерпели неудачу, HEIF может добиться успеха благодаря поддержке одного из крупнейших технологических брендов: Apple. Ему еще предстоит пройти путь, но все больше программ для редактирования изображений и большее количество устройств добавляют поддержку нового формата, такого как JPEG Pleno, который предлагает пользователям отличный набор инструментов, который включает голографические изображения, текстуры с глубиной, облака точек и свет. поля.

Плюсы Минусы
Малый размер файла Сжатие без потерь
Встроенная поддержка EXIF ​​ Не подходит для печати CMYK
Широко поддерживаемые Без поддержки прозрачности

PNG

Акроним от Portable Network Graphics, PNG — это формат файлов без потерь, разработанный как более открытая альтернатива формату обмена графическими данными (GIF).

В отличие от JPEG, который основан на сжатии DCT, PNG использует сжатие LZW, которое аналогично форматам GIF и TIFF. В упрощенном виде двухэтапное сжатие LZW в PNG берет строки битов, содержащихся в данных изображения, затем сопоставляет эти более длинные последовательности с сопровождающими короткими кодами, хранящимися в словаре (иногда называемом кодовой книгой), который хранится в файле изображения. В результате получается файл меньшего размера, сохраняющий высокое качество.

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

Одной из выдающихся особенностей PNG является поддержка прозрачности. Как для цветных изображений, так и для изображений в градациях серого пиксели в файлах PNG могут быть прозрачными. Это позволяет создавать изображения, которые аккуратно накладываются на содержимое изображения или веб-сайта.Как видно из приведенного выше GIF-изображения, многие программы редактирования — в данном случае Adobe Photoshop Mix — используют клетчатый фон для обозначения прозрачности графики. Благодаря этому PNG отлично подходит для логотипов, особенно с текстом, используемых на веб-сайтах. С другой стороны, если вы создаете прозрачный фон в Photoshop и сохраняете изображения в формате JPG, этот прозрачный фон станет белым, потому что формат не поддерживает прозрачность.

Когда дело доходит до фотографии, PNG может показаться надежной альтернативой проприетарным форматам RAW для хранения изображений без потерь.Тем не менее, правда в том, что есть много лучших альтернатив, таких как Adobe Digital Negative (DNG), которые вы можете снимать даже на свой смартфон, и TIFF. PNG также изначально не поддерживает данные EXIF, которые включают такую ​​информацию, как выдержка, диафрагма и ISO, с камеры, которой он был снят.

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

Как и JPEG, PNG также претерпел несколько изменений на протяжении многих лет. APNG — это все еще поддерживаемый формат, предназначенный для воспроизведения анимированных функций GIF. Он не так распространен, но поддерживается многими современными браузерами.

Еще один забавный лакомый кусочек заключается в том, что на ранних этапах разработки PNG было предложено называть его PING, аббревиатура от «PING Is Not GIF», нахальная критика создателей формата GIF.

Плюсы Минусы
Сжатие без потерь Размер файла больше, чем у JPEG
Держатель прозрачной пленки Нет встроенной поддержки EXIF ​​
Отлично подходит для текста и скриншотов

Какой лучше?

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

Если вы хотите поделиться фотографией с камеры в Instagram, Twitter и т. Д., Лучше всего использовать JPEG. Он меньше по размеру, оптимизирован для фотографии и широко поддерживается практически на всех платформах и сервисах, которые только можно вообразить.

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

Рекомендации редакции

Сжатие и фильтрация (PNG: Полное руководство)

Сжатие и фильтрация (PNG: Полное руководство)

Одна из сильных сторон PNG, особенно по сравнению с изображениями в форматах GIF и TIFF. форматы, это его сжатие. Как я отмечал в Глава 1, «Введение в PNG», основная мотивация движущая сила дизайна портативной сети Графический формат должен был создать замену GIF, который был не только бесплатным. но и улучшение по существу во всех отношениях.Как результат, Сжатие PNG полностью без потерь, то есть исходные данные изображения могут быть точно восстановлены, бит для бит — точно так же, как в GIF и большинстве форматов TIFF. [67]

Я написал более длинную и технически подробную главу о сжатии PNG. для справочника по сжатию без потерь, отредактировал Халид Сайуд и опубликовал в декабре 2002 года издательством Academic Press. (теперь Elsevier Science). Он также включает более строгие тестовые данные. А почти финальный черновик доступен в формате PDF по следующей ссылке:

 http: // www.libpng.org/pub/png/book/LCH-png-chapter.pdf 

Я обновлю его до финальной версии и конвертирую в формат HTML когда позволяет время.

9.1. Фильтрация

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

В качестве примера из реальной жизни (хотя и не совсем реалистичного), Рассмотрим изображение, известное как 16 миллионов.PNG . Этот 24-битное изображение RGB размером 512 × 32 768 содержит по одному пикселю каждого возможные цвета — всего их более 16 миллионов. Как необработанные данные, это поэтому требуется 48 МБ для хранить. Простое сжатие в стиле PNG без фильтрации сводит его к 36 МБ, уменьшение размера всего на 25%. Но с включенной фильтрацией то же самое двигатель сжатия уменьшает его до 115 989 байт, что более чем в 300 раз лучше чем в случае без фильтрации, при общем коэффициенте сжатия 434! [68] Zowie .

Реальные данные изображения редко бывают настолько идеальными, но фильтрация действительно улучшается. сжатие в полутоновых и полноцветных изображениях, и это может помочь в некоторых палитра изображений.PNG поддерживает пять типов фильтров и кодировщик. может использовать разные фильтры для каждой строки пикселей изображения. В Таблице 9-1 перечислены пять типов фильтров.

Таблица 9-1. Типы фильтров PNG
Имя Описание
Нет Каждый байт не изменен.
Дополнительная

Каждый байт заменяется разницей между ним и « соответствующий байт » слева от него.

вверх

Каждый байт заменяется разницей между ним и байтом над ним (в предыдущем ряду, как было до фильтрации).

Среднее значение

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

Паэт

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

Последний метод требует пояснений. Изобретенный Аланом Пэтом Предиктор Паэта вычисляется, сначала вычисляя базовое значение , равное к сумме соответствующих байтов слева и выше за вычетом байта в левый верхний. (Например, базовое значение может быть равно 228 + 228 — 227 = 229.) Тогда разница между базовым значением и вычисляется каждый из трех соответствующих байтов, и байт, который дал наименьшую абсолютную разницу — то есть тот, который был наиболее близок к базовому значению — используется в качестве предиктора и вычитается из целевого byte, чтобы получить отфильтрованное значение.В случае ничьей соответствующий байт слева имеет приоритет как прогнозируемое значение, за которым следует одно прямо выше. Обратите внимание, что все вычисления для получения предсказателя Паэта выполняются с использованием точной целочисленной арифметики. Окончательный расчет фильтра, на с другой стороны, выполняется с использованием модульной арифметики base-256; это верно для все типы фильтров.

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

На другом конце спектра большие пиксели (например, 24-битный RGB или 64-битный RGBA) также обрабатываются как байты, но только соответствующих байта в сравнении. Для любого данного байта соответствующий байт слева от него является одно смещение на количество байтов на пиксель.Это означает, что красные байты в изображение истинного цвета сравнивается с красными байтами, зеленым с зеленым, а синее — с синий. Если есть альфа-канал, всегда сравниваются альфа-байты; если глубина выборки составляет 16 бит, сравниваются старшие (наиболее значимые) байты с старшими байтами в том же цветовом канале, а младшие байты сравниваются с ниже. Другими словами, похожие значения всегда будут сравниваться и использоваться. в надежде повысить эффективность сжатия. Рассмотрим изображение RGB, Например; красные, зеленые и синие значения любого пикселя могут быть довольно разные, но соседние пары красного, зеленого и синего часто будут аналогичный.Таким образом, преобразованные байты будут стремиться к нулю, даже если исходных байтов не было. Это настоящая точка фильтрации: большая часть преобразованные байты будут сгруппированы вокруг нуля, таким образом давая сжатие движок меньший, более предсказуемый диапазон значений байтов, с которым нужно справиться.

А как насчет краев? Если « соответствующий байт » слева или выше не существует, алгоритм не зацикливается и не использует байты с другой стороны изображения; вместо этого он обрабатывает отсутствующий байт как ноль.Обертывание метод был фактически рассмотрен, но помимо того факта, что нельзя обернуть верхний край изображения без полного нарушения возможности потоковой передачи и постепенно отображать PNG-изображение, дизайнеры посчитали, что только несколько изображения выиграют (и минимально), что не оправдывает потенциальная дополнительная сложность.

Переплетение также немного затрудняет работу. Для целей фильтрации, каждый проход чересстрочной развертки обрабатывается как отдельное изображение со своим собственным ширина и высота.Например, в чересстрочном изображении 256 × 256 проходы будут рассматриваться как семь меньших изображений с размерами 32 × 32, 32 × 32, 64 × 32, 64 × 64, 128 × 64, 128 × 128 и 256 × 128 соответственно. [69] Это позволяет избежать неприятной проблемы определения соответствующих байтов между ряды разной ширины.

Так как же кодировщик на самом деле выбирает правильный фильтр для каждой строки? Проверить все возможные комбинации явно невозможно: даже 20-рядный изображение потребует тестирования более 95 триллионов комбинаций, где « тестирование » будет включать фильтрацию и сжатие всего изображения.Более простой подход, хотя по-прежнему затратно с точки зрения вычислений, заключается в постепенном тестовом сжатии каждого ряд, сохраните наименьший результат и повторите для следующего ряда. Это составляет фильтрация и сжатие всего изображения пять раз, что может быть разумный компромисс для изображения, которое будет передаваться и декодироваться многими раз.

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

Фильтры

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

Для изображений в градациях серого и полноцветных изображений с 8 или более битами на выборку, с или без альфа-каналов динамическая фильтрация почти всегда полезна. В подход, который к настоящему времени стал стандартным, известен как минимальная сумма абсолютные различия эвристический и был впервые предложен Ли Дэниелом Крокером в феврале 1995 г.В этом подходе отфильтрованные байты обрабатываются как подписанные. значения — то есть любое значение больше 127 считается отрицательным; 128 становится -128 и 255 становятся -1. Затем суммируются абсолютные значения каждого из них, и выбирается тип фильтра, который дает наименьшую сумму. Этот подход эффективно отдает предпочтение последовательностям, близким к нулю и поэтому смещен по отношению к типу фильтра None.

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

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

9.2. Алгоритм сжатия Deflate

В некотором смысле сжатие отвечает за само существование Portable Формат сетевой графики (вспомните главу 1 «Введение в PNG»), и это, несомненно, один из наиболее важные компоненты PNG. Спецификация PNG определяет одиночный метод сжатия, алгоритм deflate для всех типов изображений.

Часть алгоритмов сжатия LZ77, deflate была определена компанией PKWARE в 1991 году в рамках проекта 1.93а бета-версия их PKZIP архиватор. Независимо реализовано Жан-Лу Гайи и Марк Адлер, сначала для утилит Info-ZIP Zip и UnZip, а вскоре после этого для утилиты GNU gzip алгоритм дефлятирования проверенный в боях и сегодня, вероятно, наиболее часто используемый алгоритм сжатия файлов в Интернете. Хотя это не алгоритм наилучшего сжатия, известный [70] deflate имеет очень желаемое сочетание характеристик: высокие надежность, хорошее сжатие, хорошая скорость кодирования, отличная скорость декодирования, минимальные накладные расходы на несжимаемые данные и скромная, четко определенная память следы как для кодирования, так и для декодирования.

Как алгоритм, производный от LZ77, deflate в основном основан на концепции раздвижного окна . Один начинается с предположения, что многие типы интересные данные, от двоичных компьютерных инструкций до исходного кода и обычный текст к изображениям, повторяются в разной степени. Базовый идея скользящего окна состоит в том, чтобы сразу представить окно некоторой ширины перед текущей позицией в потоке данных (и, следовательно, скольжение по мере обновления текущей позиции), который можно использовать как своего рода словарь для кодирования последующих данных.Например, если текст этой главы — это поток данных, затем текущая позиция в самом как только вы прочитаете, это , здесь . До этого момента немного больше более 13 000 байт текста, включая, среди прочего, шесть копий фрагмент « или пример » (эй, есть еще один!). Вместо кодирования такие строки, как буквальный текст, deflate заменяет каждую парой чисел с указанием его длины (в данном случае 10 байт) и расстояния до одного из предыдущих экземпляров (возможно, 950 байт между пятым и шестым).Чем больше длина строки, тем больше экономия на ее кодировании. как указатель в окно.

Есть несколько способов реализовать LZ77; подход, используемый deflate, « жадный » алгоритм, первоначально разработанный Джеймсом Сторером и Томасом Шиманский — отсюда и название, ЛЗСС. LZSS использует упреждающий буфер и находит самое длинное совпадение для буфера в скользящем окне. Если совпадение превышает заданную пороговую длину, строка кодируется как пара длина / расстояние и буфер продвигаются на соответствующую сумму.Если самое длинное совпадение — , недостаточно , первый символ в предварительный буфер выводится как буквальное значение, а буфер расширяется одним. В любом случае алгоритм продолжает поиск самого длинного совпадения. для нового содержимого буфера.

Алгоритм deflate на самом деле немного умнее, чем предыдущий. описание подсказало бы. Вместо того, чтобы просто сохранять длину / расстояние пары и буквальные байты как есть, он дополнительно сжимает данные на Кодирование по Хаффману вывода LZ77.Этот подход обычно именуется ЛЖ; Уникальность deflate заключается в методе комбинирования литералы и длины в одно дерево Хаффмана, используя как фиксированные, так и динамические коды Хаффмана и его разделение выходного потока на блоки так что области несжимаемых данных могут храниться как есть, а не значительно расширяется, что может произойти с алгоритмом LZW.

Спецификация PNG дополнительно требует, чтобы поток данных deflate должен соответствовать формату zlib 1.0.В частности, размер скользящее окно должно быть степенью 2 между 256 и 32 байтами. килобайт включительно, а также небольшой заголовок и трейлер zlib. обязательный. Последний включает 32-битную контрольную сумму на несжатых данных ; напомним, что сжатый поток уже покрывается 32-битным значением CRC PNG в каждом блоке IDAT.

Более подробное объяснение алгоритма deflate и данных zlib формат выходит за рамки этой книги, но полный zlib и deflate спецификации доступны от http: // www.zlib.org/zlib_docs.html. Кроме того, ссылка, такая как Книга сжатия данных , Марк Нельсон и Жан-лу Гейли, бесценны для понимания многих алгоритмы сжатия, включая LZ77 и LZSS.

Практически независимая реализация алгоритма deflate и сложно, и ненужно. Доступны почти все реализации PNG сегодня использует свободно доступную библиотеку сжатия zlib, и примеры в Части III «Программирование с PNG » тоже делают то же самое.[71] А пока просто отмечу, что zlib поддерживает десять уровней сжатия. (в том числе и без сжатия), отличающиеся используемыми алгоритмами для поиска совпадающих строк и пороговых значений для прекращения поиска преждевременно.

Кроме того, отметим, что КПД компрессионного двигателя увеличивается. по мере обработки большего количества данных с максимальной эффективностью, когда есть достаточно данных, чтобы заполнить скользящее окно. Это происходит главным образом потому, что там меньше строк доступно в « словаре », но также изначально потому, что те строки, которые действительно существуют, ограничены по длине — очевидно, они не могут быть больше, чем количество данных в окне.Так, например, когда 25% сжатых данных было получено, это может соответствовать только 20% пикселей. Но из-за буферизации данных в сетевых протоколах и приложениях, любые большие расхождения из-за действительно низкоэффективного кодирования при запуске будут имеют тенденцию стираться на уровне 512 байт (или выше). То есть, хотя первые 50 байтов могут представлять только 1% сжатия, эти байты обычно не будет доступен до тех пор, пока не будет получен 512-й байт, при этом эффективность сжатия могла достигать 10% или лучше.И так как это обычно верно для большинства алгоритмов сжатия, в том числе используется как в формате GIF, так и в PNG, разумно сравнить (как я делал в главе 1 «Введение в PNG») появление несжатых пикселей в момент, когда они равны получено сжатых данных.

9.2.1. Последнее слово о патентах

Как упоминалось в конце Глава 7, «История формата переносимой сетевой графики», Сообщается, что Стак утверждал, что Алгоритм deflate защищен двумя их патентами.Фактически, там — это ряд патентов, которые могут быть нарушены совместимая реализация deflate, в том числе принадлежащая самой PKWARE это включает в себя отсортированные хеш-таблицы. Но спецификация deflate включает раздел о реализации алгоритма без нарушение, [72] И, конечно же, этому рецепту следует и сам zlib. Хотя эти вещи никогда не могут быть на 100% уверены, пока они не будут проверены в суде, разработчики и пользователи могут быть достаточно уверены в том, что использование zlib и его реализация алгоритма deflate не подлежит лицензированию сборы.

9,3. Сравнения в реальном мире

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

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

Таблица 9-2. Семь не анимированных, отобранных на основе научных данных изображений GIF
Имя Размер GIF
linux-пингвины 38 280
Linux-tinypeng 1,249
linux_bigcrash 298 529
linux_lgeorges 20 224
linux_rasterman 4,584
sun-tinylogo 1,226
techweb-scsi-compare 27 660
ИТОГО 391 752

Размер изображений варьировался от чуть более килобайта до почти 300 килобайты (точные размеры байтов указаны в Таблица 9-2) и размером от 32 × 32 до 800 × 600.Все, кроме первого и последние были переплетены. При преобразовании в PNG с помощью gif2png утилита (Глава 5, «Приложения: Конвертеры изображений»), сохраняющая переплетение вручную и не вводить новые текстовые аннотации, вещи несколько улучшилось; Таблица 9-3 показывает предварительные результаты.

Таблица 9-3. Семь одинаковых изображений GIF после преобразования в PNG
Имя Размер PNG Изменить
linux-пингвины 35 224 -8.0%
Linux-tinypeng 722 -42,2%
linux_bigcrash 283 839 -4,9%
linux_lgeorges 20 476 + 1,2%
linux_rasterman 4 812 + 5,0%
sun-tinylogo 566 -53,8%
techweb-scsi-compare 20 704 -25.1%
ИТОГО 366 343 -6,5%

Пять изображений уменьшились при преобразовании в PNG — три из них довольно сильно существенно — пока двое выросли. В целом набор улучшился на 6,5%. в байтах. Поскольку gif2png использует стандартные настройки Справочный код libpng, [73] его результаты можно считать типичными для « хороших » кодировщиков PNG. Но хозяин веб-сайта часто готовы потратить немного больше времени на сжатие в обмен на дополнительную экономию полосы пропускания в долгосрочной перспективе.Это где pngcrush (также обсуждается в Глава 5, «Приложения: преобразователи изображений») входит. Таблица 9-4 показывает его результаты; проценты снова относятся к исходным размерам файлов GIF.

Таблица 9-4. Семь одинаковых изображений GIF после преобразования и оптимизации PNG
Имя Оптимизированный
Размер PNG
Изменить
linux-пингвины 34 546 -9.8%
Linux-tinypeng 710 -43,2%
linux_bigcrash 282 948 -5,2%
linux_lgeorges 19 898 -1,6%
linux_rasterman 4,731 + 3,2%
sun-tinylogo 550 -55,1%
techweb-scsi-compare 19,155 -30.7%
ИТОГО 362 538 -7,5%

Итак, мы видим, что современный кодировщик PNG вытесняет еще один процентный пункт от общего размера, со всеми, кроме одного, изображения теперь меньше оригинала. Этот одинокий противник стоит присмотритесь в этом случае. Я уже отмечал, что linux_rasterman.gif было одним из изображений с чересстрочной разверткой; предположить это не было? Версия GIF без чересстрочной развертки составляет 4568 байт, всего 16 байтов меньше оригинала.Но версия PNG без чересстрочной развертки либо 4067 байтов (gif2png), либо 4000 байтов (pngcrush) — экономия составляет 11,0% или 12,4% по сравнению с GIF без чересстрочной развертки. Другими словами, PNG двумерная схема чересстрочной развертки может иметь значимых отрицательных влияние на сжатие , особенно для небольших изображений. Это важный момент, который следует учитывать при создании изображений: переплетение действительно необходимо для изображения 152 × 96 (как в этом случае), когда штраф больше 18% от размера файла?

Этот пример мог быть поучительным, но семь изображений не составляют статистически достоверный образец.[74] Итак, давайте рассмотрим еще несколько наборов данных. Один пример из реальной жизни взят из курс под названием « Создание убедительных и эффективных миров VRML 2.0 » на конференции VRML98 в Монтерее, Калифорния. Хотя содержание курс был в остальном выдающимся, один слайд, сравнивающий форматы изображений для 3D текстуры были довольно тревожными с точки зрения PNG. Он показал информацию отображены в Таблице 9-5, вместе с самими текстурами (которые здесь опущены):

Таблица 9-5. Сравнение исходных файлов PNG, GIF и JPEG из курса VRML98
Имя Размеры Тип Размер JPEG Размер GIF Размер PNG
линолеум1 128 × 128 оттенки серого 10 956 7 055 16 008
песик 128 × 256 цвет 9 897 24 605 89022
туман 128 × 128 оттенки серого + альфа 26 732
круговой переход 128 × 128 оттенки серого + альфа 15,735
прикладом 128 × 128 цвет + прозрачность 4,367

Даже если не более подробностей, чем показано здесь, есть по крайней мере одна проблема. очевидно: в строке 2 изображение JPEG имеет глубину 24 бита, а GIF — только 8 бит.Судя по размеру соответствующего PNG, можно было бы предположить (правильно), что PNG тоже 24 бита. Так что, с одной стороны, PNG по сравнению с изображением той же глубины, в котором используется сжатие с потерями, а с другой стороны, его сравнивают с изображением, глубиной всего лишь 1/3, которое также приводит к сжатию с потерями. Это больно.

Как выяснилось, были и другие проблемы: были созданы изображения PNG. с помощью редактора изображений, не известного своими возможностями сжатия, а некоторые PNG были чересстрочными, хотя их аналоги в формате GIF — нет.(И поскольку это был курс VRML, я должен отметить, что ни один браузер VRML в Существование фактически использует чересстрочную развертку для постепенного рендеринга текстур, поэтому такие образы вообще нет смысла создавать.) В итоге все эти факторы — сжатие JPEG с потерями, смешивание 24-битных и 8-битных изображений, смешивая чересстрочные и постстрочные изображения, и используя особенно плохой кодировщик для сжатия PNG — работал с нашим любимым форматом изображений.

После вечернего игрового поля, используя GIF-файлы в качестве исходных изображений для PNG, отключив чересстрочную развертку и используя комбинацию преобразования и инструменты кодирования (включая pngcrush), результаты были значительно лучше для PNG, как показано на Таблица 9-6.

Таблица 9-6. Обновленное сравнение PNG, GIF и JPEG для изображений курса VRML98
Имя Размер JPEG Размер GIF Оригинал
Размер PNG
Оптимизированный
Размер PNG
PNG
Изменить
линолеум1 10 956 7 055 16 008 6,753 -57.8%
песик 9 897 24 605 89022 22 555 90 564 -74,7%
туман 26 732 16 221 -39,3%
круговой переход 15,735 6 638 -57,8%
прикладом 4,367 3,965

Здесь я отметил самую маленькую версию каждого изображения жирным шрифтом; единственное, что не является PNG, — это цветной JPEG, который неудивительно.Что интересно, JPEG в оттенках серого ( linoleum1.jpg ) есть больше, чем версия GIF и оптимизированная PNG, несмотря на предполагаемое преимущества сжатия с потерями. На то есть как минимум три причины. Во-первых, как GIF, так и PNG автоматически получают трехкратную экономию. что каждый пиксель имеет глубину всего 1 байт вместо 3 байтов. Во-вторых, JPEG находится в относительном невыгодном положении при работе с изображениями в оттенках серого, потому что большинство преимущества сжатия возникают из-за того, как он обрабатывает цветовые компоненты изображения.В-третьих, это конкретное изображение скорее искусственное, чем естественное, с довольно большим количеством относительно резких деталей, что делает его особенно плохо подходит для сжатия в стиле JPEG.

Но, пожалуй, самая яркая особенность Таблица 9-6 показывает, насколько плохо оригинал кодировщик сделал на своем PNG картинки. Реальная экономия от 40% до 75% — это необычно, но благодаря плохое программное обеспечение для кодирования, они не так уж необычны, как можно было бы надеяться.

В качестве еще одного реального примера (но, возможно, более представительного того, что может ожидать типичный веб-сайт), владелец http: // www.feynman.com/ обнаружил, что когда он обратил 54 неодушевленные GIF в PNG, размер коллекции увеличился с 270 431 до 327 590 байт. Поскольку все исходные изображения глубиной 8 бит или меньше — и даже худший кодировщик PNG будет в среднем, так же или лучше, чем GIF в PNG с цветовой раскладкой изображения — наиболее вероятным объяснением увеличения размера на 21% является что утилита преобразования создала 24-битные RGB PNG. Действительно, владелец указал, что он использовал утилиту преобразования ImageMagick, более старую версии которых, как сообщается, имели неудачную привычку создавать 24-битные PNG, если явно не указано значение -depth 8 вариант.(Эта проблема, похоже, была исправлена ​​в более поздних версиях, но даже текущие версии содержат 160 байт текста и фона фрагментов на изображение.) Когда исходные файлы GIF были преобразованы в PNG с помощью gif2png вместо этого общий размер упал до 215 668 байт, что составляет 20% от общего экономия по сравнению с GIF. По отдельности GIF-файлы были меньше в 15 из 54 случаев, но не более чем на 340 байт. Из 39 изображений, на которых версия PNG была меньше, треть из них отличалась более чем на килобайт, а один был на 14 КБ меньше.

Для последнего сравнения GIF я скачал во всемирной паутине Коллекция иконок Консорциума, состоящая из 448 неповрежденных GIF картинки. Из них 43 имели встроенные текстовые комментарии, а 39 были чересстрочный. Большинство изображений были размером с иконку (как и ожидалось), с разрешением 64 × 64 или меньше, но было несколько изображения большего размера тоже. Общий размер файлов составил 1 810 239 байт. Преобразование в PNG через gif2png , обработка чересстрочного и построчные изображения отдельно, чтобы сохранить их статус, в результате общий размер PNG составил 1 587 337 байт, или 12.Снижение 3%. Дополнительное сжатие с помощью pngcrush привело к получению 1,554,965 байтов, или уменьшение на 14,1% (относительно размера GIF). Вне 448 изображений, формат PNG победил в сравнении размеров в 285 случаях, проиграл в 161. случаях, и связаны в 2 случаях. Однако, как и в предыдущем тесте, величина различий была решающим фактором: GIF выиграл больше чем килобайт только в 1 случае, тогда как PNG выиграл на эту сумму в 37 корпуса — 4 из которых были больше 10 КБ, 1 — более 64 КБ. В средняя разница для 285 случаев, в которых PNG был меньше, составила 940 байты; для 161 случая GIF это было всего 78 байт.

Наконец, я упомянул о грядущем стандарте JPEG для сжатия без потерь. Пару раз; на это тоже стоит взглянуть. JPEG-LS, как стандарт будет известно, [75] основан на алгоритме Hewlett-Packard LOCO-I. Как это написано, это реализован в версии 0.90 кодировщика локального компьютера HP, доступен только в двоичной форме для HP-UX, Solaris, IRIX и 32-битной Windows платформы. (Независимая реализация доступна как исходный код C код Университета Британской Колумбии.) В сравнении выполненный Адамом Костелло, кодировщик HP был протестирован против pnmtopng и pngcrush на восьми стандартных цветных изображениях в Waterloo ColorSet от BragZone. pnmtopng представляет интерес только из соображений скорости; Несмотря на то, что он умеренно быстрый, локомотив был значительно быстрее. я исключили результаты его размера из сравнения, поскольку, как и ожидалось, pngcrush превзошел его во всех случаях, хотя и со значительными затратами. в скорости.

Результаты были потрясающими. На пяти тестовых изображениях, отнесенных к категории Университет Ватерлоо как « естественный » JPEG-LS превосходит PNG от 5% до 11% — разница небольшая, но, безусловно, значительная.Однако в три изображения с пометкой « художественные », PNG оказался лучше благодаря широким полям, с одно изображение более чем в три раза меньше, чем соответствующая версия JPEG-LS. Эти результаты суммированы в Таблица 9-7; еще раз, размер байта выигрышный формат для каждого изображения выделен жирным шрифтом.

Таблица 9-7. Сравнение форматов PNG и JPEG-LS для цветных изображений Waterloo BragZone
Классификация Имя Всего
пикселей
JPEG-LS
Размер
PNG
Размер IDAT
Относительная
Разница
« натуральный » лена 262 144 445 799 475 430 +6.6%
монарх 393 216 555 012 615 260 + 10,9%
перец 262 144 385 047 425 560 + 10,5%
парус 393 216 767 374 808 606 + 5,4%
тюльпаны 393 216 616 536 680 881 +10.4%
« художественный » Клегг 716 320 653 299 484,589 -25,8%
жаркое 1,235,390 935 285 251 865 -73,1%
Серрано 499 426 293 532 106765 -63,6%

Обратите внимание, что в последнем столбце я использовал размер JPEG-LS в качестве ссылка, которая эффективно работает с PNG — если бы я использовал PNG вместо этого изображение frymire , например, будет показывать JPEG-LS как 271.На 3% больше, что выглядит намного эффектнее! Также обратите внимание, что я использовал размер данных PNG IDAT для сравнения, а не фактический размер файла PNG; это было сделано, потому что локомотив, кажется, кодирует необработанные данные JPEG, без накладных расходов, связанных со стандартными форматами файлов JPEG как JFIF и SPIFF.

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

9,4. Практические советы по сжатию

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

9.4.1. Советы для пользователей

Ниже приводится список советов для пользователей программного обеспечения, поддерживающего PNG:

Используйте правильный формат изображения

Если у вас есть фотографические изображения и их качество в формате JPEG равно приемлемо, используйте JPEG! JPEG почти всегда будет меньше PNG, особенно для цветных изображений. И наоборот, если у вас есть изображения только с несколько цветов и / или острые края (например, текст и простая графика), JPEG почти никогда не бывает правильным решением; используйте вместо этого PNG или GIF.Для прозрачности двоичного файла также используйте PNG или GIF; для частичной прозрачности или RGB без потерь, используйте PNG или TIFF; для анимации используйте MNG или GIF.

Используйте правильную глубину пикселей

Например, не конвертируйте GIF (который с практической точки зрения всегда имеет глубину 8 бит или меньше) до 24-битного PNG; что будет автоматически увеличивает размер файла в три раза. Аналогично, если при наличии опции не сохранять изображение в оттенках серого как RGB; сохраните это как в оттенках серого или, в худшем случае, в формате PNG на основе палитры.Точно так же не используйте полный альфа-канал, если одноцветная прозрачность (а-ля GIF) будет хватит; он удваивает размер изображений в градациях серого и добавляет 33% к размер RGB.

Следствие: квантование и дизеринг полноцветных изображений в палитру, если качество приемлемо

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

Используйте чересстрочную развертку с осторожностью

Чередование — это способ передачи полезной информации. части изображения, особенно в Интернете, чтобы конечный пользователь может щелкнуть область с горячей ссылкой до того, как изображение будет полностью загружено, если она так что выбирает.Но, как я видел ранее, двумерная схема чересстрочной развертки PNG может в некоторых случаях ухудшить сжатие на 15%, особенно для небольших изображений. С небольшие изображения в любом случае передаются по сети довольно быстро, они обычно нет необходимости в чересстрочной развертке.

Используйте правильные инструменты

В первых шести главах я обсуждал ряд поддерживающих PNG приложений и, по возможности, отметили их ограничения; использовать это в качестве руководства при выборе инструментов, если у вас есть выбор.Даже если ваша программа обычно хорошо сжимает изображения PNG, рассмотрите возможность использования оптимизатор, такой как pngcrush, для всего, когда вы закончите; [76] обязательно сделайте это, если ваша программа не известна своим сжатием представление. Для преобразования GIF в PNG используется специальный файл gif2png. самое эффективное решение, даже с учетом его постоянно бета-версии номер; он сохраняет как прозрачность, так и встроенные текстовые комментарии.

Не включайте ненужную информацию

Длинное сообщение об авторских правах или другой текст может добавить 100 байт и более, что много для значков и других мелких картинки.

9.4.2. Советы программистам

Ниже приводится список советов для программистов:

Используйте правильную глубину пикселя

Считай цвета! Или, по крайней мере, так когда параметр сжатия « лучший », и вы не знаете, что изображение оттенки серого — это не займет много времени, и компьютеры хороши в таких вещах. Если цветов 256 или меньше, напишите изображение; Это приведет к экономии в три раза в файле PNG. размер относительно изображения RGB.

Используйте правильную глубину пикселей II

Если изображение имеет цветовую карту, не Предположим, что пиксели должны иметь глубину 8 бит. Если есть только один или два цвета, напишите 1-битное изображение. Если есть три или четыре цвета, напишите 2-битное изображение. Если имеется от 5 до 16 цветов, напишите 4-битное изображение. (Это единственные полезные случаи для PNG.) Механизм сжатия не может компенсируйте раздутые пиксели! Выбор правильной глубины для палитры на основе image уменьшит размер файла от двух до восьми раз. относительно 8-битного изображения.

По возможности используйте оттенки серого

Если вы знаете, что изображение серое, посмотрите, можно ли его написать более компактно как PNG в оттенках серого, чем как PNG с цветовым отображением — это автоматически истина, если имеется более 16 оттенков серого. Так вы сэкономите до 780 байт, исключив палитру. Но не думайте, что 16 или меньше оттенков автоматически означает, что изображение может быть записано как 4-битное (или меньше) оттенки серого. Оттенки серого обязательно подразумевают, что оттенки равномерно распределяется от черного к белому.Если, например, 16 оттенков сгруппированы в одной части серого спектра, изображение должно быть записывается как 8-битная шкала серого или на основе 4-битной палитры. Для изображений большего размера подход на основе палитры почти наверняка лучше; для маленьких это зависит от обстоятельств, но 8-битная шкала оттенков серого может оказаться меньше. Пытаться оба, если возможно; это очень быстро для небольших изображений.

Разумно установите параметры сжатия и фильтрации

Для программ, использующих libpng (подробно обсуждается в Части III, «Программирование с PNG»), это это не серьезная проблема; он автоматически поступит правильно, если оставил себе.Но если вы пишете собственный код PNG, следуйте рекомендации в спецификации PNG для подходящих стратегий фильтрации с типами изображений. В частности, используйте тип фильтра «Нет» для цветового отображения. изображения и для изображений в градациях серого глубиной менее 8 бит. Используйте адаптивный фильтрация (эвристика « минимальная сумма абсолютных разностей ») для все остальные случаи.

Обрезать палитру

В отличие от GIF, размер палитры PNG определяется размер блока, поэтому нет необходимости включать 256 записей, если только 173 используется в изображении.При 3 байтах на запись потраченные впустую слоты могут разница в иконках и других мелких изображениях.

Обрезать кусок прозрачности

Крайне редко каждая запись палитры частично или полностью прозрачный. Если есть непрозрачные записи — в частности, если все но один непрозрачен — измените порядок палитры так, чтобы непрозрачные записи находятся в конце. Записи прозрачности, соответствующие этим непрозрачным цвета могут быть опущены.Абсолютно наихудший из возможных подходов — это поместите единственную прозрачную запись в конец палитры ! Эти 255 дополнительных байтов — это много для файла, который в противном случае был бы 500 (или даже 150) байтов.

Разумная прозрачность

Разберитесь, как работают альфа-каналы PNG и блок tRNS. Если альфа маска является двоичной (то есть полностью прозрачной или полностью непрозрачной), посмотрите, соответствуют ли прозрачные части одному цвету или серому оттенок; если да, удалите альфа-канал из файла PNG и используйте вместо этого чанк tRNS (« дешевая прозрачность »).В качестве альтернативы см. если общее количество комбинаций цвет + альфа 256 или меньше; если Итак, напишите цветное изображение с блоком tRNS. Если пользователь запрашивает чтобы изображение RGBA было преобразовано в индексированный цвет, сделайте это разумно. Комбинация фрагментов PNG PLTE и tRNS составляет палитру. чьи записи являются значениями RGBA. Точно такие же алгоритмы, которые квантование и дизеринг 24-битного изображения RGB до 8-битного на основе палитры изображение можно использовать для квантования и дизеринга 32-битного RGBA или 16-битного Оттенки серого + альфа-изображение до 8-битной палитры RGBA.В частности, нельзя рассматривать значения цвета и прозрачности, как если бы они отдельные, не связанные между собой юридические лица; попытка разбить палитру на « цветная часть » и « прозрачная часть » не имеют большего смысла, чем попытка разбить стандартную палитру RGB на красный, зеленый и синие части. Если вы плохо сделаете дешевую прозрачность, пользователь будет вынуждена использовать полный альфа-канал, увеличивая размер файла в четыре раза. Для оттенки серого, альфа-канал « просто » увеличивает размер вдвое. Обратите внимание, что изображение сосульки на рис. C-1 на цветной вставке на самом деле цветовая карта.Если не считать яркого фона, который на самом деле был генерируется приложением для просмотра — половина в полном разрешении выглядит красиво чертовски хорошо, не так ли?

Не включайте ненужные фрагменты в маленькие изображения

Информация о гамме (или блок sRGB) всегда хорош, но полный профиль ICC может увеличить размер в четыре раза небольшого файла изображения. Не включайте текстовый фрагмент программного обеспечения или время chunk или сделайте это только для изображений размером, скажем, более 100 × 100 пикселей.Включайте информацию о точках на дюйм (фрагмент pHY), только если она действительно актуальна к изображению; но пользователь может быть единственным, кто может сделать этот звонок.

Предложите пользователю разумные варианты

Не перегружайте его ненужными подробностями о фильтрах и прочем. технический жаргон. Например, предложите простой флажок для включения переплетение. Предложите простой циферблат или даже два или три варианта выбора по степени сжатия — самая быстрая , типичная и лучшая, возможно.Даже если это увеличит размер файла, предложите включить хотя бы несколько текстовых аннотаций — Автор, Заголовок, Описание и / или Авторское право, например. С другой стороны, предлагают опустить некоторые дополнительная информация, такая как описанная в предыдущем пункте.

Предупредить пользователя о потере данных

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











































 


Глава 9. Сжатие и фильтрация

Одной из сильных сторон PNG, особенно по сравнению с форматами изображений GIF и TIFF, является его сжатие. Как я отмечал в главе 1 «Введение в PNG», основной мотивацией при разработке формата Portable Network Graphics было создание замены GIF, которая была не только бесплатной, но и улучшала его практически во всех отношениях.В результате сжатие PNG осуществляется без потерь, то есть исходные данные изображения могут быть реконструированы точно, побитно — точно так же, как в GIF и большинстве форм TIFF. [67]

Я написал более длинную и технически подробную главу о сжатии PNG для

Справочник по сжатию без потерь

, под редакцией Халида Сайуда и опубликован в декабре 2002 года издательством Academic Press (ныне Elsevier Science). Он также включает более строгие тестовые данные. Почти окончательный вариант доступен в формате PDF по следующей ссылке:

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

9.1. Фильтрация

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

В качестве реального примера (хотя и не совсем реалистичного) рассмотрим изображение, известное как 16million.png. Это 24-битное изображение с разрешением 512 × 32 768 RGB содержит по одному пикселю всех возможных цветов — всего их более 16 миллионов.Поэтому в качестве необработанных данных для хранения требуется 48 МБ. Простое сжатие в стиле PNG без фильтрации сокращает его до 36 МБ, то есть только на 25%. Но с включенной фильтрацией тот же механизм сжатия сокращает его до 115 989 байтов, что более чем в 300 раз лучше, чем в случае без фильтрации, с общим коэффициентом сжатия 434! [68] Zowie.

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

В Таблице 9-1 перечислены пять типов фильтров.

Таблица 9-1. Типы фильтров PNG

Имя Описание
Нет Каждый байт не изменен.
Подчиненный Каждый байт заменяется разницей между ним и «соответствующим байтом» слева от него.
вверх Каждый байт заменяется разницей между ним и байтом над ним (в предыдущей строке, как это было до фильтрации).
Среднее значение Каждый байт заменяется разницей между ним и средним значением соответствующих байтов слева и над ним, усекая любую дробную часть.
Паэт Каждый байт заменяется разницей между ним и предсказателем Paeth соответствующих байтов слева, над ним и вверху слева.

Последний метод требует пояснений. Изобретенный Аланом Пэтом, предсказатель Пэта вычисляется сначала путем вычисления базового значения , равного сумме соответствующих байтов слева и выше за вычетом байта слева вверху. (Например, базовое значение может равняться 228 + 228 — 227 = 229.) Затем вычисляется разница между базовым значением и каждым из трех соответствующих байтов, и байт, который дал наименьшую абсолютную разницу, то есть тот, который был ближе всего к базовому значению — используется в качестве предиктора и вычитается из целевого байта для получения отфильтрованного значения.В случае совпадений соответствующий байт слева имеет приоритет как предсказанное значение, за которым следует байт непосредственно выше. Обратите внимание, что все вычисления для получения предиктора Паэта выполняются с использованием точной целочисленной арифметики. С другой стороны, окончательный расчет фильтра выполняется с использованием модульной арифметики base-256; это верно для всех типов фильтров.

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

На другом конце спектра большие пиксели (например, 24-битный RGB или 64-битный RGBA) также обрабатываются как байты, но сравниваются только соответствующих байтов. Для любого данного байта соответствующий байт слева от него является смещением на количество байтов на пиксель.Это означает, что красные байты в изображении истинного цвета сравниваются с красными байтами, зеленые с зеленым и синие с синими. Если есть альфа-канал, всегда сравниваются альфа-байты; если глубина выборки составляет 16 бит, старшие (наиболее значимые) байты сравниваются с старшими байтами в том же цветовом канале, а младшие байты сравниваются с младшими. Другими словами, аналогичные значения всегда будут сравниваться и использоваться в надежде улучшить эффективность сжатия. Рассмотрим, например, изображение в формате RGB; значения красного, зеленого и синего цветов любого заданного пикселя могут сильно отличаться, но соседние пары красного, зеленого и синего часто будут похожими.Таким образом, преобразованные байты будут иметь тенденцию быть близкими к нулю, даже если исходные байты не были. Это реальная точка фильтрации: большинство преобразованных байтов будут кластеризоваться вокруг нуля, таким образом давая механизму сжатия меньший, более предсказуемый диапазон значений байтов, с которым нужно справиться.

А как насчет краев? Если «соответствующий байт» слева или выше не существует, алгоритм не выполняет циклический переход и не использует байты с другой стороны изображения; вместо этого он обрабатывает отсутствующий байт как ноль.Фактически, рассматривался метод переноса изображения, но помимо того факта, что невозможно обернуть верхний край изображения, полностью не нарушив возможность потоковой передачи и постепенного отображения изображения PNG, дизайнеры посчитали, что только несколько изображений принесут пользу ( и минимально при этом), что не оправдало потенциальной дополнительной сложности.

Переплетение также немного затрудняет работу. В целях фильтрации каждый проход чересстрочной развертки обрабатывается как отдельное изображение со своей шириной и высотой.Например, в чересстрочном изображении 256 × 256 проходы будут обрабатываться как семь меньших изображений с размерами 32 × 32, 32 × 32, 64 × 32, 64 × 64, 128 × 64, 128 × 128 и 256 × 128. соответственно. [69] Это позволяет избежать неприятной проблемы, связанной с определением соответствующих байтов между строками разной ширины.

Так как же кодировщик на самом деле выбирает правильный фильтр для каждой строки? Очевидно, что тестирование всех возможных комбинаций невозможно: даже 20-строчное изображение потребовало бы тестирования более 95 триллионов комбинаций, где «тестирование» включало бы фильтрацию и сжатие всего изображения.Более простой подход, хотя и затратный в плане вычислений, состоит в постепенном тестовом сжатии каждой строки, сохранении наименьшего результата и повторении для следующей строки. Это составляет фильтрацию и сжатие всего изображения пять раз, что может быть разумным компромиссом для изображения, которое будет передаваться и декодироваться много раз.

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

Фильтры

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

Для изображений в градациях серого и полноцветных изображений с 8 или более битами на выборку, с альфа-каналами или без них, динамическая фильтрация почти всегда полезна. Подход, который к настоящему времени стал стандартным, известен как эвристика минимальной суммы абсолютных разностей и впервые был предложен Ли Дэниелом Крокером в феврале 1995 года.В этом подходе отфильтрованные байты обрабатываются как значения со знаком, то есть любое значение, превышающее 127, рассматривается как отрицательное; 128 становится -128, а 255 становится -1. Затем суммируются абсолютные значения каждого из них и выбирается тип фильтра, который дает наименьшую сумму. Этот подход эффективно отдает предпочтение последовательностям, которые близки к нулю, и поэтому смещен по типу фильтра None.

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

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

9.2. Алгоритм сжатия Deflate

В некотором смысле сжатие отвечает за само существование формата Portable Network Graphics (вспомните главу 1 «Введение в PNG»), и это, несомненно, один из наиболее важных компонентов PNG. Спецификация PNG определяет единственный метод сжатия, алгоритм deflate , для всех типов изображений.

Часть алгоритмов сжатия LZ77, deflate была определена PKWARE в 1991 году как часть 1.93а бета-версия их архиватора PKZIP. Независимо реализованный Жан-Лу Гайли и Марком Адлером, сначала для утилит Info-ZIP Zip и UnZip, а вскоре после этого для утилиты GNU gzip , алгоритм deflate прошел боевые испытания и сегодня, вероятно, является наиболее часто используемым алгоритмом сжатия файлов. в Интернете. Хотя это не лучший из известных алгоритмов сжатия, [70] deflate имеет очень желаемое сочетание характеристик: высокая надежность, хорошее сжатие, хорошая скорость кодирования, отличная скорость декодирования, минимальные накладные расходы на несжимаемые данные и скромная, четко определенная память. следы как для кодирования, так и для декодирования.

Как алгоритм, производный от LZ77, deflate в основном основан на концепции скользящего окна . Один из них начинается с предположения, что многие типы интересных данных, от двоичных компьютерных инструкций до исходного кода, от обычного текста до изображений, повторяются в разной степени. Основная идея скользящего окна состоит в том, чтобы представить окно некоторой ширины, непосредственно предшествующее текущей позиции в потоке данных (и, следовательно, скользящее по мере обновления текущей позиции), которое можно использовать как своего рода словарь для кодирования последующих данных. .Например, если текст этой главы представляет собой поток данных, то текущая позиция в тот момент, когда вы читаете это, здесь — . Перед этой точкой находится чуть более 13 000 байт текста, который включает, среди прочего, шесть копий фрагмента «или примера» (эй, есть еще один!). Вместо того, чтобы кодировать такие строки как буквальный текст, deflate заменяет каждую парой чисел, указывающих ее длину (в данном случае 10 байтов) и расстояние до одного из предыдущих экземпляров (возможно, 950 байтов между пятым и шестым).Чем больше длина строки, тем больше экономия на кодировании ее как указателя на окно.

Существуют различные способы реализации LZ77; подход, используемый deflate, представляет собой «жадный» алгоритм, первоначально разработанный Джеймсом Сторером и Томасом Шимански — отсюда и его название — LZSS. LZSS использует упреждающий буфер и находит самое длинное совпадение для буфера в скользящем окне. Если совпадение превышает заданную пороговую длину, строка кодируется как пара длина / расстояние, и буфер продвигается на соответствующую величину.Если самое длинное совпадение , а не достаточно длинное, первый символ в буфере упреждающего просмотра выводится как буквальное значение, и буфер продвигается вперед на единицу. В любом случае алгоритм продолжает поиск самого длинного совпадения для нового содержимого буфера.

Алгоритм deflate на самом деле немного умнее, чем можно было бы предположить из предыдущего описания. Вместо того, чтобы просто хранить пары длина / расстояние и буквальные байты как есть, он дополнительно сжимает данные путем кодирования Хаффмана вывода LZ77.Этот подход обычно называют LZH; Уникальность deflate заключается в его методе объединения литералов и длин в единое дерево Хаффмана, использовании как фиксированных, так и динамических кодов Хаффмана и разделении выходного потока на блоки, так что области несжимаемых данных могут храниться как есть, а не значительно расширяется, что может произойти с алгоритмом LZW.

Согласно спецификации PNG, поток данных deflate должен соответствовать формату zlib 1.0.В частности, размер скользящего окна должен быть степенью 2 между 256 байтами и 32 килобайтами включительно, и требуются небольшой заголовок и конец zlib. Последний включает 32-битную контрольную сумму для несжатых данных ; Напомним, что сжатый поток уже охвачен 32-битным значением CRC PNG в каждом блоке IDAT.

Более подробное объяснение алгоритма deflate и формата данных zlib выходит за рамки этой книги, но полные спецификации zlib и deflate доступны по адресу http: // www.zlib.org/zlib_docs.html. Кроме того, такие ссылки, как The Data Compression Book , Mark Nelson и Jean-Loup Gailly, неоценимы для понимания многих алгоритмов сжатия, включая LZ77 и LZSS.

С практической точки зрения, независимая реализация алгоритма deflate является сложной и ненужной. Почти каждая реализация PNG, доступная сегодня, использует свободно доступную библиотеку сжатия zlib, и примеры в Части III, «Программирование с PNG », тоже делают это.

[71] На данный момент я просто отмечу, что zlib поддерживает десять уровней сжатия (включая один без сжатия), различающихся алгоритмами, используемыми для поиска совпадающих строк, и пороговыми значениями для преждевременного завершения поиска.

Кроме того, обратите внимание, что эффективность механизма сжатия увеличивается по мере обработки большего количества данных, причем максимальная эффективность достигается, когда данных достаточно для заполнения скользящего окна. Это происходит главным образом потому, что в «словаре» доступно меньше строк, но также изначально потому, что те строки, которые действительно существуют, ограничены по длине — очевидно, они не могут быть длиннее, чем объем данных в окне.Таким образом, например, когда было получено 25% сжатых данных, это может соответствовать только 20% пикселей. Но из-за буферизации данных в сетевых протоколах и приложениях любые большие несоответствия из-за действительно низкоэффективного кодирования при запуске будут иметь тенденцию стираться на уровне 512 байт (или выше). То есть, даже если первые 50 байтов могут представлять только 1% сжатия, эти байты обычно не будут доступны до тех пор, пока не будет получен 512-й байт, к этому моменту эффективность сжатия может достигнуть 10% или выше.И поскольку это в целом верно для большинства алгоритмов сжатия, включая те, которые используются как в GIF, так и в PNG, разумно сравнить (как я сделал в главе 1 «Введение в PNG») внешний вид несжатых пикселей на момент, когда было получено равное количество сжатых данных.

9.2.1. Последнее слово о патентах

Как упоминалось в конце главы 7 «История формата переносимой сетевой графики», Stac, как сообщается, заявил, что алгоритм deflate защищен двумя их патентами.Фактически, существует ряд патентов, которые могут нарушить при соответствующей реализации deflate, включая один, принадлежащий самой PKWARE, который включает в себя отсортированные хеш-таблицы. Но спецификация deflate включает раздел о реализации алгоритма без нарушения, [72] и, конечно, сам zlib следует этому предписанию. Хотя эти вещи никогда не могут быть на 100% уверены, пока они не будут проверены в суде, разработчики и пользователи могут быть достаточно уверены в том, что использование zlib и его реализация алгоритма deflate не облагаются лицензионными сборами.

9,3. Сравнения в реальном мире

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

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

Таблица 9-2. Семь не анимированных, отобранных без научных исследований изображений GIF

Имя Размер GIF
linux-пингвины 38 280
Linux-tinypeng 1,249
linux_bigcrash 298 529
linux_lgeorges 20 224
linux_rasterman 4,584
sun-tinylogo 1,226
techweb-scsi-compare 27 660
ИТОГО 391 752

Размер изображений варьировался от немногим более килобайта до почти 300 килобайт (точные размеры байтов приведены в таблице 9-2) и размером от 32 × 32 до 800 × 600.Все, кроме первого и последнего, были переплетены. При преобразовании в PNG с помощью утилиты gif2png (Глава 5, «Приложения: Конвертеры изображений») с сохранением чересстрочной развертки вручную и без добавления новых текстовых аннотаций все несколько улучшилось; Таблица 9-3 показывает предварительные результаты.

Таблица 9-3. Семь одинаковых изображений GIF после преобразования в PNG

Пять изображений уменьшились при преобразовании в PNG — три из них значительно увеличились, а два выросли.В целом размер набора в байтах увеличился на 6,5%. Поскольку gif2png использует стандартные настройки справочного кода libpng [73], его результаты можно считать типичными для «хороших» кодировщиков PNG. Но владелец веб-сайта часто будет готов потратить немного больше времени на сжатие в обмен на дополнительную экономию полосы пропускания в долгосрочной перспективе. Вот где на помощь приходит pngcrush (также обсуждаемый в главе 5, «Приложения: преобразователи изображений»). Таблица 9-4 показывает его результаты; проценты снова относятся к исходным размерам файлов GIF.

Таблица 9-4. Семь одинаковых изображений GIF после преобразования и оптимизации PNG

Итак, мы видим, что современный кодировщик PNG дает еще один процент от общего размера, при этом все изображения, кроме одного, теперь меньше оригинала. В данном случае стоит присмотреться к этой единственной опоре. Я уже отмечал, что linux_rasterman.gif было одним из чересстрочных изображений; предположим, этого не было? Размер GIF без чересстрочной развертки составляет 4568 байт, что всего на 16 байт меньше оригинала.Но версия PNG без чересстрочной развертки составляет либо 4067 байтов (gif2png), либо 4000 байтов (pngcrush) — это экономия 11,0% или 12,4% по сравнению с GIF без чересстрочной развертки. Другими словами, двухмерная схема чересстрочной развертки PNG может иметь существенное отрицательное влияние на сжатие , особенно для небольших изображений. Это важный момент, который следует учитывать при создании изображений: действительно ли чересстрочная развертка необходима для изображения размером 152 × 96 (как в этом случае), когда штраф составляет более 18% от размера файла?

Этот пример мог быть поучительным, но семь изображений не являются статистически достоверной выборкой.[74] Итак, давайте рассмотрим еще несколько наборов данных. Один из реальных примеров — это курс под названием «Создание убедительных и эффективных миров VRML 2.0» на конференции VRML98 в Монтерее, Калифорния. Хотя в остальном содержание курса было выдающимся, один слайд, на котором сравнивались форматы изображений для 3D-текстур, был довольно тревожным с точки зрения PNG. Он показал информацию, представленную в Таблице 9-5, вместе с самими текстурами (которые здесь опущены):

Таблица 9-5. Сравнение исходных файлов PNG, GIF и JPEG из курса VRML98

Даже без дополнительных подробностей, чем показано здесь, очевидна по крайней мере одна проблема: в строке 2 изображение JPEG имеет глубину 24 бита, а GIF — только 8 бит.Судя по размеру соответствующего PNG, можно было бы предположить (правильно), что PNG тоже 24 бита. Таким образом, с одной стороны, PNG сравнивается с изображением такой же глубины, в котором используется сжатие с потерями, а с другой стороны, он сравнивается с изображением, глубина которого составляет лишь одну треть, что также равносильно сжатию с потерями. Это больно.

Как выяснилось, были и другие проблемы: изображения PNG были созданы с помощью редактора изображений, не известного своими возможностями сжатия, и некоторые из PNG были чересстрочными, хотя их аналоги в формате GIF не были.(И поскольку это был курс VRML, я должен отметить, что ни один из существующих браузеров VRML на самом деле не использует чересстрочную развертку для постепенного рендеринга текстур, поэтому, как правило, нет смысла создавать такие изображения.) В результате все эти факторы — JPEG с потерями. Сжатие, смешивание 24-битных и 8-битных изображений, смешивание чересстрочных и построчных изображений и использование особенно плохого кодировщика для сжатия PNG — работало против нашего любимого формата изображения.

После выравнивания игрового поля с использованием GIF в качестве исходных изображений для PNG, отключением чересстрочной развертки и использованием комбинации инструментов преобразования и кодирования (включая pngcrush), результаты были значительно лучше для PNG, как показано в Таблице 9- 6.

Таблица 9-6. Обновленное сравнение PNG, GIF и JPEG для изображений курса VRML98

Здесь я выделил полужирным шрифтом самую маленькую версию каждого изображения; Единственное, что не является PNG, — это цветной JPEG, что неудивительно. Интересно то, что полутоновый JPEG (linoleum1.jpg) больше, чем версия GIF и оптимизированный PNG, несмотря на предполагаемые преимущества сжатия с потерями. На то есть как минимум три причины.Во-первых, и GIF, и PNG получают автоматическую экономию в три раза из-за того, что каждый пиксель имеет глубину всего 1 байт вместо 3 байтов. Во-вторых, JPEG находится в относительном невыгодном положении при работе с изображениями в градациях серого, потому что большинство его преимуществ сжатия связано с тем, как он обрабатывает цветовые компоненты изображения. В-третьих, это конкретное изображение скорее искусственное, чем естественное, с довольно большим количеством относительно резких особенностей, что делает его особенно плохо подходящим для сжатия в стиле JPEG.

Но, пожалуй, самая яркая особенность

Таблица 9-6 показывает, насколько плохо исходный кодировщик работал с изображениями PNG.Реальная экономия от 40% до 75% — это необычно, но благодаря плохому программному обеспечению для кодирования она не так уж необычна, как можно было бы надеяться.

В качестве еще одного реального примера (но, возможно, более представительного того, что может ожидать типичный веб-сайт), владелец http://www.feynman.com/ обнаружил, что когда он преобразовал 54 неодушевленных GIF в PNG, коллекция увеличилась. размером с 270 431 байт до 327 590 байт. Поскольку все исходные изображения имели глубину 8 бит или меньше — и даже худший кодировщик PNG в среднем будет работать так же или лучше, чем GIF с изображениями PNG с цветовой раскладкой — наиболее вероятное объяснение увеличения на 21% Размер заключается в том, что утилита преобразования создавала 24-битные RGB PNG.Действительно, владелец указал, что он использовал утилиту преобразования ImageMagick, более старые версии которой, как сообщается, имели неудачную привычку создавать 24-битные PNG, если явно не была указана опция -depth 8 . (Эта проблема, кажется, была исправлена ​​в более поздних версиях, но даже текущие версии включают 160 байт текста и фоновых фрагментов на изображение.) Когда исходные GIF-файлы были преобразованы в PNG с помощью gif2png, общий размер уменьшился до 215 668 байт. , что дает 20% экономии по сравнению с GIF.По отдельности GIF-файлы были меньше в 15 из 54 случаев, но ни разу не более чем на 340 байт. Из 39 изображений, в которых версия PNG была меньше, одна треть отличалась более чем на килобайт, а одно было на 14 КБ меньше.

Для последнего сравнения GIF я загрузил коллекцию значков Консорциума World Wide Web, состоящую из 448 неповрежденных изображений GIF. Из них 43 содержали встроенные текстовые комментарии, а 39 были чересстрочными. Большинство изображений были размером с иконку (как и следовало ожидать), размером 64 × 64 или меньше, но было и несколько изображений большего размера.Общий размер файлов составил 1 810 239 байт. Преобразование в PNG с помощью gif2png с раздельной обработкой чересстрочных и построчных изображений для сохранения их статуса привело к общему размеру PNG в 1 587 337 байт, или на 12,3%. Дополнительное сжатие с помощью pngcrush привело к получению в общей сложности 1 554 965 байт или уменьшения на 14,1% (по сравнению с размером GIF). Из 448 изображений PNG победил в сравнении размеров в 285 случаях, проиграл в 161 случае и сравнял в 2 случаях. Однако, как и в предыдущем тесте, решающим фактором была величина различий: GIF выиграл более чем на килобайт только в 1 случае, в то время как PNG выиграл столько же в 37 случаях — 4 из которых были больше 10 КБ, 1 более 64 КБ.Средняя разница для 285 случаев, когда PNG был меньше, составляла 940 байт; для 161 случая GIF это было всего 78 байт.

Наконец, я пару раз упомянул о грядущем стандарте JPEG для сжатия без потерь; на это тоже стоит взглянуть. Стандарт JPEG-LS [75] основан на алгоритме Hewlett-Packard LOCO-I. На момент написания он реализован в версии 0.90 кодировщика локального компьютера HP, доступной только в двоичной форме для платформ HP-UX, Solaris, IRIX и 32-разрядных платформ Windows.(Независимая реализация доступна как исходный код C из Университета Британской Колумбии.) В сравнении, проведенном Адамом Костелло, кодировщик HP был протестирован против pnmtopng и pngcrush на восьми стандартных цветных изображениях в ColorSet Waterloo BragZone. pnmtopng представляет интерес только из соображений скорости; Несмотря на то, что он умеренно быстрый, локомотив был значительно быстрее. Я не включил в сравнение результаты его размера, поскольку, как и ожидалось, pngcrush превосходил его по производительности во всех случаях, хотя и со значительными потерями в скорости.

Результаты были потрясающими. В пяти тестовых изображениях, отнесенных Университетом Ватерлоо к категории «естественных», JPEG-LS превосходит PNG на 5–11% — небольшая разница, но определенно значительная. Однако в трех изображениях, помеченных как «художественные», PNG оказался лучше благодаря широким полям, при этом одно изображение более чем в три раза меньше, чем соответствующая версия JPEG-LS. Эти результаты обобщены в

.

Таблица 9-7; еще раз размер в байтах выигравшего формата для каждого изображения выделен жирным шрифтом.

Таблица 9-7. PNG и JPEG-LS Сравнение цветных изображений Waterloo BragZone

Обратите внимание, что в последнем столбце я использовал размер JPEG-LS в качестве эталона, который эффективно работает с PNG — если бы я использовал вместо этого PNG, изображение frymire , например, показало бы JPEG-LS как на 271,3% больше, что выглядит намного эффектнее! Также обратите внимание, что для сравнения я использовал размер данных PNG IDAT, а не фактический размер файла PNG; это было сделано потому, что локомотив, похоже, кодирует необработанные данные JPEG без накладных расходов, связанных со стандартными форматами файлов JPEG, такими как JFIF и SPIFF.

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

9,4. Практические советы по сжатию

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

9.4.1. Советы для пользователей

Ниже приводится список советов для пользователей программного обеспечения, поддерживающего PNG:

Используйте правильный формат изображения

Если у вас есть фотографические изображения и их качество JPEG приемлемо, используйте JPEG! JPEG почти всегда будет меньше PNG, особенно для цветных изображений.И наоборот, если у вас есть изображения с небольшим количеством цветов и / или резкими краями (например, текст и простая графика), JPEG почти никогда не будет правильным решением; используйте вместо этого PNG или GIF. Для прозрачности двоичного файла также используйте PNG или GIF; для частичной прозрачности или RGB без потерь используйте PNG или TIFF; для анимации используйте MNG или GIF.

Использовать правильную глубину пикселя

Например, не конвертируйте GIF (который с практической точки зрения всегда имеет глубину 8 бит или меньше) в 24-битный PNG; это автоматически увеличит размер файла в три раза.Точно так же, если у вас есть опция, не сохраняйте изображение в оттенках серого как RGB; сохраните его как оттенки серого или, в худшем случае, как PNG на основе палитры. Точно так же не используйте полный альфа-канал, если достаточно одноцветной прозрачности (а-ля GIF); он удваивает размер изображений в градациях серого и добавляет 33% к размеру RGB.

Следствие: квантование и дизеринг полноцветных изображений в палитру, если качество приемлемо

Аналогичным образом, если возможно, выполните квантование и дизеринг RGBA или серого + альфа PNG в палитру.Это то, что можете судить только вы, пользователь; ни одно разумное приложение для обработки изображений никогда не будет квантовать (что является преобразованием с потерями), если это не указано вами. Это не проблема для GIF, который реально поддерживает только изображений с цветовым отображением (т. Е. Ваш выбор GIF в качестве выходного формата представляет собой явную инструкцию для квантования), а также не проблема для JPEG, который поддерживает только оттенки серого и истинный цвет. Только PNG поддерживает цветные изображения, изображения в градациях серого и истинного цвета, а также альфа-каналы.

Осторожно используйте переплетение

Interlacing — это способ более быстрой передачи полезных частей изображения, особенно в Интернете, так что конечный пользователь может щелкнуть область с горячими ссылками, прежде чем изображение будет полностью загружено, если он того пожелает. Но, как я видел ранее, двумерная схема чересстрочной развертки PNG может в некоторых случаях ухудшить сжатие на 15%, особенно для небольших изображений. Поскольку небольшие изображения в любом случае передаются по сети довольно быстро, их обычно не нужно чередовать.

Используйте подходящие инструменты

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

[76] обязательно сделайте это, если ваша программа не известна своей производительностью сжатия.Для преобразования GIF в PNG специальный файл gif2png является наиболее подходящим решением, даже с учетом его постоянной бета-версии; он сохраняет как прозрачность, так и встроенные текстовые комментарии.

Не включайте лишнюю информацию

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

9.4.2. Советы программистам

Ниже приводится список советов для программистов:

Использовать правильную глубину пикселя

Подсчитайте цвета! Или, по крайней мере, сделайте это, когда параметр сжатия «лучший», и вы не знаете, что изображение имеет оттенки серого — это не займет много времени, а компьютеры хороши в таких вещах.Если цветов 256 или меньше, напишите изображение с цветовой раскладкой; это приведет к трехкратной экономии размера файла PNG по сравнению с изображением RGB.

Использовать правильную глубину пикселя II

Если изображение размечено по цвету, не предполагайте, что пиксели должны иметь глубину 8 бит. Если есть только один или два цвета, напишите 1-битное изображение. Если есть три или четыре цвета, напишите 2-битное изображение. Если имеется от 5 до 16 цветов, напишите 4-битное изображение.(Это единственные полезные случаи для PNG.) Механизм сжатия не может компенсировать раздутые пиксели! Выбор правильной глубины для изображения на основе палитры уменьшит размер файла от двух до восьми раз по сравнению с 8-битным изображением.

По возможности используйте оттенки серого

Если вы знаете, что изображение серое, посмотрите, можно ли его записать более компактно в формате PNG с оттенками серого, чем в формате PNG с цветовыми картами — это автоматически верно, если имеется более 16 оттенков серого.Это позволит сэкономить до 780 байт за счет исключения палитры. Но не думайте, что 16 или меньше оттенков автоматически означают, что изображение может быть записано как 4-битное (или меньше) оттенки серого. Оттенки серого обязательно подразумевают, что оттенки равномерно распределены от черного к белому. Если, например, 16 оттенков сгруппированы в одной части серого спектра, изображение должно быть записано как 8-битная шкала серого или на основе 4-битной палитры. Для больших изображений подход на основе палитры почти наверняка лучше; для маленьких это зависит, но 8-битный вариант оттенков серого может оказаться меньше.Если возможно, попробуйте оба варианта; это очень быстро для небольших изображений.

Интеллектуальная настройка параметров сжатия и фильтрации

Для программ, использующих libpng (подробно обсуждаемых в Части III, «Программирование с PNG»), это не является серьезной проблемой; он автоматически поступит правильно, если предоставлен самому себе. Но если вы пишете собственный код PNG, следуйте рекомендациям в спецификации PNG для сопоставления стратегий фильтрации с типами изображений. В частности, используйте тип фильтра «Нет» для изображений с цветовым отображением и для изображений в градациях серого с глубиной менее 8 бит.Во всех остальных случаях используйте адаптивную фильтрацию (эвристика «минимальная сумма абсолютных разностей»).

Обрезать палитру

В отличие от GIF, размер палитры PNG определяется размером блока, поэтому нет необходимости включать 256 записей, если в изображении используется только 173. При 3 байтах на запись потраченные впустую слоты могут иметь большое значение для значков и других небольших изображений.

Обрезать кусок прозрачности

Чрезвычайно редко каждая запись палитры бывает частично или полностью прозрачной.Если есть какие-либо непрозрачные записи — в частности, если все, кроме одной, непрозрачные, — измените порядок палитры так, чтобы непрозрачные записи находились в конце. Записи прозрачности, соответствующие этим непрозрачным цветам, могут быть опущены. Абсолютно наихудший из возможных подходов — разместить единственную прозрачную запись на конце палитры! Эти 255 дополнительных байтов — это много для файла, который в противном случае имел бы длину 500 (или даже 150) байтов.

Делайте прозрачность разумно

Узнайте, как работают альфа-каналы PNG и блок tRNS.Если альфа-маска является двоичной (то есть полностью прозрачной или полностью непрозрачной), посмотрите, соответствуют ли прозрачные части одному цвету или оттенку серого; в таком случае удалите альфа-канал из файла PNG и используйте вместо него блок tRNS («дешевая прозрачность»). Или посмотрите, составляет ли общее количество комбинаций цвет + альфа 256 или меньше; если это так, напишите изображение с цветовым отображением с помощью блока tRNS. Если пользователь запрашивает преобразование изображения RGBA в индексированный цвет, сделайте это разумно. Комбинация фрагментов PNG PLTE и tRNS составляет палитру, элементы которой являются значениями RGBA.Точно такие же алгоритмы квантования и дизеринга 24-битного изображения RGB до 8-битного изображения на основе палитры можно использовать для квантования и дизеринга 32-битного RGBA или 16-битного изображения в градациях серого + альфа до 8-битного изображения. Палитра RGBA. В частности, нельзя рассматривать значения цвета и значения прозрачности, как если бы они были отдельными, не связанными между собой объектами; попытка разделить палитру на «цветную часть» и «прозрачную часть» имеет не больше смысла, чем попытка разделить стандартную палитру RGB на красную, зеленую и синюю части.Если вы плохо сделаете дешевую прозрачность, пользователь будет вынужден использовать полный альфа-канал, что в четыре раза увеличит размер его файла. Для оттенков серого альфа-канал «просто» увеличивает размер вдвое. Обратите внимание, что изображение сосульки на рис. C-1 на цветной вставке на самом деле раскрашено. Если не считать яркого фона, который на самом деле был создан приложением для просмотра, половина в полном разрешении выглядит чертовски хорошо, не так ли?

Не включайте ненужные фрагменты в маленькие изображения

Информация о гамме (или блок sRGB) всегда хороша, но полный профиль ICC может в четыре раза увеличить размер небольшого файла изображения.Не включайте текстовый фрагмент программного обеспечения или фрагмент времени или сделайте это только для изображений, размер которых превышает, скажем, 100 x 100 пикселей. Включайте информацию о точках на дюйм (фрагмент pHY) только в том случае, если она действительно имеет отношение к изображению; но пользователь может быть единственным, кто может сделать этот звонок.

Предложите пользователю разумные варианты

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

Предупредить пользователя о потере данных

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

.
Оставить комментарий

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *