LINUX.ORG.RU

Опубликована третья редакция формата PNG

 ,

Опубликована третья редакция формата PNG

0

1

24 июня, после более 20 лет разработки, консорциум W3 опубликовал окончательную третью редакцию формата PNG.

Основные изменения:

  • поддержка расширенного динамического диапазона (HDR);
  • метаданные EXIF;
  • независимые от кодирования данные для идентификации типа видеосигнала cICP;
  • анимированные изображения APNG.

Также Cosmin Truta анонсировал изменения в библиотеке libpng. В ветке develop доступна альфа-версия библиотеки с поддержкой новых возможностей формата.

Видео (YouTube): 20 years later, PNG 3.0 is finally here.

>>> Подробности на w3.org

★★★★★

Проверено: CrX ()
Последнее исправление: CrX (всего исправлений: 2)

Лучше поздно, чем никогда?

question4 ★★★★★
()

Чем оно лучше webp? Или чем оно отличается от webp?

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

Camel ★★★★★
()
Ответ на: комментарий от bernd

А теперь будут добавлять поддержку не только в браузеры.

dataman ★★★★★
() автор топика
Ответ на: комментарий от Camel

Чем оно лучше webp?

Меньше размер библиотек и вычислительная сложность. Deflate на современных процессорах работает практически мгновенно.

Но нет сжатия с потерями.

question4 ★★★★★
()
Ответ на: комментарий от Camel

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

но потом придумали avif.

хотелось бы теперь сравнение: новый png vs webp vs avif

CAHO
()
Ответ на: комментарий от CAHO

webp и avif - это вроде как видео из одного кадра или нескольких, если разрешение больше предельного размера кадра.

Radjah ★★★★★
()
Ответ на: комментарий от Camel

Чем оно лучше webp?

Тем что не запятнано связями с гуглом. Этого достаточно.

firkax ★★★★★
()
Ответ на: комментарий от Camel

Чем оно лучше webp? Или чем оно отличается от webp?

  • В WEBP нельзя встроить метаданные.
  • PNG не умеет в сжатие с потерями.

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

Он лучше жмётся (особенно если с потерями), при этом поддерживает и прозрачность и анимации, так что да, он выигрывает у PNG именно в применении для веба.

mord0d ★★★★★
()
Ответ на: комментарий от mord0d

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

Radjah ★★★★★
()
Ответ на: комментарий от Radjah

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

С мелкими картинками GIF будет лучше (хотя у него ограничение на палитру), а вот с большими… Даже при сжатии без потерь WEBP выигрывает. Но декодируется дольше.

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

Тут WEBP снова выигрывает, особенно при сжатии с потерями.

mord0d ★★★★★
()
Ответ на: комментарий от bernd

апнг же уже как 20 лет есть в фф и лет 15 в ие

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

К сожелению, когда комитет действительно что-то изобретает, обычно получается мертворождённый стандарт. Вспомните модель OSI, экзотические кодировки. Да тот же TBX вспомните, который концептуально неплох, но почти не нашел применения. Контрпримеры должны быть, и я их предвкушаю, но вряд ли их много.

Vidrele ★★★★
()
Ответ на: комментарий от Radjah

Сделали бы из APNG аналог GIF с большой палитрой, цены бы не было.

Как раз таки в таком виде, в каком оно есть, APNG аналогов нет.

mord0d ★★★★★
()
Ответ на: комментарий от Vidrele

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

…вейланд)

goingUp ★★★★★
()
Ответ на: комментарий от Radjah

webp и avif - это вроде как видео из одного кадра или нескольких, если разрешение больше предельного размера кадра.

Про avif не выяснял, но webp не может превышать размер 16384. По крайней мере, в ImageMagick, ffmpeg, и всем, что завязано на libwebp.

question4 ★★★★★
()
Ответ на: комментарий от Radjah

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

Они обязаны быть полными? Можно же оптимизировать, как и GIF-ы, чтобы в кадре было только отличие от предыдущего.

question4 ★★★★★
()
Ответ на: комментарий от question4

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

Radjah ★★★★★
()
Ответ на: комментарий от question4

Я вот этим пользовался «APNG Assembler 2.91». Там в опциях такого не нашёл или как-то не так ман прочитал.

Radjah ★★★★★
()
Ответ на: комментарий от Vidrele

Контрпримеры должны быть, и я их предвкушаю, но вряд ли их много.

IDE/ATA, SATA. Тот Юникод, который Basic Multilingual Plane. USB 2.0.

question4 ★★★★★
()
Ответ на: комментарий от question4

IDE не комитет изобрёл, это разработка WD.

firkax ★★★★★
()

Что значит окончательная? С чего решили что ещё через 20 лет не захотят ещё пару фич добавить?

unDEFER ★★★★★
()
Ответ на: комментарий от Radjah

Сделали бы из APNG аналог GIF с большой палитрой, цены бы не было.

И с прозрачностью:

Animated PNG (APNG) extends the original, static-only PNG format, adding support for frame-based animated images. It is intended to be a replacement for simple animated images that have traditionally used the GIF format [GIF], while adding support for 24-bit images and 8-bit transparency, which GIF lacks.

dataman ★★★★★
() автор топика
Ответ на: комментарий от question4

Они обязаны быть полными?

Да.

