Узнайте, является ли PNG 8 или 24?

Есть ли способ узнать, является ли PNG типом 8 или 24? Я пробовал с окнами, фейерверками и фотошопом, но я не могу понять это. Спасибо


person Evanss    schedule 08.06.2011    source источник
comment
Используйте libpng. У него несколько непрозрачная документация, но как только вы доберетесь до png_read_png() и png_get_bit_depth() и png_get_channels(), у вас есть то, что вам нужно. Если вам нужен инструмент командной строки, проверьте ImageMagick (в частности, команду identify).   -  person Kerrek SB    schedule 08.06.2011


Ответы (4)


Откройте его в Photoshop и проверьте, что написано на верхней панели. Если он говорит «индекс», то он был сохранен как 8-битный PNG, если он говорит «RGB/8», то ваш PNG является 32-битным. В качестве альтернативы вы можете открыть меню «Изображение/Режим», и для 8-битного это будет «Индексированный цвет», а для 32-битного - «Цвет RGB».

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

(для тех у кого нет фотошопа)

Как определить разрядность файлов изображений в Windows:

*Right click* image file > Properties > Details > Bit depth

Определить разрядность изображения в Windows

person Thariama    schedule 08.06.2011
comment
просто должен сказать, что я люблю вашу иконку, Dr. Snuggles - любимица детства :-) - person Fredrik Pihl; 08.06.2011
comment
я недавно узнал, что несколько лет назад они выпустили несколько новых эпизодов с новой графикой, но, насколько я мог судить, внешний вид похож на старые эпизоды - person Thariama; 08.06.2011
comment
затем я узнал кое-что новое о SO сегодня ;-) сейчас пойду в Google, чтобы найти эти эпизоды! - person Fredrik Pihl; 08.06.2011
comment
(оффтоп): теперь я помню, что это было, это был только трейлер, который я видел (youtube. com/watch?v=Ti8nJYmC7W0). нет новых серий (не нашла) :( - person Thariama; 08.06.2011
comment
Но разве этот вопрос не о PNG24? - person Gayan Weerakutti; 23.01.2021

Самый быстрый способ — просто просмотреть байты 24 и 25 в файле PNG. Они содержат разрядность (1, 2, 4, 8 или 16) и тип цвета.

  • 0: серый,
  • 2: RGB,
  • 3: индексированный (цветовая карта),
  • 4: серый+альфа, или
  • 6: RGBA.

Если битовая глубина равна 8, а цветовой тип равен 3, у вас есть PNG8, а если битовая глубина равна 8, а цветовой тип равен 2, у вас есть PNG24.

На платформе *nix команда "file" сделает это за вас, например,

PNG8:

glenn.rp> file logo.png
logo.png: PNG image data, 640 x 480, 8-bit colormap, non-interlaced

PNG24:

glenn.rp> file rose.png
rose.png: PNG image data, 70 x 46, 8-bit/color RGB, non-interlaced
person Glenn Randers-Pehrson    schedule 16.09.2016
comment
Это должен быть принятый ответ. Я гарантирую, что почти все, кто попал сюда, сделали это, потому что им интересно, как это сделать в CODE. - person tayoung; 25.11.2017
comment
@tayoung нет, это именно то, что мне нужно. - person patrick.ryan93; 25.06.2019

Просто добавьте столбец «Битовая глубина», и он должен показать вам битовую глубину прямо в представлении сведений в проводнике.

person Animesh Anand    schedule 12.08.2016

В среде на базе Linux можно использовать команду file.

$ file image-1.png

PNG image data, 3840 x 2160, 8-bit/color RGBA, non-interlaced

Таким образом, исходя из приведенного выше вывода, image-1.png имеет четыре канала (RGBA — красный, зеленый, синий, альфа-канал). 8 бит на канал, что в сумме составляет 32 бита.

$ file image-2.png

PNG image data, 3840 x 2160, 8-bit/color RGB, non-interlaced

image-2.png имеет только 3 канала (RGB). У него нет альфа-канала. То есть в формате PNG‑24.

Также есть команда identify от ImageMagick, которую можно использовать для получения более подробной информации о файлах изображений.

sudo apt-get install imagemagick
identify -verbose image.png
person Gayan Weerakutti    schedule 23.01.2021