Flif: FLIF — Free Lossless Image Format
FLIF – идеальный формат для изображений? / Хабр
Как формат JPEG произвел в свое время революцию среди форматов изображений, так и новый формат FLIF обещает такого же масштаба событие для дизайнеров и веб-разработчиков.
FLIF (Free Lossless Image Format) – новый формат файлов для изображений, обеспечивающий беспрецедентное сжатие без потерь. Файлы получаются:
- На 14% меньше, чем WebP, без потерь
- На 22% меньше, чем BPG, без потерь
- На 33% меньше, чем сжатый через ZopfliPNG PNG-файл
- На 43% меньше, чем обычные PNG-файлы
- На 46% меньше, чем оптимизированные по Adam7 чересстрочные PNG-файлы
- На 53% меньше, чем JPEG 2000, без потерь
- На 74% меньше, чем JPEG XR, без потерь
На Хабре уже опубликованопару статей на тему FLIF. Но мы пойдем дальше: какую еще практическую пользу несет формат, кроме меньшего размера для большинства типов изображений (в частности, для типов без потерь качества)?
Даже если взять наиболее подходящий для определенного типа изображений формат из PNG, JPEG 2000, WebP или BPG, то сжатие по FLIF оказывается в среднем на 12% лучше. А если тот же тест провести на 16-битных изображениях, которые не поддерживаются WebP или BPG, то FLIF окажется лучше на 19%.
Ниже показан график сравнения с другими форматами, построенный по предыдущей версии формата FLIF, с тех пор сжатие по FLIF слегка улучшилось.
Работает для любого типа изображений
Разные форматы сжатия лучше работают с разными форматами изображений. PNG хорошо работает с изображениями, состоящими из линий на однородном фоне. Для обычных фотографий, где можно допустить частичные потери, лучше подходит JPEG. Для медицинских изображений, где потери недопустимы, подойдет JPEG 2000.
Недавно появившиеся форматы WebP и BPG тоже не подходят для всех случаев, поскольку у них есть свои плюсы и минусы.
Преимущество FLIF заключается в том, что он хорошо работает для разных типов изображений. Поэтому конечному пользователю не придется делать выбор используемого формата на основе типа изображений. По ссылке представлена таблица в Google Docs, где показано сравнение разных типов изображений и разных форматов сжатия, примененных к ним. FLIF «побеждает» для всех типов изображений.
Например, для фотографий PNG работает недостаточно хорошо, а WebP, BPG и JPEG 2000 дают лучшее сжатие.
На медицинских снимках PNG и WebP работают относительно плохо, а BPG и JPEG 2000 – гораздо лучше.
На географических картах BPG и JPEG 2000 показывают очень плохие результаты, в то время как PNG и WebP дают хорошее сжатие.
Но на всех 3-х примерах выше FLIF работает лучше остальных.
Последовательная загрузка и без потерь
Формат FLIF обеспечивает сжатие без потерь, но он также может быть применен в ситуациях, когда пользователь не обладает быстрым каналом интернет. Только небольшая часть с начала файла достаточна для того, чтобы обеспечить относительно приемлемый предварительный просмотр изображения.
Другие форматы тоже поддерживают последовательную загрузку, например PNG c чересстрочной оптимизацией Adam7, но FLIF работает лучше.
→ По ссылке показано сравнение FLIF и PNG (Adam7)
Создан адаптивным
Разработка адаптивных сайтов, таких, которые подстраиваются под размеры экрана пользователя, является сейчас «горячей темой», и не удивительно.
Сейчас к сайтам обращаются с большего числа самых разных устройств. Настольные компьютеры, ноутбуки, смартфоны, планшеты, а с недавних пор еще и «умные» телевизоры, носимые устройства типа Apple Watch и другие – разнообразие возможных разрешений экрана невероятно. HTML5 и CSS3 значительно облегчает разработку адаптивных сайтов, но одна из сохраняющихся проблем – работа с изображениями.Обычно при разработке адаптивного сайта создаются различные версии одного и того же изображения в разных размерах для разных разрешений. Эти версии одного изображения, естественно, хранятся в разных файлах. Предполагается, что программным образом будет определено, какая версия файла больше подходит определенному пользователю с его устройством. При этом могут быть проблемы с кэшированием, с необходимостью загружать несколько версий одного изображения, если пользователь увеличивает масштаб экрана, и другие проблемы. В результате адаптивные сайты работают не так быстро, как хотелось бы. Кроме того, наличие разных версий одного изображения дополнительно нагружает сервер, поскольку их все надо хранить и кэшировать.
При использовании формата FLIF на сайте нужен только один файл с изображением — на все случаи жизни. Изображение в формате FLIF может быть скачано в разных размерах из одного и того же исходного файла на сервере. Это достигается частичной загрузкой файла. Благодаря этому FLIF отлично подходит для создания адаптивных сайтов. Поскольку файл всегда один, браузер может начать скачивание его немедленно, не дожидаясь определения размера экрана. Скачивание может быть остановлено тогда, когда будет определено, что скачано достаточно большое изображение. Более того, можно продолжить скачивание с того же места, если потребуется увеличить размер, например, пользователь увеличил масштаб просмотра страницы.
FLIF помогает более эффективно использовать ресурсы на стороне клиента, определяя требуемый размер файла в данный момент на основании чего-либо из следующего:
- Разрешения экрана и места на экране под это изображение
- Доступная в данный момент скорость скачивания
- Свободное место на диске и в памяти
- Видимо ли в данный момент это изображение на экране
Поскольку только один файл требуется для каждого изображения, это может намного облегчить создание типичных элементов сайта, таких как галереи изображений. Ведь теперь в роли миниатюры изображения, его версии для предварительного просмотра и его разных версий для разных разрешений выступает единственный файл.
Много возможностей существует и в части кэширования. В кэше на стороне клиента, на прокси-серверах или в CDN могут храниться не полные версии файла, а только их обрезанные с конца версии в соответствии с наиболее частыми поступающими к ним запросами. При этом полная версия файла может быть скачана при необходимости с исходного сервера.
Даже если не рассматривать ширину канала как ограничитель, FLIF может упростить использование файлов во многих ситуациях. Например, большие файлы могут содержать небольшие превью-версии изображений в заголовках. В случае формата RAW на многих камерах, в файлах содержится полноразмерное «превью» с использованием формата JPEG с потерями в качестве и меньшей глубиной цвета. Кроме того, многие операционные системы создают кэшируемые миниатюры изображений. Их единственная цель – ускорить показ списка иконок, и FLIF это совершенно не нужно.
Бесплатно и без патентов
В отличие от таких форматов как BPG или JPEG 2000, FLIF полностью свободен от необходимости делать какие-либо отчисления и не защищается никакими патентами. FLIF использует арифметическое кодирование, но все патенты, связанные с арифметическим кодированием, утратили срок действия.
Поддержка формата
Пока никакие браузеры не поддерживают FLIF. Соответствующие запросы запущены в Mozilla и в Chromium.
Из графических редакторов FLIF поддерживают ImageMagick и ExifTool.
Для просмотра изображений можно воспользоваться XnView, плагином для Windows FLIF Windows Codec или плагином QT FLIF для QT4 и QT5.
В заключение отметим, что формат кажется чрезвычайно интересным, как в плане банальной экономии на объеме файлов, так и более удобной реализацией адаптивного веб-дизайна. Будем надеяться, Adobe, Apple, Microsoft, Google и Mozilla поддержат этот формат как можно скорее.
Формат FLIF – Фотоконвертер
FLIF – формат, который разработан в качестве свободной альтернативы общепринятым разрешениям: PNG, WebP, BPG, JPG. Изображения, сохраненные в этом разрешении, на 74% занимают меньше пространства на накопителе без существенных потерь качества. Это достигается за счет использования особого алгоритма кодировки – Adam7.
Формат FLIF поддерживается всеми популярными графическими редакторами и программами для чтения файлов с изображениями.
Как конвертировать FLIF файлы?
Есть несколько способов конвертации FLIF файлов. Самый простой способ – это онлайн конвертация. В процессе, ваши файлы загружаются на сервер, и там обрабатываются. Такой вариант будет удобен, если вам нужно конвертировать всего несколько файлов.
Другой способ – установить Фотоконвертер. Установленная программа работает быстрее и эффективнее онлайн конвертации, так как все файлы обрабатываются на локальном диске. Фотоконвертер – это хороший вариант конвертировать множество файлов FLIF за раз, не загружая файлы на сервер.
Преобразовать FLIF в другой формат
JPEG JPG PNG GIF TIFF TIF BMP ICO EMF WMF AI PDF EPS PS EPI WEBP WEBPLL JP2 PCX TGA DWG DWF DXF DGN WMZ CGM DRW SHP GBR PCT MIF PLT PCL SVG WPG CIN DCX DIS HRU MTV DB PRC RAD PIC RLA QRT SGI XBM XPM SWF CAL FAX FITS PSD JXR BPG APNG DDS SVGZ CG4 AVIF
Перевести в формат FLIF
JPEG JPG PNG GIF TIFF TIF BMP ICO EMF WMF AI PDF EPS PS EPI ARW BAY BMQ CR2 CRW CS1 DC2 DCR DNG ERF IA K25 KC2 KDC MDC MOS MRW NEF ORF PEF PXN RAF RAW RDC SR2 SRF X3F STI FFF WEBP WEBPLL JP2 PCX TGA DWG DWF DXF DGN WMZ CGM DRW SHP GBR PCT MIF PLT PCL SVG WPG CIN DCX DIS HRU MTV DB PRC RAD PIC RLA QRT SGI XBM XPM SWF IMG RLE IMA ARF G4 ACE ACORN PHP OCP NAV PIX ALS ALIAS BM 2D AMI IFF BLK INFO CPC ATK HDRU ART A64 AIP ARN SIM AFX GM GM2 GM4 EPA SSP B3D BFL BFLI SIR BFX PI BOB TIL BRK 301 BRT CAL CALS CDU CMU CP8 CPI CRG CAN BIG CAM CMT CLO RIX SCX CE CE1 CE2 IDC CDR PAT BMF CMX CPT NCD NCT DBW MAP FPG DPX SD0 SD1 SD2 PC LBM DCM TDIM GRAF CMP DOO DD JJ CUT DRZ ECC C4 EI EIDI !C SCR SNA ESM TDI FIT G3 FAX FI FITS FTS FBM CBM GEO SUL XCF BIF 4BT CLP HF GRO GRB ZBR MDL JTF HPI M8 HED HIR LIF KPS PSE IM5 IMT ICA ISS ICB MIFF ISH ISM RLC2 B&W B_W G3N IIM IPH IPT ITG CIT CT IIMG JIF VI BTN VIF VIFF XV SKN CEL KOA GG PCC KFX KQP LVP LDA LWI LFF PZP MAG MGR MAC MPNT PICT FRE PD MRF 411 PDX BLD FRM PBT MIL MSP IPG PDB SC2 MNG NCR NITF CAR NEO NMP STW NLM NOL OAZ BGA OFX OIL ABS B16 PM PMG JBF PFR PSP MSK TUB TEX PXA PXS PDD FSY PSF CAT APX P64 PXR PICIO PIXAR IB7 I17 I18 IF9 PXB PDS 2BP PRF PBM RPBM PGF PGC CVP BUM PPS PPT BS PG GB PRI MBM PPP PZL Q0 QDV WAL VPB QTIF QTI ICN RP RGH RSB J6I 001 PIG RPM ST4 STX ST5 ST6 ST7 ST8 DAT SAR SCI SCT SC SFW PWP SJ1 RGB BW IRIS HRZ PAN SI PMP TIM SPU SPC SPS SSI PAC SEQ SDG X AVS MBFS MBFAVS JPS RAS RAST SUN SR RS VFF SUNIFF TAAC SYNU SYN TG4 73I 82I 83I 85I 86I 89I 92I HR TNL TNY TN1 TN2 TN3 GAF PST UPI PE4 FAC FACE VIT VIC VICAR VID VDA VST VOB RLB FXM FXS FXO ANI XWD X11 P7 XAR XIF XIM SMP YUV QTL UYVY MIM PCD WBC WBP WBZ WB1 WB0 PSD HDR MIX FPX PPM PGM SID E00 NAP $S $C JXR CINE RW2 MEF NRW QTK NVA DOC DOCX RTF HPG HP2 3FR CAP DCS DRF EIP IIQ PTX R3D RWL RWZ SRW OBM ARI SK SK1 XFIG AFF DJVU BPG VSD STL VDX VSDM VSDX APNG DIB JPF JPX J2C J2K JPC PDP PNM JPM XPS OXPS ADT BMG IBG BMX BPR BSG CIP CPA CRD DDS DOL DSI DTA EFX EF3 EXR F96 FCX FMF FP2 FUN FPR FPT FTF FX3 G16 GIG GIH GMF GUN IFL ICL ICNS IMI JIG KAP MH MIC MPH NPM NSR PH BN GRO2 GRO4 PAX PCP PSA PSB PSPBRUSH PSPFRAME PSPMASK SST SYJ TM2 TJP TRP TSK UNI V VFX WFX WZL KRA ORB PSPIMAGE ABC ABIC AFP AWD CMW FLC HDP JBG PTK SFF PTOCA IM1 FLI WDP JBIG SVGZ JFI JFIF JIFF JPE CG4 HEIC HEIF SVS CR3 DWFX BOT DRD DRL GBL GBO GBP GBS GBX GKO GM1 GPB GTL GTO GTP GTS PLC PLS SMB SMT SOL SSB STC STS TAP TOP XLN 3D 3DS 3MF AC AC3D ACC AMJ ASE ASK BLEND BVH C4D COB CSM DAE ENFF FBX GITF GLB HMB HMP IRR IRRMESH LWO LWS LXO M3D MD2 MD3 MD5 MESH MOT MS3D NDO NFF OFF OGEX PK3 PLY PMX PRJ Q3D Q3O Q3S SCN SIB SMD STEP STP TER UC VTA X3D XGL ZGL 000 BNA GEOJSON GML GMT GPX GTM GTZ GTX KML KMZ NTF REC TAB EMZ DST OBJ AVIF
Интерфейс командной строки
Опытные пользователи могут использовать конвертер FLIF через командную строку в ручном или автоматическом режиме.
За дополнительной помощью по использованию по использованию командной строки обращайтесь в службу поддержки пользователей.
УСТАНОВИТЕ ФОТОКОНВЕРТЕР
Быстрый и эффективный пакетный конвертер файлов FLIF формата.
Установить
FLIF — пример
FLIF — примерВот пример, иллюстрирующий некоторые сильные стороны FLIF. Рассмотрим следующее изображение с сайта pngimg.com. Это изображение размером 1969×1307 с четырьмя 8-битными каналами (три для цвета RGB и один для альфа-канала/прозрачности).
Сжатие без потерь
Вот размеры этого изображения в различных форматах файлов изображений:
- 10 293 932 байт для несжатого RGBA
- 693075 байт для PNG с чересстрочной разверткой Adam7
- 657 022 байт для PNG с чередованием Adam7 после грубой силы pngcrush
- 562 214 байт для JPEG 2000 (без потерь)
- 533 004 байт для исходного файла PNG, найденного на pngimg. com
- 495 625 байт для PNG, после грубой силы pngcrush
- 447 419 байт для PNG с использованием PNGOUT
- 334 889 байт для BPG (без потерь)
- 328 650
- 299 643 байт для FLIF
- 282 655 байт для FLIF без чередования
Итак, в сжатии без потерь выигрывает FLIF (хотя BPG и WebP не сильно отстают).
Сжатие с потерями
Как насчет сжатия с потерями?
- WebP, JPEG 2000 и BPG имеют режим с потерями (на самом деле это их режим по умолчанию), поэтому мы можем использовать его для создания файлов меньшего размера.
- FLIF не имеет режима с потерями, но чересстрочные файлы можно декодировать прогрессивно, поэтому мы можем просто использовать что-то вроде
dd if=lossless.flif of=lossy. flif bs=1024 count=50
для создания файла с потерями произвольного формата. размер (в данном случае 50 КБ). - PNG также не имеет режима с потерями, но чересстрочные файлы Adam7 можно декодировать прогрессивно.
Сравним артефакты сжатия разных форматов. Мы рассмотрим частичные файлы FLIF и PNG и сравним их с файлами WebP с потерями, JPEG 2000 с потерями, BPG с потерями и старыми стандартными форматами GIF и JPEG.
Заметьте, что то, что мы будем делать, не будет честным сравнением. Это сильно ущемляет FLIF и PNG, потому что мы смотрим на первые части разного размера в одном файле (тот, который в конечном итоге приводит к изображению без потерь), в то время как для других форматов мы смотрим на несколько файлов , каждый из которых оптимизирован. для определенного параметра качества.
Чтобы упростить сравнение качества изображения, здесь показана только часть изображений. Вы можете нажать на изображение, чтобы увидеть полное изображение.
Наименьший возможный файл, который я мог создать с существующими форматами изображений, был файлом JPEG размером 16 977 байт (закодированным с использованием минимально возможных настроек качества). Очевидно, это очень большие потери: JPEG вообще не поддерживает прозрачность, экстремальное квантование и т. д. Вот результирующие изображения такого размера:
Оригинал (без потерь) | Частично загруженный FLIF (16 977 первых байтов файла размером 299 643 байта) | Частично загруженный PNG (16,977 первых байт файла размером 657 022 байта) | Частично загруженный GIF с потерями (16 977 первых байтов файла размером 219 377 байт) | BPG с потерями (15 411 байт) | WebP с потерями | JPEG 2000 с потерями (16 962 байта) | JPEG с потерями (16 977 байт) |
---|---|---|---|---|---|---|---|
нет WebP для этого размера |
Победитель? На мой взгляд, BPG здесь выглядит лучше всего. Но имейте в виду, что это совершенно другой файл BPG, чем файл BPG без потерь. Кроме того, кодировщик BPG очень медленный.
Самый маленький файл WebP, который я смог создать (используя cwebp -q 1 -alpha_q 1 -m 6
), имеет размер 22 702 байта. Давайте посмотрим:
Оригинал (без потерь) | Частично загруженный FLIF (22 702 первых байта файла размером 299 643 байта) | Частично загруженный PNG (22 702 первых байта файла размером 657 022 байта) | Частично загруженный GIF с потерями (22 702 первых байта файла размером 219 377 байт) | BPG с потерями (22 024 байта) | WebP с потерями (22 702 байта) | JPEG 2000 с потерями (22 676 байт) | JPEG с потерями (22 749 байт) |
---|---|---|---|---|---|---|---|
Опять же, файл BPG выглядит лучше всего. Я бы сказал, что FLIF занимает второе место. Теперь давайте дадим WebP еще несколько байтов для работы. С cwebp -q 20 -alpha_q 20 -m 6
) Я получил файл .webp размером 40 100 байт.
Оригинал (без потерь) | Частично загруженный FLIF (40 100 первых байтов файла размером 299 643 байта) | Частично загруженный PNG (40 100 первых байтов файла размером 657 022 байта) | Частично загруженный GIF с потерями (40 100 первых байтов файла размером 219 377 байт) | BPG с потерями (38 590 байт) | WebP с потерями (40 100 байт) | JPEG 2000 с потерями (40 024 байта) | JPEG с потерями (40 442 байта) |
---|---|---|---|---|---|---|---|
Прогрессивное декодирование
Как насчет прогрессивного декодирования других форматов без потерь?
- Lossless WebP не поддерживает прогрессивное декодирование (он просто откажется декодировать неполные файлы).
- JPEG 2000 предположительно поддерживает прогрессивное декодирование, но я пока не нашел способа сделать это (пожалуйста, помогите мне, если вы знаете способ!).
- BPG не претендует на прогрессивное декодирование, но попытка декодирования неполного файла иногда срабатывает.
BPG очень хорош при сжатии с потерями, но его файлы без потерь не могут быть очень хорошо декодированы прогрессивно. В этом примере bpgdec
хотел декодировать файл BPG без потерь только после того, как было загружено около 90 000 байтов, и тогда все еще кажется, что только альфа-канал в порядке:
Частично загруженный FLIF (90 000 первых байт файла размером 299 643 байта) | Частично загруженный BPG (90 000 первых байт файла размером 334 889 байт) |
---|---|
Даже после 200 000 байт файл BPG без потерь выглядит довольно плохо:
Частично загруженный FLIF (200 000 первых байт 29файл размером 9643 байта) | Частично загруженный BPG (200 000 первых байт файла размером 334 889 байт) |
---|---|
WebP вообще не поддерживает прогрессивное декодирование. Предполагается, что JPEG 2000 работает, но я не смог найти программу, которая может обрабатывать частичные файлы JPEG 2000. Таким образом, помимо FLIF, единственным реальным выбором для прогрессивной загрузки формата без потерь был бы PNG с чересстрочной разверткой Adam7. Но в этом примере это будет файл в два раза больше. В общем, файлы FLIF составляют около 39% меньше, чем файлы PNG с чересстрочной разверткой Adam7 (даже после их pngcrushing).
Адаптивные изображения
Исходное изображение размером 1969×1307 пикселей, что довольно много. Скорее всего, ваш браузер должен уменьшить изображение, чтобы оно соответствовало доступному пространству:
. Как было сказано ранее, приведенное выше изображение может быть закодировано в формате FLIF с использованием 299 643 байтов. Однако, используя flif -d -s 2
, уменьшенное изображение можно декодировать в масштабе 1:2, что приводит к следующему изображению 653×985 после чтения только первых 80 389байт файла:
Если масштаб 1:4 достаточно хорош (например, вы просматриваете изображение на смартфоне), то вы можете получить следующее изображение 492×326 из первых 37 014 байт файла FLIF:
FLIF — сжатие с потерями
FLIF — сжатие с потерямиFLIF — это формат без потерь. Тем не менее, если вы хотите, вы можете разрешить кодировщику изменять входное изображение, чтобы улучшить сжатие. Очевидно, что он будет делать это только в том случае, если вы скажете ему об этом, используя параметр командной строки 9.0064 —lossy [качество] .
Преимущества FLIF
с потерямиОдним из преимуществ использования формата без потерь способом с потерями (по сравнению с использованием формата с потерями) является то, что потеря поколения не проблема. Конечно, потерянная информация останется потерянной, но сколько бы раз вы ни сохраняли файл FLIF, он не получит никаких дополнительных потерь от цикла декодирования-кодирования. Это не так, например. JPEG, где каждый цикл декодирования-кодирования всегда вносит дополнительные потери.
FLIF с потерями имеет те же преимущества, что и FLIF без потерь: он хорошо работает с любыми изображениями (фотографии, веб-комиксы, абстрактное искусство и т. д.), и он по-прежнему адаптивен по дизайну: вы по-прежнему можете постепенно декодировать FLIF с потерями или создать миниатюру из первая часть файла.
Оригинал (без потерь) 104 585 байт PNG 52 848 байт FLIF | FLIF с потерями 37 207 байт | JPEG (mozjpeg, качество 50) 37 379 байт | JPEG (libjpeg, качество 50) 37 923 байта |
---|---|---|---|
Сравнение с форматами с потерями
Вот пример одного изображения, чтобы дать вам представление о том, какие артефакты вызывает FLIF с потерями. По нашему мнению, при низком качестве и для фотографий специальные форматы с потерями, такие как WebP, JPEG или BPG, по-прежнему дают лучшие результаты. Однако при очень высоком качестве, мы думаем, что FLIF с потерями — лучший вариант. WebP с потерями имеет обязательную субдискретизацию цветности и преобразование цвета YCbCr, что ограничивает его полезность. при высоких качествах. JPEG также страдает от преобразования YCbCr, которое эффективно уменьшает 24-битный цвет до 22-битного (с большей частью потерь в красных и синих тонах). FLIF, будучи форматом без потерь, не имеет этих ограничений.
FLIF с потерями может конкурировать со специализированными форматами с потерями, такими как JPEG, JPEG XR, JPEG 2000 и WebP, с точки зрения DSSIM (качество восприятия) для данного размера файла, при этом избегая проблемы потери генерации и он хорошо работает со всеми видами изображений, в том числе и с нефотографическими. Вот несколько графиков, демонстрирующих это.
Наилучшее (наименьшее) значение DSSIM, показанное здесь, на самом деле без потерь (которое было бы DSSIM=0, что не может быть показано на логарифмическом графике, подобном этому, поэтому мы изменили значение до 0,000001). Для каждого формата показан полный диапазон качества. Обратите внимание, что WebP на самом деле представляет собой два формата: формат с потерями, основанный на VP8, и формат (почти) без потерь.