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

最初のインスタンスはおそらくカメラの写真で、2番目のインスタンスはスクリーンキャプチャを使用して撮影しました。

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 Depth Articleからこれらの3つの写真を調べます。

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

4ビットで可能な最大の色の組み合わせである16色が使用されています。


2_bit.png

ファイル名: 2_bit.png

を使用して:

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

2ビットで可能な最大の色の組み合わせである4色が使用されていることがわかります。


2
よりスクリプトフレンドリーな形式identify -format %zについても行うことができます-ImageMagickの-formatオプションを参照してください。
ふわふわ

29

32ビットPNG(チャンネルごとに8ビット-アルファ付き、「8ビットのアルファ付き24ビットPNG」または「アルファ付き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

そして、バッジは私のものです:-)
リンツウィンド

1
パレットPNGは、RGBAコンポーネントごとに8ビットのままです。パレットエントリは256個に制限されています。(各ピクセルは、ピクセルデータを文字通り保存するのではなく、パレットへの8ビット以下のインデックスです)。これが完全に明確ではありません。 PNG24もコンポーネントあたり8ビットです(コンポーネントあたり24ビットではありません)。したがって、両方の種類のPNGからの出力を示した場合、これはより良い答えになります。
ピーターコーデス

8時間前に「バッジ」の意味を誤解していましたが、今は青銅と銀で目が覚めました:)
WinEunuuchs2Unix

1から10バッジは常に1から100に勝っただけの勝者です;-)
リンツウィンド

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
ファイルiノード変更日時:2016:07:05 07:59:28 + 05:30
ファイル許可:rw-r--r--
ファイルの種類:PNG
ファイルタイプ拡張子:png
MIMEタイプ:image / png
画像の幅:1100
画像の高さ:850
ビット深度:8
カラータイプ:アルファ付きRGB
圧縮:収縮/膨張
フィルター:適応
インターレース:ノンインターレース
背景色:255 255 255
ユニットXあたりのピクセル数:3937
ユニットYあたりのピクセル数:3937
ピクセル単位:メートル
変更日:2016:07:05 02:29:28
画像サイズ:1100x850
メガピクセル:0.935

5

ハッカーの方法:IHDR PNG chunk内の実際のバイトを覗きます。

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

最初の数字はビット深度を示します。2番目の色の種類(2はRGB画像、つまり3つのチャネルを持つ画像、またはピクセルあたり3つのサンプル値)です。

したがって、この場合、RGB8 PNG(ピクセルあたり24ビット)があります。


PNG24(チャネルあたり8ビット)ではないですか?PNG8は8ビットカラーマップ= 256色です。
evilSnobu

1
はい、RGB8はPNG24に対応しています。
レオンブロ

正しい。私の悪い。RGB8ではなくPNG8として読みました。あなたの答えは完全に正しいです。
evilSnobu

3

PNGファイルのヘッダーでのファイルマジックに依存する上記の「ファイル」の使用の代替として、PNGファイルを使用する場合、「pngtools」パッケージをインストールしておくと便利です。

pnginfoを使用して、BitDepth(ビット/サンプル)(別のプロパティPixel Depthと混同しないでください)を含むPNGファイルのプロパティの詳細を提供できます。

 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ファイルではありません」と報告します。

いつものように、ジョブに適切なツールは、とりわけ、ツールを使用する頻度と出力の処理方法によって決定されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.