本文主要介绍您在使用 OSS 图片处理时可能遇到的一些常见问题及处理方法。

遇到问题时,如果有明显的参数超过显示等问题,可以使用 OSS 的 ?x-oss-process=image/info 参数查看原始图片中的信息是否超标。OSS 单边长度不能超过 4096,乘积不能高于 4096*4096 。

案例:旋转图片时出现 Picture exceed the maximum allowable rotation range 报错

问题分析:出现这种问题基本都是原图的单边长度超过了 4096 的限制,或者四边乘积超过了 4096*4096。

排查步骤:
  1. 使用 OSS 的 ?x-oss-process=image/info 参数获取图片的信息判断是否超过限制。

  2. 查看 ImageWidth值是 5100,超过 4096 的限制。

处理方案:使用 auto-orient,0 参数关闭自适应,再使用 resize 参数调整图片大小,最后旋转图片。例如:http://test.oss-cn-beijing.aliyuncs.com/123/myphoto5.jpg?x-oss-process=image/auto-orient,0/resize,m_lfit,h_2000,w_2000,limit_1/rotate,90

案例:开启了 OSS 违规检测,图片被判定违规,但是外部还能访问到

OSS 没有封禁功能,图片被判定违规后,违规图片只是被冻结,不在控制台上显示,但不会被删除。原图片还是正常的保存在 bucket 中。如果您不希望违规图片再被访问,需要手动删除违规图片。详情请参见 OSS 违规检测

案例:通过 OSS 获取主色调和图片不符

问题分析:主色调计算不是按照屏幕颜色占比来计算的,而是按照图片中心的主颜色来定的色调,计算逻辑如下:
  1. 计算整个图片的色调的平均值 (avg_hue)。
  2. 遍历每个像素,计算该像素的色调值与 avg_hue 的色差(即将二者相减后取绝对值),如果该色差大于一个阈值,则将该像素加入到“醒目像素”的列表。
  3. 计算整个“醒目像素列表”的颜色均值,得到的结果即为该图片的主色调。

处理方案:可以使用 ?x-oss-process=image/average-hue 参数获取 OSS 图片的主色调参数。

案例:图片水印合成出现黑线



问题分析:这个黑印不是因为图片处理造成的。水印的方式是将两张图片重合,如果水印两张图是不同的 RGB 图片,覆盖后因色差产生黑线是正常现象,任何图片处理工具都会存在这个问题。

使用?x-oss-process=image/average-hue参数可查询图片 RGB 的参数,可在图片链接后加这个参数判断两个图片的 RGB 参数是否一致。RGB 的介绍可以参考浅谈 RGB

处理方案:案例中背景图 RGB 参数为 “0x0e0e0e”,水印的 RGB 参数为 “0xffffff”,增加水印会出现类似边框的效果。可以通过透明度参数 t 来调整透明度将边框去掉,t 的取值范围是 1-100。例如:http://image-demo.img-cn-hangzhou.aliyuncs.com/example.jpg?x-oss-process=image/resize,w_300/watermark,image_cGFuZGEucG5nP3gtb3NzLXByb2Nlc3M9aW1hZ2UvcmVzaXplLFBfMzA,t_90,g_se,x_10,y_10,t_50

案例:通过 CDN 回源 OSS 图片处理不生效

CDN 回源 OSS 图片处理不生效,无论使用的是什么效果,请使用 OSS 的访问域名进行测试,利用下面的 URL 进行基础分析。

http://test.oss-cn-beijing.aliyuncs.com/MomClass/ChuXin/3_2_336_462.jpg@30-30bl

http://test.img-cn-beijing.aliyuncs.com/MomClass/ChuXin/3_2_336_462.jpg@30-30bl

  • img-cn-region.aliyuncs.com 是老版本的 OSS 域名,图片处理的分隔符和图片处理语法和新版的 oss 域名都不一样。
  • oss-cn-region.aliyuncs.com 这类域名是 2017 年以后使用的新域名,不兼容 img 域名的图片处理语法和分隔符 "@" ,需要在 OSS 控制台上手动执行同步,将 img 域名图片处理同步到 OSS 。

上述的老域名的高斯处理效果,如果搬迁到 OSS 的域名后,需要按照新的方式来处理,如下:

http://test.oss-cn-beijing.aliyuncs.com/MomClass/ChuXin/3_2_336_462.jpg?x-oss-process=image/blur,r_3,s_30

案例:图片缩略后颜色变亮了



处理分析:可以使用 PS 等工具获取原图的颜色模式,如果原图是 RGB 的话,压缩是不会变色的,如果原图是 CMYK 的话,压缩后会产生偏色。目前对 CMYK 的兼容还在支持中,图片色彩空间被挤压会产生色彩的变化。

案例:图片在本地可以正常打开,进行图片处理时提示已损坏



问题现象:图片文件在本地可以正常打开,但是上传到到 OSS 无法进行图片处理,反馈图片损坏。

排查步骤:
  1. 获取原始的 OSS URL 地址,使用 ?x-oss-process=image/info 查看原图信息,如果查不到图片信息,直接报错,说明原图就是损坏的。
  2. 可以使用开源的 imagemagic 工具来验证这个问题,将图片做任意调整,如果出现 error 说明图片是损坏的。下面是一个 resize 的测试用例:
    convert -resize 1024x768 1123331261_15353307414801n.jpg
损坏的图片文件在本地可以显示是因为本地的图片查看工具是对图片做了补偿修复。而 OSS 不对损坏的图片进行处理,所以在浏览器上无法显示。

案例:存储在 OSS 内的图片旋转了 90 度

问题现象:通过 OSS 域名访问图片正常。

通过 CDN 访问,发现图片被旋转了 90 度。

问题分析:直接访问 OSS 正常,说明 OSS 存储是没问题的。但是通过 CDN 访问时出现了旋转,说明是浏览器的处理问题,通过图片处理参数 ?x-oss-process=image/info 查看原图参数带有 rotation 90 旋转参数。

处理方案:删除旋转参数即可。

案例:经过 CDN 加速后图片处理没有效果

排查步骤:检查是否开启了 CDN 的