开发者社区 问答 正文

接入图片服务之如何实现关键词?



顺序无关


转换参数中键值对是循序无关的,即"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位编码只是用在水印操作某些特定参数(文字水印的文字内容,文字颜色,文字字体及图片水印的水印object)里,不要将其用来签名字符串(Signature)的内容。编码的格式是:

  • 先将内容编码成Base64结果;
  • 将结果中的加号”+”替换成中划线“-“;
  • 将结果中的斜杠”/”替换成下划线”_”;
  • 将结果中尾部的“=”号全部保留;以Python为例子
  • import base64
  • input='wqy-microhei'
  • print(base64.urlsafe_b64encode(input))

展开
收起
青衫无名 2017-10-23 11:02:15 1456 分享 版权
阿里云 AI 助理回答

在阿里云图片处理服务中,关于参数处理的规则如下:

  1. 顺序无关性: 转换参数中的键值对顺序不影响最终处理结果。例如,“120w_120h_90Q”与“90Q_120w_120h”都将得到相同处理的图片。系统会自动按照规范定义的顺序重新排序这些参数。这样做是为了避免因参数顺序不同导致语义理解上的差异,比如“100w_100h_2x”和“2x_100w_100h”,虽然字面顺序不同,但系统会统一理解为先按宽度和高度缩放至100px,再整体放大2倍,最终生成200*200像素的图片。

  2. 覆盖处理原则: 当转换参数中出现重复的键时,遵循后定义覆盖前定义的原则。例如,“120w_120h_240w”实际效果等同于“120h_240w”,即最终宽度会被设定为240px。

  3. 冲突处理: 特定参数间可能存在冲突情况,应参考每个参数文档中提供的冲突解决说明来处理。

  4. 长边与短边定义: 在缩放操作中,“长边”和“短边”是根据原图尺寸与目标尺寸比值确定的。比例较大的边称为“长边”,比例较小的边称为“短边”。例如,原图400200缩放到800100时,宽边(400)的目标比例0.5小于高边(200)的目标比例2,因此原图的宽边被视为“长边”,高边为“短边”。

  5. URL安全的Base64编码: 在特定参数如水印文字内容、颜色、字体或图片水印对象时,需要使用URL安全的Base64编码。这遵循RFC4648标准,具体转换步骤包括:将内容转为Base64编码,然后将"+"替换为"-","/"替换为"_”,保留末尾的"="。注意,此编码不应用于签名字符串(Signature)的生成。以Python为例,可使用base64.urlsafe_b64encode()函数实现这一转换。

综上所述,阿里云图片处理服务通过标准化参数处理逻辑,确保了用户在设置图片处理参数时的灵活性与一致性,同时提供了详细的指导原则帮助用户正确理解和应用这些功能。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答地址: