ข้อผิดพลาด GraphicsMagick อ่านไฟล์ PNG


3

เมื่อพยายามอ่านไฟล์ PNG ขนาดใหญ่คำสั่ง GraphicsMagick

gm convert pallaso1.png pallars-sobira.jpg

เพียงแสดงข้อผิดพลาดนี้

c:\progs\GraphicsMagick\gm convert: Read Exception (PALLASO1.PNG).

ผมมีรุ่นจีเอ็มล่าสุดGraphicsMagick 1.3.12 2010/03/08 Q16 ฉันได้ลองใช้งานด้วย-debug allตัวเลือกแล้วและบันทึกที่จับได้คือ

11:03:31 0:01 0.000u 6688 module.c/OpenModule/1447/Configure:
  Searching for module "PNG" using file name "IM_MOD_RL_PNG_.dll"
11:03:31 0:01 0.000u 6688 module.c/FindMagickModule/672/Configure:
  Searching for coder module file "IM_MOD_RL_PNG_.dll" ...
11:03:31 0:01 0.000u 6688 module.c/FindMagickModule/706/Configure:
  Searching for module file "IM_MOD_RL_PNG_.dll" in path "C:\Program Files\GraphicsMagick\"
11:03:31 0:01 0.000u 6688 utility.c/IsAccessible/2842/Configure:
  Found: C:\Program Files\GraphicsMagick\IM_MOD_RL_PNG_.dll
11:03:31 0:01 0.000u 6688 module.c/OpenModule/1469/Configure:
  Opening module at path "C:\Program Files\GraphicsMagick\IM_MOD_RL_PNG_.dll" ...
11:03:31 0:01 0.000u 6688 module.c/OpenModule/1505/Configure:
  Function "RegisterPNGImage" in module "PNG" at address 67750000
11:03:31 0:01 0.000u 6688 module.c/OpenModule/1522/Configure:
  Function "UnregisterPNGImage" in module "PNG" at address 677491A0
11:03:31 0:01 0.000u 6688 blob.c/OpenBlob/2361/Blob:
  Opening Blob for image 0x00B2DDB8 using ReadBinary mode ...
11:03:31 0:01 0.000u 6688 blob.c/OpenBlob/2544/Blob:
    I/O buffer set to 16384 bytes
11:03:31 0:01 0.000u 6688 blob.c/OpenBlob/2564/Blob:
    opened file "PALLASO1.PNG" as FileStream blob 0x00B2F7AC
11:03:31 0:01 0.000u 6688 blob.c/OpenBlob/2577/Blob:
    read 2053 magic header bytes
11:03:31 0:01 0.000u 6688 blob.c/CloseBlob/856/Blob:
  Closing FileStream blob 00B2F7AC
11:03:31 0:01 0.000u 6688 pixel_cache.c/DestroyCacheInfo/1733/Cache:
  destroy cache 
11:03:31 0:01 0.000u 6688 blob.c/DestroyBlob/989/Blob:
  Destroy blob, image=00B2DDB8, filename="PALLASO1.PNG"
11:03:31 0:01 0.000u 6688 constitute.c/ReadImage/8235/Blob:
  Magick=PNG, Filename=PALLASO1.PNG
11:03:31 0:01 0.000u 6688 constitute.c/ReadImage/8347/Coder:
  Invoking "PNG" decoder (Portable Network Graphics) subimage=0 subrange=0
11:03:31 0:01 0.000u 6688 png.c/ReadPNGImage/2785/Coder:
  enter ReadPNGImage()
11:03:31 0:01 0.000u 6688 blob.c/OpenBlob/2361/Blob:
  Opening Blob for image 0x00B2DDB8 using ReadBinary mode ...
11:03:31 0:01 0.000u 6688 blob.c/OpenBlob/2544/Blob:
    I/O buffer set to 16384 bytes
11:03:31 0:01 0.000u 6688 blob.c/OpenBlob/2564/Blob:
    opened file "PALLASO1.PNG" as FileStream blob 0x00B2F7AC
11:03:31 0:01 0.000u 6688 blob.c/OpenBlob/2577/Blob:
    read 2053 magic header bytes
11:03:31 0:01 0.000u 6688 png.c/ReadOnePNGImage/1610/Coder:
    enter ReadOnePNGImage()
11:03:31 0:01 0.000u 6688 png.c/ReadOnePNGImage/1762/Coder:
      PNG width: 2725, height: 3739
11:03:31 0:01 0.000u 6688 png.c/ReadOnePNGImage/1766/Coder:
      PNG color_type: 3, bit_depth: 8
