JPG не загружается только на Android

Я передискретизировал изображения с помощью imagemagick на машине с Windows. Подавляющее большинство работает нормально, однако есть одно или два изображения, которые не загружаются ни на одном устройстве Android. Я думал, что это мой код Java-приложения был сломан, но я также могу воспроизвести его в Chrome на устройстве Android.

Изображения загружаются нормально на iOS/ПК/Mac, только не на Android. Это всего лишь 320x44 пикселя в 10 КБ данных, и я не вижу никаких сообщений об ошибках. Может ли кто-нибудь пролить свет на то, что я мог сделать (или шаги, которые я пропустил), используя imagemagick, чтобы заставить это работать?

Вот ссылка на JPG

http://gatherhelp.com/tests/corruptjpg/broken.jpg

ОБНОВЛЕНИЕ Я использовал «Чарльз» для перехвата сетевого трафика с телефона и просмотра этого запроса, и это также показывает, что мне действительно доставляется белое изображение в ответ на этот URL-адрес от Android.

Я использую PHP на сервере, но файлы JPG не обрабатываются, а просто обслуживаются через файл


person sradforth    schedule 13.01.2014    source источник
comment
любой код, который вы пробовали.??   -  person Chirag Ghori    schedule 13.01.2014
comment
Для этого не нужен код, просто откройте его в браузере. Я использую Java и ObjectiveC в своем коде для его загрузки, но я не думаю, что это важно, поскольку я могу воспроизвести ошибку, просто загрузив URL-адрес в веб-браузере на телефонах.   -  person sradforth    schedule 13.01.2014
comment
означает, что вы хотите, чтобы это изображение отображалось в браузере ..?   -  person Chirag Ghori    schedule 13.01.2014
comment
Я просто имею в виду, что если я смогу заставить браузер показать это, я уверен, что мое приложение будет. С самим JPG что-то не так, но я не могу понять, что. Если я пересохраняю изображение в формате BMP и снова сохраняю его в JPG, оно работает нормально ... Я предполагаю, что это, вероятно, связано с exif или подобным, но на самом деле не уверен, и почему это происходит только на нескольких изображениях.   -  person sradforth    schedule 13.01.2014
comment
Показывает ли приложение HelloWorld+this_image изображение?   -  person 18446744073709551615    schedule 13.01.2014
comment
Я думаю, что нашел это, JPG использует цветовое пространство CMYK, которое Android, похоже, не может загрузить. Изменение его на RGB с помощью imagemagic -colorspace RGB помогает... есть идеи, является ли это взломом или Android просто не полностью поддерживает jpg?   -  person sradforth    schedule 13.01.2014
comment
По крайней мере, вращение EXIF ​​полностью не поддерживается: то есть, когда ваше приложение читает его, именно ваш код должен вращать изображение.   -  person 18446744073709551615    schedule 13.01.2014


Ответы (1)


Я знаю, что плохо отвечать на ваш собственный вопрос, но на всякий случай это поможет кому-то еще ... Похоже, проблема заключалась в том, что я преобразовал некоторые PSD и другие файлы, которые изначально были созданы для печати и имели цветовой формат CMYK вместо RGB.

Чтобы выяснить это, я использовал команду «Идентифицировать» ImageMagick и сделал это

   Identify -verbose broken.jpg

давать

Image: broken.jpg
  Format: JPEG (Joint Photographic Experts Group JFIF format)
  Class: DirectClass
  Geometry: 256x256+0+0
  Resolution: 250x250
  Print size: 1.024x1.024
  Units: PixelsPerInch
  Type: ColorSeparation
  Endianess: Undefined
  Colorspace: CMYK
  Depth: 8-bit

Это показало, что цветовое пространство было CMYK, поэтому быстрый тест других поврежденных изображений показал, что у них у всех была одна и та же проблема. Чтобы преобразовать их снова, ImageMagick пришел на помощь и использовал

   convert broken.jpg -colorspace RGB fixed.jpg

Таким образом, кажется, что все iOS / ПК / Mac поддерживают файлы JPEG с CMYK, но Android отображается не для или, по крайней мере, не для всех изображений CMYK (начиная с Android 4.2)

person sradforth    schedule 13.01.2014
comment
Не считается плохим тоном ответить на свой вопрос, это может помочь другим, у которых возникла такая же проблема. - person Harald K; 13.01.2014