Làm cách nào để tìm hiểu xem PNG là PNG-8 hay PNG-24?


Câu trả lời:


25

Các filesử dụng lệnh trong câu trả lời khác là đôi khi không phù hợp. Ví dụ:

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

Ví dụ đầu tiên có khả năng là hình ảnh camera và ví dụ thứ hai tôi chụp bằng cách chụp màn hình.

Các identifylệnh, mà câu trả lời của tôi là dựa trên, dường như hoạt động chính xác trong tất cả các trường. Ví dụ thử nghiệm trên ví dụ đầu tiên ở trên:

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

Tôi đã cài đặt ImageMagick cho phép tôi sử dụng:

$ 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

Đối với một báo cáo tóm tắt bỏ qua tất cả các tham số:

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

Thay thế vnStat.pngbằng .pngtên tệp của riêng bạn và đặt trước nó bằng đường dẫn nếu cần thiết.


Để hiểu PNG-24 so với PNG-32, câu trả lời này của SuperUser tóm tắt nó:

Nếu hình ảnh của bạn là 24 bit, bạn sẽ thấy:

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

Nếu hình ảnh PNG của bạn là 32 bit, bạn sẽ thấy:

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

Tuy nhiên, câu trả lời này chưa đầy đủ vì màu 8 bit cũng hiển thị 8 bit cho Đỏ, Xanh lục và Xanh lam, chỉ có một bảng màu được sử dụng để giới hạn số lượng lựa chọn (như trong Windows 2.0 cũ).


Kiểm tra ba hình ảnh từ Wikipedia Độ sâu bài viết :

8_bit.png

Tên tệp: 8_bit.png

Sử dụng:

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

Chúng tôi thấy có 249 màu được sử dụng. Tối đa có thể với 8 bit là 256 màu.


4 bit

Tên tệp: 4_bit.png

Sử dụng:

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

Chúng tôi thấy có 16 màu được sử dụng là sự kết hợp màu tối đa có thể có với 4 bit.


2_bit.png

Tên tệp: 2_bit.png

Sử dụng:

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

Chúng tôi thấy có 4 màu được sử dụng là sự kết hợp màu tối đa có thể có với 2 bit.


2
Để có định dạng thân thiện với tập lệnh hơn, bạn cũng có thể thực hiện identify -format %z- xem các tùy chọn định dạng của ImageMagick để biết thêm.
lông mịn

29

PNG 32 bit (8 bit trên mỗi kênh - w / alpha, còn được gọi là "PNG 24 bit với 8 bit alpha" hoặc "PNG24 với alpha"):

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

PNG 24 bit (8 bit mỗi kênh - không có kênh alpha)

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

PNG 8 bit (256 màu):

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

Và huy hiệu là của tôi :-)
Rinzwind

1
Bảng màu PNG vẫn có 8 bit cho mỗi thành phần RGBA, chúng chỉ giới hạn ở 256 mục trong bảng màu. (Mỗi pixel là một chỉ mục 8 bit hoặc nhỏ hơn trong bảng màu, thay vì lưu trữ dữ liệu pixel theo nghĩa đen). Nó không hoàn toàn rõ ràng đây là gì. PNG24 cũng là 8 bit cho mỗi thành phần (không phải 24 bit cho mỗi thành phần). Vì vậy, đây sẽ là một câu trả lời tốt hơn nếu bạn hiển thị đầu ra từ cả hai loại PNG.
Peter Cordes

Tôi đã hiểu nhầm ý của bạn về "huy hiệu" 8 giờ trước nhưng bây giờ tôi đã làm tôi thức dậy với một đồng và bạc :)
WinEunuuchs2Unix

Huy hiệu từ 1 đến 10 luôn là người chiến thắng chỉ được đánh dấu từ 1 đến 100 ;-)
Rinzwind

1
@evilSnobu> filelà công cụ nhận dạng tệp chính của tôi và tôi luôn ngạc nhiên về mức độ có thể nói của nó về các định dạng tệp kỳ lạ. Cấp, thực hiện của nó đã tăng lên một chút kể từ những năm 80 :)
phổ

8

Nếu bạn đã cài đặt exiftool , bạn có thể làm:

bash-4.3 # exiftool continentsetric_l.png 
Số phiên bản ExifTool: 10.20
Tên tệp: continentsetric_l.png
Danh mục : .
Kích thước tệp: 170 kB
Ngày / Thời gian sửa đổi tệp: 2016: 07: 05 07: 59: 28 + 05: 30
Ngày / Thời gian truy cập tệp: 2017: 08: 07 00: 35: 15 + 05: 30
Thay đổi nút inode Ngày / Thời gian: 2016: 07: 05 07: 59: 28 + 05: 30
Quyền tệp: rw-r - r--
Loại tệp: PNG
Mở rộng loại tệp: png
Loại MIME: hình ảnh / png
Chiều rộng hình ảnh: 1100
Chiều cao hình ảnh: 850
Độ sâu bit: 8
Loại màu: RGB với Alpha
Nén: Xả / thổi phồng
Bộ lọc: Thích ứng
Xen kẽ: Không xen kẽ
Màu nền: 255 255 255
Điểm ảnh trên mỗi đơn vị X: 3937
Điểm ảnh trên mỗi đơn vị Y: ​​3937
Đơn vị pixel: mét
Ngày sửa đổi: 2016: 07: 05 02:29:28
Kích thước hình ảnh: 1100x850
Megapixel: 0,935

5

Cách thức của hacker: nhìn trộm các byte thực bên trong đoạn IHDR PNG .

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

Số đầu tiên cho bạn biết bitdepth. Thứ hai, loại màu (2 là cho hình ảnh RGB, nghĩa là hình ảnh có ba kênh hoặc ba giá trị mẫu trên mỗi pixel).

Do đó, trong trường hợp này, chúng tôi có RGB8 PNG (24 bit cho mỗi pixel).


Không phải đó là PNG24 (8 bit trên mỗi kênh)? PNG8 là colormap 8 bit = 256 màu.
evilSnobu

1
Có, RGB8 tương ứng với PNG24.
leonbloy

Đúng. Lỗi của tôi. Tôi đọc nó là PNG8 chứ không phải RGB8. Câu trả lời của bạn là hoàn toàn chính xác.
evilSnobu

3

Thay thế cho việc sử dụng "tệp" ở trên dựa trên ma thuật tệp trong tiêu đề của tệp PNG, nếu làm việc với các tệp PNG, sẽ rất hữu ích khi cài đặt gói " pngtools ".

pnginfo sau đó có thể được sử dụng để cung cấp đầy đủ chi tiết về các thuộc tính của tệp PNG bao gồm BitDepth (Bits / Sample) (không nên nhầm lẫn với thuộc tính khác, 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 
 ...

Tương đương với các tệp JPEG là jpeginfo, trong gói jpeginfo riêng của nó.

Định dạng đầu ra của pnginfo giúp trích xuất giá trị của BitDepth dễ dàng hơn (vì nó nằm trên một dòng riêng) nếu nó được sử dụng trong tập lệnh shell.

Nếu tệp không thực sự là tệp PNG, vì ví dụ: đó là JPEG bị đặt tên sai, thì pnginfo sẽ báo cáo "Tệp này không phải là tệp PNG hợp lệ".

Như mọi khi, công cụ thích hợp cho công việc được xác định, trong số những thứ khác, bằng tần suất bạn sẽ sử dụng công cụ và cách bạn muốn xử lý đầu ra.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.