2015-12-26 3 views
0

Этот PNG file не может быть загружен из моего приложения на сервер 3d-party. Он всегда сообщает об этой ошибке:Что такого особенного в этом файле PNG?

does multipart has image?

Я уверен, что множественная кодировка верна. С этой проблемой загружаются десятки тысяч изображений из моего приложения. Это он первый раз.

Я предполагаю, что есть что-то особенное об этом PNG-файла, и я доказал это:

  1. Dropbox IOS приложение не может отобразить изображение.
  2. Tweetbot не может загрузить его. Сообщение об ошибке «Тип носителя непризнан».

Так что этот файл PNG действительно особенный, и некоторые приложения и серверы не справляются с ним должным образом. Но я не знаю, что в этом особенного, и надеюсь, что кто-то, кто знает PNG лучше меня, может помочь. Благодарю.

+0

Я скачал и открыл его, и это прекрасно, и в силе (показывает женское лицо на большом черном фоне) – Aganju

+0

@Aganju вы можете просто попробовать открывая его в браузере. Вы проголосовали? – an0

+0

FYI, я попытался открыть его в Adobe LightRoom (CC 2015), и он также говорит, что это «неподдерживаемый формат» * (я сделал * не * downvote it - why would I) – Aganju

ответ

3

Это файл CgBI, а не PNG, скорее всего, сделанный с измененным pngcrush от Apple.

Такие файлы всегда содержат «CgBI» в байтах 12-15, где принадлежит «IHDR».

CgBI файлы могут быть преобразованы в действительные файлы PNG (кроме того, что прозрачные участки повредиться) несколькими приложениями, в том числе

  • Jongware-х pngdefry
  • от Apple «Pngcrush» (но не реальный pngcrush)
  • другие перечисленные в вышеупомянутом CgBI вики страницы

Вот первые несколько байт в файле:

$ od -c test.png | head -4 
0000000 211 P N G \r \n 032 \n \0 \0 \0 004 C g B I 
0000020 P \0  002 + 325 263 177 \0 \0 \0 \r I H D R 
0000040 \0 \0 \0 ` \0 \0 \0 ` \b 006 \0 \0 \0 342 230 w 
0000060 8 \0 \0 \0  c H R M \0 \0 z % \0 \0 200 

Эти байты представляют собой следующее:

PNG signature 0-7 
CgBI length 8-11 
"CgBI" 12-15 
CgBI data 16-19 
CgBI CRC 20-23 
IHDR length 24-27 (should be in 8-11) 
"IHDR" 28-31 (should be in 12-15) 
width 32-35 (should be in 16-19) 
height 36-39 (should be in 20-23) 
bit depth 40 (should be in 24) 
color type 41 (should be in 25) 
compression 42 (should be in 26) 
filter method 43 (should be in 27) 
interlace method 44 (should be in 28) 
IHDR CRC 45-48 (should be in 29-32) 
... 
+0

Спасибо! Я считаю, что это причина. Вы знаете, зафиксировано ли положение четырехбайтового критического блока в 16 ~ 19 байт или нет? Мне нужно правильно определить формат CgBI, чтобы я мог преобразовать его в обычный PNG. – an0

+0

Дополнительный кусок (помимо своеобразного незаконного положения) - регулярный кусок PNG. Вы можете прочитать размер как для любых других блоков PNG. – usr2564301

+0

Жаль, что я вас обманываю. CgBI должен быть в байтах 12-15. – an0

Смежные вопросы