JPG 仅在 Android 中不加载

Posted

技术标签:

【中文标题】JPG 仅在 Android 中不加载【英文标题】:JPG not loading in Android only 【发布时间】:2014-01-13 11:22:03 【问题描述】:

我一直在 Windows 机器上通过 imagemagick 重新采样图像。绝大多数都可以正常工作,但是有一个或两个图像不会在任何 android 设备上加载。我以为是我的 java 应用程序代码损坏了,但我也可以在 Android 设备上的 Chrome 中重现它。

图像只能在 ios/PC/Mac 上正常加载,但不能在 android 上加载。在 10Kb 的数据中只有 320x44 像素并且没有看到任何错误消息,任何人都可以阐明我在使用 imagemagick 时可能做了什么(或我错过的步骤)吗?

这是 JPG 的链接

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

更新我已经使用“Charles”拦截来自手机的网络流量并查看此请求,这也表明我确实收到了一张白色图像作为对来自安卓。

我在服务器上使用 php,但未处理 JPG 文件,只是直接通过文件提供服务

【问题讨论】:

您尝试过的任何代码。?? 不需要任何代码,只需在浏览器中打开即可。我在我的代码中使用 Java 和 ObjectiveC 来加载它,但我认为这并不重要,因为我可以通过在手机的网络浏览器中加载 URL 来重现错误。 表示您希望此图像显示在浏览器中..? 我的意思是,如果我能让浏览器显示它,我确信我的应用程序会。 JPG本身有些可疑,但我不知道是什么。如果我将图像重新保存为 BMP 并将其重新保存回 JPG,它可以正常工作......我猜这可能与 exif 或类似的东西有关,但真的不确定为什么它只发生在少数图像上。跨度> HelloWorld+this_image 应用程序是否显示图像? 【参考方案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/PC/Mac 似乎都支持具有 CMYK 的 JPEG,但 Android 似乎不支持或至少不是所有 CMYK 图像(从 Android 4.2 开始)

【讨论】:

answer your own question 不认为这是糟糕的形式,它可能会帮助遇到同样问题的其他人。

以上是关于JPG 仅在 Android 中不加载的主要内容,如果未能解决你的问题,请参考以下文章

Android:游戏侧面有黑条(仅在屏幕截图中)

iframe 仅在 Firefox 中不加载

webp/jpg - 仅在 html 文件中预加载所需的类型

Android onClickListener 在复合视图中不起作用

UIWebview loadRequest 仅在 iPhone X 中不起作用

自定义日期 .filter 仅在 iOS 中不显示日期 .split 方法方法