11:03:31 0:01 0.000u 6688 png.c/ReadOnePNGImage/1769/Coder:
      PNG compression_method: 0
11:03:31 0:01 0.000u 6688 png.c/ReadOnePNGImage/1772/Coder:
      PNG interlace_method: 0, filter_method: 0
11:03:31 0:01 0.000u 6688 png.c/ReadOnePNGImage/2111/Coder:
      Reading PNG PLTE chunk: number_colors: 256.
11:03:31 0:01 0.000u 6688 png.c/ReadOnePNGImage/2181/Coder:
      Reading PNG IDAT chunk(s)
11:03:31 0:01 0.000u 6688 png.c/ReadOnePNGImage/2193/Coder:
      Converting PNG pixels to pixel packets
11:03:31 0:01 0.000u 6688 resource.c/AcquireMagickResource/224/Resource:
  pixels +9.7MP/----/409.6MP
11:03:31 0:01 0.000u 6688 resource.c/AcquireMagickResource/224/Resource:
  memory +97.2MB/97.2MB/1.6GB
11:03:31 0:01 0.000u 6688 pixel_cache.c/OpenCache/3050/Cache:
  open PALLASO1.PNG[0] (97.2M)
11:03:31 0:01 0.250u 6688 png.c/PNGWarningHandler/1364/Coder:
    libpng-1.2.43 warning: Expected 8 bytes; found 0 bytes
11:03:31 0:01 0.250u 6688 png.c/PNGWarningHandler/1369/Coder:
  Expected 8 bytes; found 0 bytes (PALLASO1.PNG)
11:03:31 0:01 0.250u 6688 png.c/PNGErrorHandler/1350/Coder:
    libpng-1.2.43 error: Read Exception
11:03:31 0:01 0.250u 6688 png.c/PNGErrorHandler/1353/Coder:
  Read Exception (PALLASO1.PNG)
11:03:31 0:01 0.250u 6688 png.c/ReadOnePNGImage/1680/Coder:
    exit ReadOnePNGImage() with error.
11:03:31 0:01 0.250u 6688 blob.c/CloseBlob/856/Blob:
  Closing FileStream blob 00B2F7AC
11:03:31 0:01 0.250u 6688 resource.c/LiberateMagickResource/752/Resource:
  memory -97.2MB/0B/1.6GB
11:03:31 0:01 0.250u 6688 pixel_cache.c/DestroyCacheInfo/1733/Cache:
  destroy cache PALLASO1.PNG[0]
11:03:31 0:01 0.250u 6688 blob.c/DestroyBlob/989/Blob:
  Destroy blob, image=00B2DDB8, filename="PALLASO1.PNG"
11:03:31 0:01 0.250u 6688 png.c/ReadPNGImage/2833/Coder:
  exit ReadPNGImage() with error.
11:03:31 0:01 0.250u 6688 constitute.c/ReadImage/8366/Coder:
  Returned from "PNG" decoder, returned image is NULL!
c:\progs\GraphicsMagick\gm convert: Read Exception (PALLASO1.PNG).
11:03:31 0:01 0.250u 6688 magick.c/DestroyMagick/153/Configure:
  Destroy Magick
11:03:31 0:01 0.250u 6688 module.c/UnloadModule/2180/Configure:
  Unloading "JPEG" module ...
11:03:31 0:01 0.250u 6688 module.c/UnloadModule/2180/Configure:
  Unloading "PNG" module ...

แก้ไข:ฉันสามารถทำซ้ำปัญหานี้ด้วยชุดไฟล์ภาพที่สมบูรณ์ในความเป็นจริงแล้วไฟล์รูปภาพทั้งหมดจากผู้เผยแพร่แผนที่เดียวกันมีปัญหาเดียวกัน และไฟล์เดียวกันดูดีด้วยโปรแกรมดูรูปภาพและโปรแกรมแก้ไขรูปภาพที่แตกต่างกัน เป็นเพียงจีเอ็มที่บ่นกับพวกเขา

ดัมพ์เลขฐานสิบหกของส่วนหัวไฟล์อยู่ที่นี่

