PNG dosyasını okurken GraphicsMagick hatası


3

Büyük bir PNG dosyasını okumaya çalışırken, GraphicsMagick komutu

gm convert pallaso1.png pallars-sobira.jpg

sadece bu hatayı gösterir

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

En yeni GM sürümüne sahibim, GraphicsMagick 1.3.12 2010-03-08 Q16 . -debug allSeçeneği ile yürütmeyi denedim ve yakalanan günlük

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

Düzenleme: Bu sorunu eksiksiz bir dizi görüntü dosyasıyla yeniden oluşturabilirim, aslında aynı harita yayıncıdaki görüntü dosyalarının tümü aynı soruna sahiptir. Aynı dosyalar farklı resim görüntüleyiciler ve resim düzenleyiciler ile iyi görünür. Onlardan şikayetçi olan sadece GM.

Dosya başlığının onaltılık dökümü burada

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

Neden olduğuna dair fikri olan? Sorunu belirlemek ve çözmek için bazı ipuçları? gm bir hata olabilir mi?

Yanıtlar:


1

libpng-1.2.43 uyarısı: Beklenen 8 bayt; 0 bayt bulundu

...

Neden olduğuna dair fikri olan?

PNG görüntüsü ya standarda uymuyor ya da libpng-1.2.43'te bir hata var. Önce eski hipotezi (kötü PNG) araştırırdım.

  • Diğer grafik programları PNG dosyasını yükleyebilir mi?
  • İlk 100 baytlık bir hex dökümü ne gösterir?
  • Resmi halka açık bir resim havuzuna yükleyebilir misiniz?

PNG dosyasının bütünlüğünü kontrol etmenizi öneririm


Güncelleme: onaltılı çöplüğe hızlı bir bakış:

İlk sekiz bayt 89504E470D0A1A0Astandart PNG başlığıdır ve doğrudur.

PNG başlığını bir "yığın" takip etmelidir. Her parça dört bölümden oluşur: uzunluk, başlık, veri ve sağlama toplamı.

Öbek 1
Uzunluk, 0000000D13 bayt veri anlamına gelen dört baytlık işaretsiz tamsayıdır .
Başlık 49484452 veya 13 baytlık bir yığın olarak tanımlanan "IHDR" dir.
Veriler 00 00 0A A5 00 00 0E 9B 08 03 00 00 00
olup sağlama toplamı 861588EC'dir

Chunk 2
Uzunluk 00000300 (768 ondalık)
, başlık 504C5445 "PLTE" (100 üç bayt RGB değer paleti) 'dir
. Veriler C65D5FF8C7C87C…

Bu yüzden daha sonra bir sorun olabilir, ancak kesinlikle geçerli görünüyor.

Yukarıda belirtilen pngcheck programını kullanarak bütün dosyayı kontrol ederdim.


Önerin için teşekkürler. Sorumu, üzerinde denediğim tüm resim düzenleyicilerinde ve görüntüleyicilerinde iyi görünen dosya hakkında daha fazla bilgi ile düzenliyorum.
PA.
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.