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 中不加载的主要内容,如果未能解决你的问题,请参考以下文章
webp/jpg - 仅在 html 文件中预加载所需的类型
Android onClickListener 在复合视图中不起作用