1

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

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

这是JPG的链接

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

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

我在服务器上使用 PHP,但 JPG 文件没有被处理,只是直接通过文件提供

4

1 回答 1

6

我知道回答您自己的问题的形式很糟糕,但以防万一这对其他人有帮助...看来问题是我转换了一些最初用于打印并且具有 CMYK 颜色格式而不是 RGB 的 PSD 和其他文件。

为了找出这一点,我使用了 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 开始)

于 2014-01-13T12:17:22.587 回答