Tag Archives: 2d

PNG vs TIFF vs TGA. Что лучше? Особенности и отличия.

Преамбула

PNG, TGA, TIFF, в чём разница, что лучше? Все эти растровые графические форматы поддерживают различную глубину цвета (биты на пиксель), альфа-каналы, разные цветовые модели, и могут использовать сжатие без потерь. Но, что выбрать? В каком формате хранить, например, текстуры?

Фабула

PNG

PNG (portable network graphics) рассмотрим первым т. к. он наиболее популярен.

В отличие от TGA и TIF, PNG не может хранить данные в несжатом виде, PNG всегда использует сжатие без потерь по алгоритму Deflate (ZIP). Сжатие ZIP очень мощное, лучшее сжатие без потерь – сжимает более чем в 7.8 раз. E.g., несжатый файл имеет размер 20.2 мб, сжатый без потерь с помощью Deflate (ZIP) – 2.5 мб.

Поддержка альфа-канала в Photoshop в PNG – ужас, она удалит информацию в областях, где альфа прозрачна на 100%, а это не то, что вам нужно для упаковки текстур. Однако, Photoshop не обрабатывает альфа-каналы для TGA, как это происходит с PNG.

Поддержка 16 бит (биты на пиксель) в PNG различна и не универсальна.

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

TGA

TGA (Truevision TGA) может хранить данные в несжатом виде, а может использовать сжатие без потерь по алгоритму RLE. Сжатие RLE слабое – сжимает в ~1.76 раз. E.g., несжатый файл имеет размер 20.2 мб, сжатый без потерь с помощью RLE – 11.5 мб. Использовать TGA со сжатием RLE нет смысла т. к. есть куда лучшее сжатие – ZIP, но TGA его не поддерживает. Вывод: в TGA можно хранить разве, что только данные в несжатом виде.

TIFF

TIFF/TIF (Tagged Image File Format) рассматриваем последним т. к. в нём больше всего функционала.

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

  • LZW – мощное сжатие без потерь, сжимает в ~6.14 раз. E.g., несжатый TIF файл 20.3 мб, TIF сжатый с LZW – 3.3 мб.
  • ZIP – очень мощное сжатие без потерь, сжимает в ~8.86 раз. E.g., несжатый TIF файл 20.3 мб, TIF сжатый с ZIP – 2.2 мб. ZIP сжатие не поддерживается в старых TIF просмоторщиках.
  • JPEG – очень мощное сжатие с потерями, сжимает в зависимости от выбора, на качестве 10/12 сжимает в ~25.87 раз. E.g., несжатый TIF файл 20.3 мб, TIF сжатый с JPEG на качестве 10/12 – 0.7 мб. JPEG сжатие не поддерживается в старых TIF просмоторщиках.

Интересно то, что TIF сжатый с алгоритмом ZIP в Photoshop имеет заметно меньший размер, чем PNG сжатый с этим же алгоритмом ZIP в Photoshop, при одинаковых остальных параметрах (разрешение, пиксел на дюйм, бит на плоскость, кол-во плоскостей, бит на пиксел, исходная точка, цветовая модель). TIF сжатый с ZIP сжимает в ~8.86 раз, а PNG сжатый с тем же ZIP сжимает в ~7.8 раз. Можно подумать, это связано с тем, что помимо данных самого изображения у PNG хранится ещё много лишнего, по сравнению с TIF, но это не так. Просто у алгоритма сжатия без потерь ZIP можно выставлять степень сжатия, и для TIF с ZIP Photoshop почему-то выставляет большую степень сжатия в сравнении с PNG с ZIP. Т.о., если сохранять через Photoshop, который не даёт вручную выставить степень сжатия для алгоритма ZIP, вместо PNG лучше использовать TIF сжатый с алгоритмом ZIP. При сохранении PNG файла Adobe Photoshop не позволяет выставить вручную степень сжатия метода ZIP, но зато это позволяют сделать программы IrfanView и XnView. Compression level ZIP выставляется от 0 (none) до 9 (best). Default level 6.

TIFF полностью перекрывает PNG и TGA т. к. в нём есть всё: отсутствие сжатия, сжатие без потерь методом ZIP, и много чего другого. TIFF перекрывает даже формат JPEG, т. к. в TIFF также есть сжатие с потерями методом JPEG. Такой вот универсальный и мощный формат TIFF.

Резюме

Всё зависит от требуемого типа сжатия, с потерями или без потерь. После этого выбираем соответствующий алгоритм сжатия.

  • Если нужны данные в несжатом виде, то выбираем TGA без сжатия или TIFF без сжатия.
  • Если нужно сжатие без потерь, то однозначно выбираем формат поддерживающий лучший алгоритм сжатия без потерь – ZIP. ZIP – самое долгое и наиболее мощное сжатие без потерь. Можно использовать как PNG, который всегда использует ZIP сжатие, так и TIF сжатый с алгоритмом ZIP, что может быть даже лучше.
  • Если нужно сжатие с потерями, то выбираем лучший алгоритм сжатия с потерями – JPEG. JPEG – наиболее мощное сжатие с потерями. Можно использовать как формат TIF сжатый с алгоритмом JPEG, так и сам формат JPEG.

Растровые графические форматы во многом схожи с медиа контейнерами – важно то, что внутри, какие алгоритмы сжатия. Честно говоря, я лично не знаю зачем кому-то вообще может понадобиться хранить данные в несжатом виде, поэтому у меня выбор стоит между форматами PNG (всегда ZIP сжатие), и TIF сжатый с алгоритмом ZIP, либо алгоритм JPEG, когда допустимо сжатие с потерями.