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

10

У меня есть файл PNG, но я не могу сказать, это PNG-8 или PNG-24?

    
задан ExillustX 06.08.2017 в 17:45
источник

5 ответов

20

Команда file , используемая в других ответах, иногда непоследовательна. Например:

───────────────────────────────────────────────────────────────────────────────
[email protected]:~/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
───────────────────────────────────────────────────────────────────────────────
[email protected]:~/Pictures$ file "vnStat.png"
vnStat.png: PNG image data, 410 x 121, 8-bit/color RGB, non-interlaced

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

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

[email protected]:~/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

Использование:

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

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

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

Использование:

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

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

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

Использование:

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

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

    
ответ дан WinEunuuchs2Unix 06.08.2017 в 17:52
источник
27

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 06.08.2017 в 17:54
8

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

bash-4.3# exiftool continents_blank_l.png 
ExifTool Version Number         : 10.20
File Name                       : continents_blank_l.png
Directory                       : .
File Size                       : 170 kB
File Modification Date/Time     : 2016:07:05 07:59:28+05:30
File Access Date/Time           : 2017:08:07 00:35:15+05:30
File Inode Change Date/Time     : 2016:07:05 07:59:28+05:30
File Permissions                : rw-r--r--
File Type                       : PNG
File Type Extension             : png
MIME Type                       : image/png
Image Width                     : 1100
Image Height                    : 850
Bit Depth                       : 8
Color Type                      : RGB with Alpha
Compression                     : Deflate/Inflate
Filter                          : Adaptive
Interlace                       : Noninterlaced
Background Color                : 255 255 255
Pixels Per Unit X               : 3937
Pixels Per Unit Y               : 3937
Pixel Units                     : meters
Modify Date                     : 2016:07:05 02:29:28
Image Size                      : 1100x850
Megapixels                      : 0.935
    
ответ дан Firelord 06.08.2017 в 19:17
5

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

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

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

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

    
ответ дан leonbloy 07.08.2017 в 18:44
3

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

pnginfo можно затем использовать, чтобы дать полную информацию о свойствах PNG-файла, включая BitDepth (бит / образец) (который не следует путать с другим свойством Depth 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».

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

    
ответ дан J G Miller 07.08.2017 в 18:38