Можно же оптимизировать, как и GIF-ы, чтобы в кадре было только отличие от предыдущего.

Если только добавить нестандартный chunk и форкнуть libpng.

dataman ★★★★★
() автор топика
Ответ на: комментарий от dataman

Во тут про оптимизацию есть, и вроде как оно даже читается нормально.

http://littlesvr.ca/apng/inter-frame.html

Если получится что-то, то тогда все мои наезды на APNG будут мимо кассы.

Radjah ★★★★★
()
Ответ на: комментарий от dataman

libpng.org это не только сайт референсной реализации, но и официальная «домашняя страница» этого самого стандарта. Более того, на нём прямым текстом написано

(By the way, despite the implications in some of CompuServe's old press releases and in occasional trade-press articles, PNG's development was not instigated by either CompuServe or the World Wide Web Consortium, nor was it led by them. Individuals from both organizations contributed to the effort, but the PNG development group exists as a separate, Internet-based entity.)

W3C всего лишь один из тех кто этот стандарт у себя опубликовал. Но ещё например есть https://www.ietf.org/rfc/rfc2083.txt и ISO/IEC с каким-то номером.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 2)

Анимашки apng использовал больше года назад. В качестве промежуточного этапа конвертации обрезки видео в JXL анимашку.

Daedalus
()
Ответ на: комментарий от question4

Deflate на современных процессорах работает практически мгновенно.

Ещё через 20 лет ждём использование zstd вместо deflate. :)

dataman ★★★★★
() автор топика
Ответ на: комментарий от dataman

Что был в репах, с тем и работал. :)

PPA пробовал, туда для 24.04 пакетов не завезли. Попробую пособирать на досуге.

Radjah ★★★★★
()
Ответ на: комментарий от unixnik

Винды уже 15 лет как нет? Чего? IE неотделимая часть интерфейса винды.

zx_gamer ★★★
()
Ответ на: комментарий от Radjah

Попробую пособирать на досуге.

Я собрал, но там с CMake не всё в порядке. Пришлось сначала библиотеку компилировать и инсталлировать, тогда получилось.

dataman ★★★★★
() автор топика
Ответ на: комментарий от dataman

Ещё через 20 лет ждём использование zstd вместо deflate. :)

Какие у него требования к памяти? Как он по сравнению с LZMA? (В первом попавшемся наборе бенчмарков скорости сжатия и степени сжатия при максимальном сжатии почти одинаковы, при минимальном — ZSTD на порядок быстрее. Но требований к памяти нет.)

question4 ★★★★★
()
Ответ на: комментарий от dataman

Если только добавить нестандартный chunk и форкнуть libpng.

Зачем нестандартный чанк? Можно сделать большую часть кадра чёрной и прозрачной?

question4 ★★★★★
()
Последнее исправление: question4 (всего исправлений: 1)
Ответ на: комментарий от dataman

Судя по выхлопу TweakPNG оптимизация там есть, но на уровне блоков. То есть в файле хранится информация о том, какой блок, где, когда и как долго показывать, но работает всё это на больших файлах ОЧЕНЬ долго даже для 100 итераций.

С часиками из примера получается классно и даже относительно быстро, а вот с теми же ugoira на pixiv можно ждать очень долго на 1000.

Radjah ★★★★★
()
Ответ на: комментарий от question4

Какие у него требования к памяти?

Такое нашёл: https://github.com/facebook/zstd/wiki/Using-libzstd-in-a-memory-constrained-environment.

Zstandard, in typical configurations, assumes that using several MB for compression and decompression is acceptable. This page discusses how to tune Zstandard in memory constrained environments. Typically, this is in embedded code, mobile code, or cases where than can be many Zstandard compression & decompression contexts, like when using streaming compression on a server to communicate with many clients concurrently.

Querying memory usage

To determine Zstandard’s total memory usage for any Zstandard context object, including ZSTD_CCtx, ZSTD_CStream, ZSTD_DCtx, and ZSTD_DStream, you can use ZSTD_sizeof_Object() (e.g. ZSTD_sizeof_CCtx(ZSTD_CCtx* cctx)). You must call this function after you use the context object, because it reports the current memory usage.

void doCompress(ZSTD_CCtx* cctx);

void compressAndMeasureMemory(ZSTD_CCtx* cctx)
{
  doCompress(cctx);
  fprintf(stderr, "Memory usage of ZSTD_CCtx is %zu\n", ZSTD_sizeof_CCtx(cctx));
}

Но требований к памяти нет.

При декомпресии можно задать лимит:

Advanced decompression options:
  -M#                           Set the memory usage limit to # megabytes.
dataman ★★★★★
() автор топика
Ответ на: комментарий от dataman
void compressAndMeasureMemory(ZSTD_CCtx* cctx)
{
 doCompress(cctx);
 fprintf(stderr, "Memory usage of ZSTD_CCtx is %zu\n", >ZSTD_sizeof_CCtx(cctx));
}

Немного покопался, что-то не так с их рецептом. :)

В функции BMK_benchMemAdvancedNoAlloc вот так:

    benchResult.cMem = (1ULL << (comprParams->windowLog)) + ZSTD_sizeof_CCtx(cctx);

И benchResult.cMem вообще не используется при выводе результатов.

dataman ★★★★★
() автор топика
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.