Bir PNG'nin PNG-8 veya PNG-24 olup olmadığını nasıl öğrenebilirim?


Yanıtlar:


25

fileDiğer yanıtlar komut kullanımı bazen tutarsız. Örneğin:

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

İlk örnek muhtemelen bir kamera resmi, ikinci örnek ise ekran görüntüsü yakalama.

identifyCevabım dayanan komut, her durumda düzgün çalışması için görünür. Örneğin yukarıdaki ilk örnek üzerinde test yapma:

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

Ben ImageMagick kullanımına beni sağlayan yüklü:

$ 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

Özet rapor için tüm parametreleri atlayın:

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

vnStat.pngKendi .pngdosya adınızla değiştirin ve gerekiyorsa yolla önceden başlayın .


PNG-24 ve PNG-32'yi anlamak için SuperUser'dan gelen bu cevap özetliyor:

Resminiz 24 bit ise şunu göreceksiniz:

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

PNG resminiz 32 bit ise şunu görürsünüz:

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

Ancak bu cevap tam değildir, çünkü 8 bit renk Kırmızı, Yeşil ve Mavi için 8 bit gösterir, seçim sayısını sınırlamak için sadece bir renk paleti kullanılır (iyi eski Windows 2.0'da olduğu gibi).


Bu üç resmi Wikipedia Derinlik Makalesinden inceleyin :

8_bit.png

Dosya adı: 8_bit.png

Kullanımı:

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

Kullanılan 249 renk olduğunu görüyoruz. 8 bit ile mümkün olan maksimum değer 256 renktir.


4 bit

Dosya adı: 4_bit.png

Kullanımı:

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

4 bit ile mümkün olan maksimum renk kombinasyonları olan 16 renk kullanıldığını görüyoruz.


2_bit.png

Dosya adı: 2_bit.png

Kullanımı:

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

Kullanılan 2 renk ile mümkün olan maksimum renk kombinasyonları olan 4 renk olduğunu görüyoruz.


2
Daha komut dosyası dostu bir format için de yapabilirsiniz identify -format %z- daha fazla bilgi için ImageMagick'in -format seçeneklerine bakın.
kabarık

29

32 bit PNG (kanal başına 8 bit - w / alfa, "8 bit alfa ile 24 bit PNG" veya "alfa ile PNG24" olarak da bilinir):

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

24 bit PNG (kanal başına 8 bit - alfa kanalı yok)

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

8 bit PNG (256 renk):

$ file 8bit.png
PNG image data, 1060 x 821, 8-bit colormap, non-interlaced

Ve rozet benim :-)
Rinzwind

1
Palet PNG'lerinin her RGBA bileşeni için 8 biti vardır, sadece 256 palet girişi ile sınırlıdır. (Her piksel, piksel verilerini tam anlamıyla depolamak yerine palete 8 bit veya daha küçük bir dizindir). Bunun hangisi olduğu tam olarak belli değil. PNG24 ayrıca bileşen başına 8 bittir ( bileşen başına 24 bit değildir). Her iki PNG türünden de çıktı gösterdiyseniz, bu daha iyi bir yanıt olacaktır.
Peter Cordes

8 saat önce "rozeti" ile ne demek istediğini yanlış anladım ama şimdi bronz ve gümüş ile uyandığım için neden :)
WinEunuuchs2Unix

1 ile 10 arasında rozet her zaman kazanan sadece 1 - 100 ;-) tarafından
boğulmuş

1
@evilSnobu> filebenim birincil dosya tanımlama aracımdır ve egzotik dosya formatları hakkında bile ne kadar şey söyleyebileceğine hep hayran kaldım. Verilmiş, uygulaması 80'lerden beri biraz büyüdü :)
spectras

8

Eğer varsa ExifTool yüklü, bunu yapabilirsiniz:

bash-4.3 # exiftool continents_blank_l.png 
ExifTool Sürüm Numarası: 10.20
Dosya Adı: continents_blank_l.png
Dizin:.
Dosya Boyutu: 170 kB
Dosya Değiştirme Tarihi / Saati: 2016: 07: 05 07: 59: 28 + 05: 30
Dosya Erişim Tarihi / Saati: 2017: 08: 07 00: 35: 15 + 05: 30
Dosya Inode Değiştirme Tarihi / Saati: 2016: 07: 05 07: 59: 28 + 05: 30
Dosya İzinleri: rw-r - r--
Dosya Tipi: PNG
Dosya Tipi Uzantısı: png
MIME Türü: görüntü / png
Görüntü Genişliği: 1100
Görüntü Yüksekliği: 850
Bit Derinliği: 8
Renk Türü: Alfa ile RGB
Sıkıştırma: Söndürme / Şişirme
Filtre: Uyarlanabilir
Taramalı: Titreşimsiz
Arka Plan Rengi: 255255255
Birim Başına Piksel X: 3937
Birim Başına Piksel Y: 3937
Piksel Birimleri: metre
Değiştirme Tarihi: 2016: 07: 05 02:29:28
Görüntü Boyutu: 1100x850
Megapiksel: 0.935

5

Bilgisayar korsanının yolu: IHDR PNG yığınındaki gerçek baytlara göz atın .

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

İlk sayı bit bitini gösterir. İkincisi, renk türü (2, RGB görüntüler, yani üç kanallı görüntüler veya piksel başına üç örnek değer içindir).

Bu nedenle, bu durumda bir RGB8 PNG'ye (piksel başına 24 bit) sahibiz.


Bu PNG24 (kanal başına 8 bit) değil mi? PNG8, 8 bit renk haritası = 256 renktir.
evilSnobu

1
Evet, RGB8 PNG24'e karşılık gelir.
leonbloy

Sağ. Benim hatam. Ben RGB8 değil PNG8 olarak okudum. Cevabınız tamamen doğru.
evilSnobu

3

PNG dosyasının başlığındaki dosya büyüsüne dayanan yukarıdaki "dosya" kullanımına alternatif olarak, PNG dosyalarıyla çalışıyorsanız, " pngtools " paketinin yüklü olması yararlıdır .

pnginfo daha sonra BitDepth (Bit / Sample) (başka bir özellik olan Piksel Derinliği ile karıştırılmamalıdır) dahil PNG dosyasının özelliklerinin tüm ayrıntılarını vermek için kullanılabilir.

 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 dosyaları için eşdeğer jpeginfo, kendi paketinde jpeginfo.

Pnginfo çıktısının biçimi, bir kabuk komut dosyasında kullanılıyorsa, BitDepth'in değerini (ayrı bir satırda olduğu gibi) ayıklamayı kolaylaştırır.

Dosya aslında bir PNG dosyası değilse, örneğin yanlış adlandırılmış bir JPEG olduğundan, pnginfo "Bu dosya geçerli bir PNG dosyası değildir" raporunu verecektir.

Her zaman olduğu gibi, iş için uygun araç, diğer şeylerin yanı sıra, aracı ne sıklıkta kullanacağınız ve çıktıyı nasıl işlemek istediğinize göre belirlenir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.