本文介绍图片处理中涉及的一些规则。
顺序无关
转换参数中键值对是与顺序无关的,即“120w_120h_90Q”和“90Q_120w_120h”都能获取到所需的图片,系统会按照本规范定义的顺序重新排序参数后处理。由于参数的顺序不同有时会表达不同的语义,例如100w_100h_2x表示先缩放到100*100,再放大2倍”,即得到200*200的图片;而“2x_100w_100h”按照字面顺序理解是“先放大2倍再缩放到100*100”,即得到100*100的图片,为了避免这样的理解误差并简化处理方式,IMG会按照文档中出现的顺序对参数进行排序后处理。“2x_100w_100h”会被理解为“100w_100h_2x”,得到200*200的图片。
覆盖处理
如果转换参数中出现多个相同“键”,后面定义的覆盖前面定义。如“120w_120h_240w”等同于“120h_240w”。
冲突处理
请参见每个参数中关于冲突的说明。
长边与短边
关于“长边”和“短边”的定义需要特别注意,它们表达的是在缩放中相对比例的长或短。“长边”是指原尺寸与目标尺寸的比值大的那条边;“短边”同理。如原图400 * 200,缩放为800 * 100(400/800=0.5,200/100=2,0.5 < 2),所以在这个缩放中200那条是长边,400是短边。
URL安全的Base64位编码
在图片处理服务中,有很多参数需要转换为Base64编码,参见RFC4648。注意这里的URL安全Base64编码只是用在水印操作某些特定参数(文字水印的文字内容、文字颜色、文字字体及图片水印的水印对象),不要将其用在签名字符串(Signature)的内容。编码的格式如下:
先将内容编码成Base64结果;
将结果中的加号(+)替换成短划线(-);
将结果中的正斜线(/)替换成下划线(_);
将结果中尾部的等号(=)删除。
以Python为例子
import base64
input='wqy-microhei'
print(base64.urlsafe_b64encode(input))