记一个七牛云生成图片水印的问题
1.首先七牛云生成图片是没问题的
2.但诡异的是当图片上水印的文字很长的时候,就会涉及到换行问题。换行呢。有主动换行和被动换行。
- 主动换行:是我们自主把文字按照一定长度切换成两组文字然后赋值到图片上。
- 被动换行:就是今天我们遇到的问题,图片加水印然后线上环境app端图片都不显示了。但看后台数据图片是有内容的。在pc端也是能看到的。
图我就不截了。
用户看到的现象是:图片打不开了
程序员看到的现象是: 图片地址已经存入到数据库,但是图片地址有问题,存入到数据库的时候看到库里地址有换行符。
那作为程序员就开始分析为啥会有这个现象了。
1.通过日志找到入库sql,发现入库的时候就有问题。
2.既然入库的时候就有问题,那看这个字段是啥时候生成的。从前端过来的时候是否有问题,
经查找日志,发现从前端过来的时候,没问题,
那就是这个字段被加水印的时候弄坏的,多了空格。加水印是依照七牛的方式base64对图片文字加密。
这里就有问题了,base64加密字符会换行,经查证
据RFC 822规定,每76个字符,还需要加上一个回车换行
就是因为这个回车换行导致的。问题就找到了。
解决方式:
- 换用Apache的 commons-codec.jar, Base64.encodeBase64String(byte[])得到的编码字符串是不带换行符的
- Base64.encodeBase64String("123".getBytes())..replaceAll("[\s*\t\n\r]", "");
标题:记一个七牛云生成图片水印的问题
作者:jackssybin
地址:https://www.jackssybin.cn/articles/2019/09/21/1569054780956.html