Base64字符 转图片乱码问题
网站做了个随机验证码图片功能,遇到了一个奇怪的问题——Base64字符集转图片乱码问题,问题描述如下
1.用java画笔将随机验证码绘制成图片
2.再将图片的二进制代码转换成Base64字符集,返回给前端,
以上步骤,在本地window环境下,随机验证码图片生成base64字符传送到前端,能完美解析出来,但是部署到生产环境(centos)上,则解析base64字符得到的是一张乱码图片。
经过初步分析,应该是系统环境差异造成的,
1.一开始以为是字符编码和解码的问题,但base64本身是用ascii字符集,本身不存在编码集不对的问题。所以排除字符集解码和编码不对的问题。
2.接着,检查了下生成的base64字符的长度,2207个字符,远没达到string的最大字符长度。
3.那么有没有可能是绘制的图片本身就是乱码的,base64字符还原出的图片是没问题的。因此仔细看下绘制随机验证码的代码
public static String outputRandomImageDataUrl(String randomString)
throws IOException {
int width = 100;
int height = 30; Color color = getRandomColor();
Color reverse = getReverseColor(color); BufferedImage bi = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
Graphics2D g = bi.createGraphics();
g.setFont(new Font(Font.SANS_SERIF, Font.BOLD, 16));
g.setColor(color);
g.fillRect(0, 0, width, height);
g.setColor(reverse);
g.drawString(randomString, 18, 20);
for (int i = 0, n = random.nextInt(100); i < n; i++) {
g.drawRect(random.nextInt(width), random.nextInt(height), 1, 1);
} return DATAURL_PREFIX + ImageConvertUtils.imageConvertBase64(bi);
}
然后发现这句
g.setFont(new Font(Font.SANS_SERIF, Font.BOLD, 16));
字体是微软雅黑字体,linux系统已办是肯定是不会有这个字体的,于是本人在生产环境检查了下系统字符集,果然没有,找到问题所在,那么就很好解决了。
1.程序代码中选择一个生产环境已有的字体。
2.安装程序指定的字体。
本人是采用第二种方式,安装了微软雅黑字体后果然ok了
Base64字符 转图片乱码问题的更多相关文章
- Base64 字符串转图片 问题整理汇总
前言 最近碰到了一些base64字符串转图片的开发任务,开始觉得没啥难度,但随着开发的进展还是发现有些东西需要记录下. Base64 转二进制 这个在net有现有方法调用: Convert.FromB ...
- BASE64编码的图片在网页中的显示问题的解决
BASE64位转码有两种: 一种是图片转为Base64编码,这种编码是直接可以在页面通过<img src='base64编码'/>的方式显示 Base64 在CSS中的使用 .demoIm ...
- C#编程中的Image/Bitmap与base64的转换及 Base-64 字符数组或字符串的长度无效问题 解决
最近用base64编码传图片遇到了点问题,总结下. 首先总结下base64编码的逻辑,来自网络:https://www.cnblogs.com/zhangchengye/p/5432276.html ...
- base64转换成图片
前端代码JS: 前端图片为canvsa绘图转base64格式 function putTextInfo() { var canvasImg = painting.canvas.toDataURL('i ...
- 解码base64加密的图片并打印到前台
经过base64加密的图片对象是一串字符串,我们解码后可通过流将其打印出来: utils类: package com.aebiz.app.web.modules.controllers.open.ap ...
- base64格式的图片数据如何转成图片
base64格式的图片数据如何转成图片 一.总结 一句话总结:不仅要去掉前面的格式串,还需要base64_decode()解码才行. // $base_img是获取到前端传递的值 $base_img ...
- FromBase64String 输入的不是有效的 Base-64 字符串,因为它包含非 Base-64 字符、两个以上的填充字符,或者填充字符间包含非法字符
js前台: <input id="upload_img_input" v-on:change="onFileChange" type="file ...
- 字符型图片验证码识别完整过程及Python实现
字符型图片验证码识别完整过程及Python实现 1 摘要 验证码是目前互联网上非常常见也是非常重要的一个事物,充当着很多系统的 防火墙 功能,但是随时OCR技术的发展,验证码暴露出来的安全问题也越 ...
- Base-64 字符数组或字符串的长度无效等问题解决方案
项目特殊需要,调用ActiveX三维控件进行控件某一特殊部位的截图操作,这个截图保存由ActiveX控件控制保存到本地是没问题的,现在需要将这个截图上传到服务器,多人共享,就牵扯到需要读取本地文件…… ...
随机推荐
- js★★★【面向对象的使用方法】*****************★★★★ 相当重要
标准用法: function Sprite(){ //函数内容部设置属性 this.name='shimily'; } //原型上设置方法 Sprite.prototype.show=function ...
- OpenGL中VA,VAO,VBO和EBO的区别
1,顶点数组(Vertex Array) VA,顶点数组也是收集好所有的顶点,一次性发送给GPU.不过数据不是存储于GPU中的,绘制速度上没有显示列表快,优点是可以修改数据. 4.VBO(Vertex ...
- neutron基础一(网络基本命令)基本命令,包括veth peer
ip addr ip link tcpdump -i veth1 -e -v route -n ip route arp ethtool -S veth0 ip link add type veth ...
- java编码与解码(一)
转:https://blog.csdn.net/heyanxi0101/article/details/80356870 java编码与解码(一) 编码表概述和常见的编码表 概述:有字符及其对应的数值 ...
- 2018-No.7-SicnuCtf
5月份的比赛现在才有时间在博客贴出来,这是我第二次出题了,第一次是上届的初赛,这次是决赛的题. 签到(base_or_base) 解压得到两个文件小明.zip和......txt,根据文件名提示猜测是 ...
- svg的使用集合
1.效果 https://www.zhangxinxu.com/wordpress/2017/03/offset-path-css-animation/ 2.用法 https://www.cnblog ...
- shell if判断写成一行
[[ $? -eq 0 ]] && echo "backup $i success" || exit #判断上一个命令是否执行正确,退出状态吗如果为0,则执行ech ...
- Jenkins强制语言设置
最近对照各种Jenkins的教程,发现在jenkins的页面中经常会中英文混合,每个人根据各自系统的不同也会出现语言不同,虽然可以翻译过来,但是中英文的混合差异还是蛮大的,造成项目间沟通障碍. 所以, ...
- python基础1-转自金角大王
Python之路,Day1 - Python基础1---转自金角大王 本节内容 Python介绍 发展史 Python 2 or 3? 安装 Hello World程序 变量 用户输入 模块初识 ...
- mybatis 源码分析二
1.SqlSession下的四大对象 Executor.StatementHandler.ParameterHandler.ResultSetHandler StatementHandler的作用是使 ...