Bagaimana cara saya mengetahui apakah PNG adalah PNG-8 atau PNG-24?

Jawaban:

25

The filemenggunakan perintah dalam jawaban lainnya kadang-kadang tidak konsisten. Sebagai contoh:

───────────────────────────────────────────────────────────────────────────────
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

Contoh pertama adalah kemungkinan gambar kamera dan contoh kedua saya ambil menggunakan tangkapan layar.

The identifyperintah, yang jawaban saya didasarkan pada, muncul untuk bekerja dengan benar dalam semua kasus. Misalnya pengujian pada instance pertama di atas:

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

Saya telah menginstal ImageMagick yang memungkinkan saya untuk menggunakan:

$ 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

Untuk laporan ringkasan, hapus semua parameter:

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

Ganti vnStat.pngdengan .pngnama file Anda sendiri dan awali dengan path jika perlu.


Untuk memahami PNG-24 vs PNG-32, jawaban dari SuperUser ini merangkum:

Jika gambar Anda 24 bit Anda akan melihat:

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

Jika gambar PNG Anda 32 bit, Anda akan melihat:

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

Namun jawaban ini tidak lengkap karena warna 8-bit juga menunjukkan 8 bit untuk Merah, Hijau dan Biru, hanya palet warna yang digunakan untuk membatasi jumlah pilihan (seperti pada Windows 2.0 tua yang baik).


Periksa ketiga gambar ini dari Artikel Kedalaman Wikipedia :

8_bit.png

Nama file: 8_bit.png

Menggunakan:

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

Kami melihat ada 249 warna yang digunakan. Maksimal mungkin dengan 8 bit adalah 256 warna.


4 bit

Nama file: 4_bit.png

Menggunakan:

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

Kami melihat ada 16 warna yang digunakan yang merupakan kombinasi warna maksimum yang dimungkinkan dengan 4 bit.


2_bit.png

Nama file: 2_bit.png

Menggunakan:

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

Kami melihat ada 4 warna yang digunakan yang merupakan kombinasi warna maksimum yang dimungkinkan dengan 2 bit.

WinEunuuchs2Unix
sumber
2
Untuk format yang lebih ramah-skrip, Anda juga dapat melakukannya identify -format %z- lihat opsi-format ImageMagick untuk lebih lanjut.
mengembang
29

PNG 32-bit (8 bit per saluran - w / alpha, juga disebut "PNG 24-bit dengan 8-bit alpha" atau "PNG24 dengan alpha"):

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

PNG 24-bit (8 bit per saluran - tidak ada saluran alfa)

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

PNG 8-bit (256 warna):

$ file 8bit.png
PNG image data, 1060 x 821, 8-bit colormap, non-interlaced
Rinzwind
sumber
Dan lambang milikku :-)
Rinzwind
1
PNG palet masih memiliki 8 bit per komponen RGBA, mereka hanya terbatas pada 256 entri palet. (Setiap piksel adalah indeks 8-bit atau lebih kecil ke dalam palet, daripada menyimpan data piksel secara harfiah). Tidak sepenuhnya jelas yang mana ini. PNG24 juga 8 bit per komponen (bukan 24 bit per komponen). Jadi ini akan menjadi jawaban yang lebih baik jika Anda menunjukkan keluaran dari kedua jenis PNG.
Peter Cordes
Saya salah paham apa yang Anda maksud dengan "lencana" 8 jam yang lalu, tetapi sekarang karena saya bangun dengan perunggu dan perak :)
WinEunuuchs2Unix
Lencana 1 hingga 10 selalu menjadi pemenang hanya dikalahkan oleh 1 hingga 100 ;-)
Rinzwind
1
@evilSnobu> fileadalah alat identifikasi file utama saya dan saya selalu kagum pada berapa banyak yang dapat diceritakan bahkan tentang format file yang eksotis. Memang, implementasinya tumbuh sedikit sejak tahun 80-an :)
spectras
8

Jika Anda telah menginstal exiftool , Anda dapat melakukan:

bash-4.3 # exiftool continents_blank_l.png 
Nomor Versi ExifTool: 10.20
Nama File: continents_blank_l.png
Direktori : .
Ukuran File: 170 kB
Modifikasi File Tanggal / Waktu: 2016: 07: 05 07: 59: 28 + 05: 30
Tanggal / Waktu Akses File: 2017: 08: 00 00: 35: 15 + 05: 30
Perubahan Nama File Tanggal / Waktu: 2016: 07: 05 07: 59: 28 + 05: 30
Izin File: rw-r - r--
Jenis File: PNG
Ekstensi Jenis File: png
Jenis MIME: image / png
Lebar Gambar: 1100
Tinggi Gambar: 850
Kedalaman Bit: 8
Jenis Warna: RGB dengan Alpha
Kompresi: Mengempis / Mengembang
Filter: Adaptif
Jalin: Noninterlaced
Warna Latar Belakang: 255 255 255
Piksel Per Unit X: 3937
Piksel Per Unit Y: 3937
Unit Pixel: meter
Ubah Tanggal: 2016: 07: 05 02:29:28
Ukuran Gambar: 1100x850
Megapiksel: 0,935
Raja Api
sumber
5

Cara hacker: mengintip ke byte nyata di dalam IHDR PNG chunk .

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

Angka pertama memberitahu Anda bitdepth. Yang kedua, jenis warna (2 untuk gambar RGB, yaitu, gambar dengan tiga saluran, atau tiga nilai sampel per piksel).

Karenanya, dalam hal ini kami memiliki RGB8 PNG (24 bit per piksel).

leonbloy
sumber
Bukankah itu PNG24 (8-bit per saluran)? PNG8 adalah colormap 8-bit = 256 warna.
evilSnobu
1
Ya, RGB8 sesuai dengan PNG24.
leonbloy
Baik. Salahku. Saya membaca bahwa sebagai PNG8 bukan RGB8. Jawaban Anda sepenuhnya benar.
evilSnobu
3

Sebagai alternatif untuk penggunaan "file" di atas yang mengandalkan sihir file di header file PNG, jika bekerja dengan file PNG, paket " pngtools " perlu diinstal.

pnginfo kemudian dapat digunakan untuk memberikan detail lengkap dari properti file PNG termasuk BitDepth (Bit / Sampel) (yang tidak boleh dikacaukan dengan properti lain, 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 
 ...

Setara dengan file JPEG adalah jpeginfo, dalam paketnya sendiri jpeginfo.

Format output pnginfo membuatnya lebih mudah untuk mengekstraksi nilai BitDepth (seperti pada baris terpisah) jika sedang digunakan dalam skrip shell.

Jika file tersebut sebenarnya bukan file PNG, karena mis. File tersebut adalah JPEG yang salah nama, maka pnginfo akan melaporkan "File ini bukan file PNG yang valid".

Seperti biasa, alat yang sesuai untuk pekerjaan ditentukan, antara lain, seberapa sering Anda akan menggunakan alat itu dan bagaimana Anda ingin memproses hasilnya.

JG Miller
sumber