开发者社区> 问答> 正文

如何实现图片水印?


图片水印就是在原图的基础上加上一张水印图片

访问类型

  1. [backcolor=transparent]@watermark[backcolor=transparent]=[backcolor=transparent]1[backcolor=transparent]&[backcolor=transparent]object[backcolor=transparent]=<[backcolor=transparent]encodedobject[backcolor=transparent]>&[backcolor=transparent]t[backcolor=transparent]=<[backcolor=transparent]transparency[backcolor=transparent]>&[backcolor=transparent]x[backcolor=transparent]=<[backcolor=transparent]distanceX[backcolor=transparent]>&[backcolor=transparent]y[backcolor=transparent]=<[backcolor=transparent]distanceY[backcolor=transparent]>&[backcolor=transparent]p[backcolor=transparent]=<[backcolor=transparent]position[backcolor=transparent]>…

其中watermark与object两个参数为必填项。文中出现的url_safe_base64_encode指的是URL安全base64编码,请参见 关键词

参数

名称描述参数类型
object参数意义: 水印图片的object名字(必须编码) 注意:内容必须是URL安全base64编码 encodedObject = url_safe_base64_encode(object) 如object为”panda.png”, 编码过后的内容为”cGFuZGEucG5n”必选参数

水印位置参数请参考 基本参数

水印图片预处理


用户在打水印时,可以对水印图片进行预处理,支持的预处理操作有:图片缩放,图片裁剪(不支持内切圆),图片旋转(具体内容请直接查看文档相关章节),但不支持管道操作。还额外支持一个参数:P(大写P),表示水印图片按主图的比例进行处理,取值范围为[1, 100],表示百分比

预处理示例


设置了10P, 当主图是100x100, 水印图片大小就为10x10, 当主图变成了200x200,水印图片大小就为20x20。如果生成的图片大小不一样,而使用相同的水印处理参数,就会导致一些小图,水印图片过大。或者一些大图,水印图片过小。增加P参数,就可以解决这个问题。采用P参数,IMG会根据主图的大小来动态调整水印图片的大小。
如果水印操作是:watermark=1&object=cGFuZGEucG5nQDMwUA&t=90&p=9&x=10&y=10 (右下角打水印。水印图片是:panda.png@30P, 表示水印的大小按主图的30%缩放。)
如果原图按宽度是400,需要缩略,再打上述水印的示例:
http://image-demo.img-cn-hangzhou.aliyuncs.com/example.jpg@400w|watermark=1&object=cGFuZGEucG5nQDMwUA&t=90&p=9&x=10&y=10

如果原图按宽度300缩略,再打上上述水印的示例:
http://image-demo.img-cn-hangzhou.aliyuncs.com/example.jpg@300w|watermark=1&object=cGFuZGEucG5nQDMwUA&t=90&p=9&x=10&y=10


访问形式:


参数中的object规则是:
  • 1 图片水印原图名字(未经过URL安全base64编码的名字) + @ + Action
  • 2 对第一步的字符串进行URL安全base64编码

如果要指定对水印图片进行预处理,处理参数带在水印object之后,以@符号连接。如:
  • 对panda.png 不进行任何预处理: object = url_safe_base64_encode(“panda.png”)
  • 对panda.png 进行放大2倍: object = url_safe_base64_encode(“panda.png@200p”)
  • 对panda.png 进行缩小一倍,亮度调节成50, 对比度调节成40: object = url_safe_base64_encode(“panda.png@50p_50b_40d”)
  • 对panda.png 增加按宽度50缩略,亮度调节成30: object = url_safe_base64_encode(“panda.png@50w_30b”)
  • 对panda.png 增加按高度20缩略,对比度调节成10: object = url_safe_base64_encode(“panda.png@20h_10d”)
  • 对panda.png 水印图的大小基于原图的20%进行处理,对比度调节成10: object = url_safe_base64_encode(“panda.png@20P_10d”)


示例

  • 下面URL的含义,是example.jpg加上水印文件是 :panda.png (panda.png 经过URL安全base64编码后是:cGFuZGEucG5n)

http://image-demo.img-cn-hangzhou.aliyuncs.com/example.jpg@watermark=1&object=cGFuZGEucG5n&t=90&p=9&x=10&y=10
  • 对panda.png按宽度是50缩放。 那么水印文件是:panda.png@50w (panda.png@50w 经过URL安全base64编码后是:cGFuZGEucG5nQDUwdw)

http://image-demo.img-cn-hangzhou.aliyuncs.com/example.jpg@watermark=1&object=cGFuZGEucG5nQDUwdw&t=90&p=9&x=10&y=10
  • 对panda.png按50%的比例缩小。那么水印文件是: panda.png@50p (panda.png@50p经过URL安全base64编码后是:cGFuZGEucG5nQDUwcA)

http://image-demo.img-cn-hangzhou.aliyuncs.com/example.jpg@watermark=1&object=cGFuZGEucG5nQDUwcA&t=90&p=9&x=10&y=10
  • 对panda.png,自动裁剪成宽度是40,高度是30大小。那么水印文件是:panda.png@40w_20h_1e_1c(panda.png@40w_20h_1e_1c经过URL安全base64编码后是:cGFuZGEucG5nQDQwd18yMGhfMWVfMWM)

http://image-demo.img-cn-hangzhou.aliyuncs.com/example.jpg@watermark=1&object=cGFuZGEucG5nQDQwd18yMGhfMWVfMWM&t=90&p=9&x=10&y=10
  • 对panda.png. 高级裁剪,从起点(0, 0) 裁剪到(65, 65)的位置。那么水印文件是:panda.png@0-0-65-65a (panda.png@0-0-65-65a经过URL安全base64编码后是cGFuZGEucG5nQDAtMC02NS02NWE)

http://image-demo.img-cn-hangzhou.aliyuncs.com/example.jpg@watermark=1&object=cGFuZGEucG5nQDAtMC02NS02NWE&t=90&p=9&x=10&y=10

展开
收起
青衫无名 2017-10-23 11:25:02 2302 0
0 条回答
写回答
取消 提交回答
问答地址:
问答排行榜
最热
最新

相关电子书

更多
360°全景视频播放器的实现原理 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载