Ошибка GraphicsMagick при чтении файла PNG

2245
PA.

При попытке прочитать большой файл PNG, команда GraphicsMagick

gm convert pallaso1.png pallars-sobira.jpg 

просто отображает эту ошибку

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

У меня последняя версия GM, 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 ... 

Изменить: я могу воспроизвести эту проблему с полным набором файлов изображений, на самом деле все файлы изображений от одного издателя карты имеют ту же проблему. И те же файлы хорошо смотрятся с различными программами просмотра изображений и графическими редакторами. На них жалуется только GM.

Шестнадцатеричный дамп заголовка файла находится здесь

0000 89504E470D0A1A0A-0000000D49484452 ëPNG........IHDR 0010 00000AA500000E9B-0803000000861588 ...Ñ...ø.....å.ê 0020 EC00000300504C54-45C65D5FF8C7C87C ý....PLTEã]_°Ã╚| 0030 66697B4F56CB7F8E-AE848CEA91AACA4C fiÞ╚ÏÈ.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 

Есть идеи, почему это происходит? некоторые советы, чтобы определить и решить проблему? это может быть ошибка в GM?

3

1 ответ на вопрос

1
RedGrittyBrick

предупреждение libpng-1.2.43: ожидается 8 байт; найдено 0 байт

...

Есть идеи, почему это происходит?

Либо изображение PNG не соответствует стандарту, либо в libpng-1.2.43 есть ошибка. Сначала я бы исследовал прежнюю гипотезу (плохой PNG).

  • Могут ли другие графические программы загружать файл PNG?
  • Что показывает шестнадцатеричный дамп первых 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


Блок 2 Длина - 00000300 (десятичное число 768),
заголовок - 504C5445 «PLTE» (палитра 100 трехбайтовых значений RGB)
. Данные C65D5FF8C7C87C…

Так что это, безусловно, выглядит правдоподобно, хотя позже может возникнуть проблема.

Я бы проверил весь файл с помощью программы pngcheck, упомянутой выше.

Спасибо за предложение. Я редактирую свой вопрос с дополнительной информацией о файле, который хорошо выглядит во всех редакторах изображений и средствах просмотра, на которых я его пробовал. PA. 13 лет назад 0