如何确定PNG是PNG-8还是PNG-24?


Answers:


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中)。


检查Wikipedia深度文章中的这三张图片:

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位可能的最大颜色组合。


2
对于脚本更友好的格式,您也可以执行identify -format %z-参见ImageMagick的-format选项
蓬松的

29

32位PNG(每个通道8位-w / alpha,也称为“带有8位alpha的24位PNG”或“带有alpha的PNG24”):

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

24位PNG(每通道8位-无Alpha通道)

$ 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 '17

1
调色板PNG的每个RGBA组件仍然有8位,但仅限于256个调色板条目。(每个像素是调色板中的8位或更小的索引,而不是从字面上存储像素数据)。目前尚不清楚。 PNG24也是每个组件8位(不是每个组件24位)。因此,如果您显示两种PNG的输出,这将是一个更好的答案。
彼得·科德斯

8小时前,我误解了“徽章”的含义,但现在我确实是因为醒来时用了青铜和银:)
WinEunuuchs2Unix

1到10的徽章永远是赢家,只有1到100才是冠军;-)
Rinzwind '17

1
@evilSnobu> file是我的主要文件识别工具,我总是惊讶于它甚至可以说明异乎寻常的文件格式。当然,自80年代以来,它的实现就增长了很多:)
光谱

8

如果安装了exiftool,则可以执行以下操作:

bash-4.3#exiftool continents_blank_l.png 
ExifTool版本号:10.20
文件名:continents_blank_l.png
目录 : 。
档案大小:170 kB
文件修改日期/时间: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类型:image / png
图像宽度:1100
图像高度:850
位深:8
颜色类型:带Alpha的RGB
压缩:放气/充气
过滤器:自适应
隔行:非隔行
背景颜色:255255255
每X像素数:3937
Y单位像素数:3937
像素单位:米
修改日期:2016:07:05 02:29:28
图片尺寸:1100x850
百万像素:0.935

5

黑客的方式:窥探IHDR PNG块中的实际字节。

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

第一个数字告诉您位深度。第二种是颜色类型(2是用于RGB图像,即具有三个通道或每个像素三个采样值的图像)。

因此,在这种情况下,我们具有RGB8 PNG(每个像素24位)。


那不是PNG24(每个通道8位)吗?PNG8是8位色图= 256色。
evilSnobu

1
是的,RGB8对应于PNG24。
leonbloy

对。我的错。我读为PNG8而不是RGB8。您的答案是完全正确的。
evilSnobu

3

作为上述“文件”的替代选择,它依赖于PNG文件标题中的文件魔术,如果要使用PNG文件,则安装“ pngtools ”软件包很有用。

然后,可以使用pnginfo提供PNG文件属性的完整详细信息,包括BitDepth(位/样本)(不要与另一个属性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中。

如果在shell脚本中使用了pnginfo的输出格式,则可以更轻松地提取BitDepth的值(因为它位于单独的行中)。

如果该文件实际上不是PNG文件(例如,它是一个错误的JPEG),则pnginfo将报告“此文件不是有效的PNG文件”。

与往常一样,除其他事项外,还取决于您要使用该工具的频率以及希望处理输出的方式来确定合适的工具。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.