0000  89504E470D0A1A0A-0000000D49484452 ëPNG........IHDR
0010  00000AA500000E9B-0803000000861588 ...Ñ...ø.....å.ê
0020  EC00000300504C54-45C65D5FF8C7C87C ý....PLTEã]_°Ã╚|
0030  66697B4F56CB7F8E-AE848CEA91AACA4C fi{OV╦⌂Ä«äîÛæ¬╩L
0040  75D593A8E5749ABE-6281F8C8D8D8628D uıô¿ÕtÜ¥bü°╚ÏÏbì
0050  E5B7C89A385FD4A6-B8300818CA3171E6 ÕÀ╚Ü8_Ȫ©0..╩1qµ
0060  498B4F0D2A711940-331724C40A65E80E IïO.*q.@3.$─.eÞ.
0070  7DE8C8D8D40A7696-0C57F3D8E8B891AB }Þ╚ÏÈ.vû.W¾ÏÞ©æ½
0080  180818D8C2D8F8E8-F89979AC4A2A82AC ...Ï┬Ï°Þ°Öy¼J*é¼
0090  A7BA080818E8E8F8-BDC7D8CED8E8D8E8 º║...ÞÞ°¢ÃÏ╬ÏÞÏÞ
00A0  F88BA7BA7A97A9AF-D7F00B202C8FCCEE °ïº║zù®»Î­. ,Å╠¯
00B0  C8E8F85FB5D371C7-E73A64737DB8CDA2 ╚Þ°_ÁËqÃþ:ds}©═ó
00C0  B8C00EB4E722363C-B8E8F609A8CC91C8 ©└.┤þ"6<©Þ÷.¿╠æ╚
00D0  D33EAABD61A4B109-A5B74F8F94324C4E Ë>¬¢añ▒.ÑÀOÅö2LN
00E0  76B1B70B939CB0D6-D80818186D94947F v▒À.ô£░ÍÏ...möö⌂
00F0  A8A8C8E8E8DCF8F8-C8D8D8D8E8E86668 ¿¿╚ÞÞ▄°°╚ÏÏÏÞÞfh

มีความคิดว่าทำไมสิ่งนี้เกิดขึ้น? คำแนะนำบางอย่างเพื่อตรวจสอบและแก้ไขปัญหา? มันอาจเป็นข้อบกพร่องในกรัมหรือไม่?

คำตอบ:


1

คำเตือน libpng-1.2.43: คาดว่าจะ 8 ไบต์; พบ 0 ไบต์

...

มีความคิดว่าทำไมสิ่งนี้เกิดขึ้น?

รูปภาพ PNG ไม่สอดคล้องกับมาตรฐานหรือ libpng-1.2.43 มีข้อบกพร่อง ฉันจะตรวจสอบสมมติฐานเดิมก่อน (PNG ที่ไม่ดี) ก่อน

  • โปรแกรมกราฟิกอื่นสามารถโหลดไฟล์ PNG ได้หรือไม่
  • การถ่ายโอนข้อมูล hex ของ 100 ไบต์แรกแสดงอะไร
  • คุณสามารถอัพโหลดภาพไปยังที่เก็บภาพสาธารณะได้หรือไม่?

ฉันแนะนำให้คุณตรวจสอบความสมบูรณ์ของไฟล์ PNG


อัปเดต: ดูอย่างรวดเร็วที่ฐานสิบหก:

แปดไบต์แรก89504E470D0A1A0Aเป็นส่วนหัว PNG มาตรฐานและถูกต้อง

ส่วนหัว PNG ควรตามด้วย "กลุ่ม" แต่ละอันมีสี่ส่วน: ความยาวส่วนหัวข้อมูลและการตรวจสอบ

ก้อน 1
ความยาวคือจำนวนเต็มสี่ไบต์ที่ไม่ได้ลงชื่อ0000000Dหมายถึงข้อมูล 13 ไบต์
ส่วนหัวคือ 49484452 หรือ "IHDR" ซึ่งกำหนดเป็น 13 ไบต์
ข้อมูลคือ 00 00 0A A5 00 00 0E 9B 08 03 00 00 00
เช็คซัมคือ 861588EC

Chunk 2
ความยาวคือ 00000300 (768 ฐานสิบ)
ส่วนหัวคือ 504C5445 "PLTE" (จานสีของค่า RGB สามไบต์ 100)
ข้อมูลคือ C65D5FF8C7C87C ...

ดังนั้นมันจึงดูสมบูรณ์แม้ว่าจะมีปัญหาในภายหลัง

ฉันจะตรวจสอบไฟล์ทั้งหมดโดยใช้โปรแกรม pngcheck ที่อ้างถึงข้างต้น


ขอบคุณสำหรับคำแนะนำ ฉันแก้ไขคำถามด้วยข้อมูลเพิ่มเติมเกี่ยวกับไฟล์ซึ่งดูดีในเครื่องมือแก้ไขรูปภาพและผู้ดูทั้งหมดที่ฉันได้ลองใช้
PA
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.