Как я узнаю, является ли PNG PNG-8 или PNG-24?

Ответы:

25

Использование fileкоманды в других ответах иногда противоречиво. Например:

───────────────────────────────────────────────────────────────────────────────
rick@dell:~/Pictures$ file "256 colors.jpg"
256 colors.jpg: JPEG image data, JFIF standard 1.01, resolution (DPI), density 96x96, segment length 16, baseline, precision 8, 800x800, frames 3
───────────────────────────────────────────────────────────────────────────────
rick@dell:~/Pictures$ file "vnStat.png"
vnStat.png: PNG image data, 410 x 121, 8-bit/color RGB, non-interlaced

Первый экземпляр, скорее всего, снимок с камеры, а второй - снимок экрана.

Команда identify, на которой основан мой ответ, похоже, работает правильно во всех случаях. Например, тестирование на первом примере выше:

rick@dell:~/Pictures$ identify "256 colors.jpg"
256 colors.jpg JPEG 800x800 800x800+0+0 8-bit sRGB 45KB 0.000u 0:00.000

У меня установлен ImageMagick, который позволяет мне использовать:

$ identify -verbose vnStat.png
Image: vnStat.png
  Format: PNG (Portable Network Graphics)
  Mime type: image/png
  Class: DirectClass
  Geometry: 410x121+0+0
  Units: Undefined
  Type: TrueColor
  Endianess: Undefined
  Colorspace: sRGB
  Depth: 8-bit
  Channel depth:
    red: 8-bit
    green: 8-bit
    blue: 8-bit
  Channel statistics:
    Pixels: 49610
    Red:
      min: 0 (0)
      max: 255 (1)
      mean: 12.0814 (0.0473779)
      standard deviation: 46.7032 (0.18315)
      kurtosis: 18.8998
      skewness: 4.49862
    Green:
      min: 0 (0)
      max: 255 (1)
      mean: 21.1804 (0.0830606)
      standard deviation: 57.5336 (0.225622)
      kurtosis: 6.68226
      skewness: 2.82613
    Blue:
      min: 0 (0)
      max: 255 (1)
      mean: 14.2606 (0.0559237)
      standard deviation: 50.2969 (0.197243)
      kurtosis: 13.5573
      skewness: 3.85914
  Image statistics:
    Overall:
      min: 0 (0)
      max: 255 (1)
      mean: 15.8408 (0.0621207)
      standard deviation: 51.7078 (0.202776)
      kurtosis: 11.8528
      skewness: 3.62638
  Rendering intent: Perceptual
  Gamma: 0.454545
  Chromaticity:
    red primary: (0.64,0.33)
    green primary: (0.3,0.6)
    blue primary: (0.15,0.06)
    white point: (0.3127,0.329)
  Background color: white
  Border color: srgb(223,223,223)
  Matte color: grey74
  Transparent color: black
  Interlace: None
  Intensity: Undefined
  Compose: Over
  Page geometry: 410x121+0+0
  Dispose: Undefined
  Iterations: 0
  Compression: Zip
  Orientation: Undefined
  Properties:
    date:create: 2017-01-24T20:04:50-07:00
    date:modify: 2017-01-24T20:04:50-07:00
    png:IHDR.bit-depth-orig: 8
    png:IHDR.bit_depth: 8
    png:IHDR.color-type-orig: 2
    png:IHDR.color_type: 2 (Truecolor)
    png:IHDR.interlace_method: 0 (Not interlaced)
    png:IHDR.width,height: 410, 121
    png:sRGB: intent=0 (Perceptual Intent)
    png:text: 1 tEXt/zTXt/iTXt chunks were found
    signature: e9f31b79da6ce46cdea5da21ae8648496faa181b0621098aa2dbbdff4a9a4502
    Software: gnome-screenshot
  Artifacts:
    filename: vnStat.png
    verbose: true
  Tainted: False
  Filesize: 14.7KB
  Number pixels: 49.6K
  Pixels per second: 0B
  User time: 0.000u
  Elapsed time: 0:01.000
  Version: ImageMagick 6.8.9-9 Q16 x86_64 2017-07-31 http://www.imagemagick.org

Для сводного отчета опустите все параметры:

$ identify vnStat.png
vnStat.png PNG 410x121 410x121+0+0 8-bit sRGB 14.7KB 0.000u 0:00.000

Замените vnStat.pngсвоим .pngименем файла и, если необходимо, добавьте к нему путь.


Чтобы понять PNG-24 против PNG-32, ответ от SuperUser резюмирует его:

Если ваше изображение 24 бит, вы увидите:

Channel depth:
  red: 8-bit
  green: 8-bit
  blue: 8-bit

Если ваше изображение PNG 32-битное, вы увидите:

Channel depth:
  red: 8-bit
  green: 8-bit
  blue: 8-bit
  alpha: 8-bit

Однако этот ответ не является полным, потому что 8-битный цвет также показывает 8 бит для красного, зеленого и синего, только цветовая палитра используется для ограничения количества выборов (как в старой доброй Windows 2.0).


Изучите эти три картинки из статьи Википедии о глубине :

8_bit.png

Имя файла: 8_bit.png

С помощью:

identify -verbose  8_bit.png | grep colors
    png:PLTE.number_colors: 249

Мы видим, что используется 249 цветов. Максимально возможное с 8 битами - 256 цветов.


4 бит

Имя файла: 4_bit.png

С помощью:

identify -verbose  4_bit.png | grep colors
    png:PLTE.number_colors: 16

Мы видим, что используется 16 цветов, что является максимально возможным сочетанием цветов с 4 битами.


2_bit.png

Имя файла: 2_bit.png

С помощью:

$ identify -verbose  2_bit.png | grep colors
    png:PLTE.number_colors: 4

Мы видим, что используются 4 цвета, что является максимально возможным сочетанием цветов с 2 битами.

WinEunuuchs2Unix
источник
2
Для более дружественного к сценарию формата вы также можете это сделать identify -format %z- см . Параметры ImageMagick -format для более подробной информации.
пушистый
29

32-битный PNG (8 бит на канал - w / alpha, также называемый «24-битный PNG с 8-битным альфа» или «PNG24 с альфа»):

$ file zyne_zyne.png: 
PNG image data, 64 x 64, 8-bit/color RGBA, non-interlaced

24-битный PNG (8 бит на канал - без альфа-канала)

$ file 24.png
PNG image data, 1060 x 821, 8-bit/color RGB, non-interlaced

8-битный PNG (256 цветов):

$ file 8bit.png
PNG image data, 1060 x 821, 8-bit colormap, non-interlaced
Rinzwind
источник
И значок мой :-)
Rinzwind
1
PNG палитры по-прежнему имеют 8 бит на компонент RGBA, они ограничены 256 записями палитры. (Каждый пиксель представляет собой 8-битный или меньший индекс в палитре, а не хранит данные пикселей буквально). Не совсем понятно, что это. PNG24 также составляет 8 бит на компонент (не 24 бит на компонент). Так что это был бы лучший ответ, если бы вы показали вывод из обоих видов PNG.
Питер Кордес
Я неправильно понял, что вы имели в виду под «значком» 8 часов назад, но теперь я делаю, потому что проснулся с бронзой и серебром :)
WinEunuuchs2Unix
Значок с 1 по 10 - всегда победитель,
превосходящий
1
@evilSnobu> file- это мой основной инструмент идентификации файлов, и я всегда удивляюсь тому, как много он может рассказать даже о экзотических форматах файлов. Конечно, его реализация выросла совсем немного , так как 80 - е :)
spectras
8

Если у вас установлен exiftool , вы можете сделать:

bash-4.3 # exiftool continents_blank_l.png 
Номер версии ExifTool: 10.20
Имя файла: continents_blank_l.png
Каталог:
Размер файла: 170 кБ
Дата и время изменения файла: 2016: 07: 05 07: 59: 28 + 05: 30
Дата и время доступа к файлу: 2017: 08: 07 00: 35: 15 + 05: 30
Дата и время изменения файлового индекса: 2016: 07: 05 07: 59: 28 + 05: 30
Разрешения файла: rw-r - r--
Тип файла: PNG
Расширение типа файла: png
MIME Тип: изображение / PNG
Ширина изображения: 1100
Высота изображения: 850
Битовая глубина: 8
Тип цвета: RGB с альфа
Сжатие: выкачать / надуть
Фильтр: Адаптивный
Чересстрочная развертка: не чересстрочная
Цвет фона: 255 255 255
Пикселей за единицу X: 3937
Пикселей за единицу Y: 3937
Пиксельные единицы: метры
Дата изменения: 2016: 07: 05 02:29:28
Размер изображения: 1100x850
Мегапикселей: 0,935
Firelord
источник
5

Путь хакера: заглянуть в настоящие байты внутри блока IHDR PNG .

 $ od -j 24 -N 2 -t u1 -An drivemount-applet_open.png
   8   2

Первое число говорит вам бит глубины. Второй тип цвета (2 для изображений RGB, то есть изображений с тремя каналами или с тремя значениями выборки на пиксель).

Следовательно, в этом случае мы имеем PNG RGB8 (24 бита на пиксель).

leonbloy
источник
Разве это не PNG24 (8 бит на канал)? PNG8 - это 8-битная цветовая карта = 256 цветов.
evilSnobu
1
Да, RGB8 соответствует PNG24.
leonbloy
Правильно. Виноват. Я читал это как PNG8, а не RGB8. Ваш ответ полностью правильный.
evilSnobu
3

В качестве альтернативы вышеприведенному использованию «file», которое опирается на магию файлов в заголовке файла PNG, при работе с файлами PNG полезно установить пакет « pngtools ».

Затем pnginfo можно использовать для предоставления полной информации о свойствах файла PNG, включая BitDepth (Bits / Sample) (который не следует путать с другим свойством, Pixel Depth).

 file  Debian_Expo.png

 Debian_Expo.png: PNG image data, 1280 x 1024, 8-bit/color RGB, non-interlaced

 ---

 pnginfo Debian_Expo.png

 Image Width: 1280 Image Length: 1024
 Bitdepth (Bits/Sample): 8
 Channels (Samples/Pixel): 3
 Pixel depth (Pixel Depth): 24
 Colour Type (Photometric Interpretation): RGB 
 ...

Эквивалентом для файлов JPEG является jpeginfo, в своем собственном пакете jpeginfo.

Формат вывода pnginfo упрощает извлечение значения BitDepth (как оно есть в отдельной строке), если оно используется в сценарии оболочки.

Если файл на самом деле не является файлом PNG, потому что, например, это файл JPEG с неправильным названием, то pnginfo сообщит: «Этот файл не является допустимым файлом PNG».

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

Дж. Г. Миллер
источник