ฉันจะทราบได้อย่างไรว่า 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

อินสแตนซ์แรกน่าจะเป็นภาพจากกล้องและอินสแตนซ์ที่สองที่ฉันถ่ายโดยใช้การจับภาพหน้าจอ

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 :

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เพิ่มเติม
ปุย

29

32-bit PNG (8 บิตต่อช่อง - w / alpha หรือที่เรียกว่า "24-bit PNG พร้อม 8-bits of alpha" หรือ "PNG24 with alpha"):

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

PNG 24 บิต (8 บิตต่อช่อง - ไม่มีช่องอัลฟา)

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

PNG 8 บิต (256 สี):

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

และตราสัญลักษณ์ก็เป็นของฉัน :-)
Rinzwind

1
Palette PNGs ยังคงมี 8 บิตต่อองค์ประกอบ RGBA พวกเขาเพิ่ง จำกัด 256 รายการจานสี (แต่ละพิกเซลเป็นดัชนีขนาด 8 บิตหรือเล็กกว่าลงในจานสีแทนที่จะเก็บข้อมูลพิกเซลอย่างแท้จริง) มันไม่ชัดเจนเลยว่ามันคืออะไร PNG24 ยังเป็น 8 บิตต่อองค์ประกอบ (ไม่ใช่ 24 บิตต่อองค์ประกอบ) นี่จะเป็นคำตอบที่ดีกว่าถ้าคุณแสดงผลลัพธ์จาก PNG ทั้งสองชนิด
Peter Cordes

ฉันเข้าใจผิดว่าคุณหมายถึงอะไรโดย "ตรา" 8 ชั่วโมงที่ผ่านมา แต่ตอนนี้ฉันจะทำให้ฉันตื่นขึ้นมาด้วยสีบรอนซ์และสีเงิน :)
WinEunuuchs2Unix

ป้ายที่ 1 ถึง 10 อยู่เสมอผู้ชนะที่ได้รับการคัดเลือกโดย 1 ถึง 100 ;-)
Rinzwind

1
@evilSnobu> fileเป็นเครื่องมือการระบุไฟล์หลักของฉันและฉันประหลาดใจอยู่เสมอว่าจะสามารถบอกได้ว่ารูปแบบไฟล์แปลกใหม่มากเพียงใด ที่ได้รับการดำเนินการขยายตัวไม่น้อยตั้งแต่ยุค 80 :)
Spectras

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
File Inode Change วันที่ / เวลา: 2016: 07: 05 07: 59: 28 + 05: 30
สิทธิ์ของไฟล์: rw-r - r--
ประเภทไฟล์: PNG
นามสกุลไฟล์ประเภท: png
ประเภท MIME: image / png
ความกว้างของภาพ: 1100
ความสูงของภาพ: 850
ความลึกบิต: 8
ประเภทสี: RGB พร้อมอัลฟ่า
การบีบอัด: ยุบ / ขยาย
ตัวกรอง: Adaptive
Interlace: Noninterlaced
สีพื้นหลัง: 255 255 255
พิกเซลต่อหน่วย 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 คือ colormap 8 บิต = 256 สี
evilSnobu

1
ใช่ RGB8 สอดคล้องกับ PNG24
leonbloy

ขวา. ความผิดฉันเอง. ฉันอ่านนั่นเป็น PNG8 ไม่ใช่ RGB8 คำตอบของคุณถูกต้องทั้งหมด
evilSnobu

3

เพื่อเป็นทางเลือกแทนการใช้ "file" ข้างต้นซึ่งต้องอาศัยความมหัศจรรย์ของไฟล์ในส่วนหัวของไฟล์ PNG หากทำงานกับไฟล์ PNG จะมีประโยชน์หากมีแพ็คเกจ " pngtools " ติดตั้งอยู่

จากนั้นpnginfoสามารถใช้เพื่อให้รายละเอียดทั้งหมดเกี่ยวกับคุณสมบัติของไฟล์ PNG รวมถึง BitDepth (บิต / ตัวอย่าง) (ซึ่งไม่ควรสับสนกับคุณสมบัติอื่น, ความลึกของพิกเซล)

 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.