本文实例为大家分享了java将图片转为base64返回给前端的具体代码,供大家参考,具体内容如下

一、controller端代码

@RequestMapping(value = "/captcha")

public void imagecode(HttpServletRequest request, HttpServletResponse response) throws Exception {

JSONObject object = new JSONObject();

CaptchaGenerator vcg = new CaptchaGenerator();

String vcode = vcg.generatorVCode();

BufferedImage vcodeImage = vcg.generatorVCodeImage(vcode, true);

response.setDateHeader("Expires", 0);

response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");

response.addHeader("Cache-Control", "post-check=0, pre-check=0");

response.setHeader("Pragma", "no-cache");

ByteArrayOutputStream outputStream = new ByteArrayOutputStream();

response.addHeader("code", vcode.toLowerCase());

try {

ImageIO.write(vcodeImage, "png", outputStream);

BASE64Encoder encoder = new BASE64Encoder();

String base64 = encoder.encodeBuffer(outputStream.toByteArray()).trim();

base64 = base64.replaceAll("\n", "").replaceAll("\r", "");

object.put("code", "data:image/jpg;base64," + base64);

response.getWriter().write(object.toString());

} catch (IOException e) {

response.getWriter().write("");

} finally {

if (outputStream != null) {

outputStream.flush();

outputStream.close();

response.getWriter().close();

}

}

}

二、生成验证码的代码

(从某博客拷过来直接用的)

package com.kinth.security.web.util;

import java.awt.Color;

import java.awt.Font;

import java.awt.Graphics;

import java.awt.Graphics2D;

import java.awt.image.BufferedImage;

import java.util.Random;

/**

* 验证码生成器

*

*

*/

public class CaptchaGenerator {

/**

* 验证码来源

*/

final private char[] code = {

'2', '3', '4', '5', '6', '7', '8', '9',

'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',

'k', 'm', 'n', 'p', 'q', 'r', 's', 't', 'u', 'v',

'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F',

'G', 'H', 'J', 'K', 'L', 'M', 'N', 'P', 'Q', 'R',

'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'

};

/**

* 字体

*/

final private String[] fontNames = new String[]{

"黑体", "宋体", "Courier", "Arial",

"Verdana", "Times", "Tahoma", "Georgia"};

/**

* 字体样式

*/

final private int[] fontStyles = new int[]{

Font.BOLD, Font.ITALIC|Font.BOLD

};

/**

* 验证码长度

* 默认4个字符

*/

private int vcodeLen = 4;

/**

* 验证码图片字体大小

* 默认17

*/

private int fontsize = 21;

/**

* 验证码图片宽度

*/

private int width = (fontsize+1)*vcodeLen+10;

/**

* 验证码图片高度

*/

private int height = fontsize+12;

/**

* 干扰线条数

* 默认3条

*/

private int disturbline = 3;

public CaptchaGenerator(){}

/**

* 指定验证码长度

* @param vcodeLen 验证码长度

*/

public CaptchaGenerator(int vcodeLen) {

this.vcodeLen = vcodeLen;

this.width = (fontsize+1)*vcodeLen+10;

}

/**

* 生成验证码图片

* @param vcode 要画的验证码

* @param drawline 是否画干扰线

* @return

*/

public BufferedImage generatorVCodeImage(String vcode, boolean drawline){

//创建验证码图片

BufferedImage vcodeImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

Graphics g = vcodeImage.getGraphics();

//填充背景色

g.setColor(new Color(246, 240, 250));

g.fillRect(0, 0, width, height);

if(drawline){

drawDisturbLine(g);

}

//用于生成伪随机数

Random ran = new Random();

//在图片上画验证码

for(int i = 0;i < vcode.length();i++){

//设置字体

g.setFont(new Font(fontNames[ran.nextInt(fontNames.length)], fontStyles[ran.nextInt(fontStyles.length)], fontsize));

//随机生成颜色

g.setColor(getRandomColor());

//画验证码

g.drawString(vcode.charAt(i)+"", i*fontsize+10, fontsize+5);

}

//释放此图形的上下文以及它使用的所有系统资源

g.dispose();

return vcodeImage;

}

/**

* 获得旋转字体的验证码图片

* @param vcode

* @param drawline 是否画干扰线

* @return

*/

public BufferedImage generatorRotateVCodeImage(String vcode, boolean drawline){

//创建验证码图片

BufferedImage rotateVcodeImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

Graphics2D g2d = rotateVcodeImage.createGraphics();

//填充背景色

g2d.setColor(new Color(246, 240, 250));

g2d.fillRect(0, 0, width, height);

if(drawline){

drawDisturbLine(g2d);

}

//在图片上画验证码

for(int i = 0;i < vcode.length();i++){

BufferedImage rotateImage = getRotateImage(vcode.charAt(i));

g2d.drawImage(rotateImage, null, (int) (this.height * 0.7) * i, 0);

}

g2d.dispose();

return rotateVcodeImage;

}

/**

* 生成验证码

* @return 验证码

*/

public String generatorVCode(){

int len = code.length;

Random ran = new Random();

StringBuffer sb = new StringBuffer();

for(int i = 0;i < vcodeLen;i++){

int index = ran.nextInt(len);

sb.append(code[index]);

}

return sb.toString();

}

/**

* 为验证码图片画一些干扰线

* @param g

*/

private void drawDisturbLine(Graphics g){

Random ran = new Random();

for(int i = 0;i < disturbline;i++){

int x1 = ran.nextInt(width);

int y1 = ran.nextInt(height);

int x2 = ran.nextInt(width);

int y2 = ran.nextInt(height);

g.setColor(getRandomColor());

//画干扰线

g.drawLine(x1, y1, x2, y2);

}

}

/**

* 获取一张旋转的图片

* @param c 要画的字符

* @return

*/

private BufferedImage getRotateImage(char c){

BufferedImage rotateImage = new BufferedImage(height, height, BufferedImage.TYPE_INT_ARGB);

Graphics2D g2d = rotateImage.createGraphics();

//设置透明度为0

g2d.setColor(new Color(255, 255, 255, 0));

g2d.fillRect(0, 0, height, height);

Random ran = new Random();

g2d.setFont(new Font(fontNames[ran.nextInt(fontNames.length)], fontStyles[ran.nextInt(fontStyles.length)], fontsize));

g2d.setColor(getRandomColor());

double theta = getTheta();

//旋转图片

g2d.rotate(theta, height/2, height/2);

g2d.drawString(Character.toString(c), (height-fontsize)/2, fontsize+5);

g2d.dispose();

return rotateImage;

}

/**

* @return 返回一个随机颜色

*/

private Color getRandomColor(){

Random ran = new Random();

return new Color(ran.nextInt(220), ran.nextInt(220), ran.nextInt(220));

}

/**

* @return 角度

*/

private double getTheta(){

return ((int) (Math.random()*1000) % 2 == 0 ? -1 : 1)*Math.random();

}

/**

* @return 验证码字符个数

*/

public int getVcodeLen() {

return vcodeLen;

}

/**

* 设置验证码字符个数

* @param vcodeLen

*/

public void setVcodeLen(int vcodeLen) {

this.width = (fontsize+3)*vcodeLen+10;

this.vcodeLen = vcodeLen;

}

/**

* @return 字体大小

*/

public int getFontsize() {

return fontsize;

}

/**

* 设置字体大小

* @param fontsize

*/

public void setFontsize(int fontsize) {

this.width = (fontsize+3)*vcodeLen+10;

this.height = fontsize+15;

this.fontsize = fontsize;

}

/**

* @return 图片宽度

*/

public int getWidth() {

return width;

}

/**

* 设置图片宽度

* @param width

*/

public void setWidth(int width) {

this.width = width;

}

/**

* @return 图片高度

*/

public int getHeight() {

return height;

}

/**

* 设置图片高度

* @param height

*/

public void setHeight(int height) {

this.height = height;

}

/**

* @return 干扰线条数

*/

public int getDisturbline() {

return disturbline;

}

/**

* 设置干扰线条数

* @param disturbline

*/

public void setDisturbline(int disturbline) {

this.disturbline = disturbline;

}

}

三、前端显示

pageEncoding="ISO-8859-1"%>

Insert title here

$(function() {

refreshimg();

})

function refreshimg() {

$.ajax({

type : "POST",

dataType : "json",

url : "../article/captcha",

success : function(data) {

console.log('base64=' + data.codePic);

$('#randomImage').attr('src', data.code);

},

error : function() {

}

});

$("#randomImage").click(refreshimg)

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

java 上传图片转base64_java将图片转为base64返回给前端相关推荐

  1. java返回图片base64_java将图片转为base64返回给前端

    本文实例为大家分享了java将图片转为base64返回给前端的具体代码,供大家参考,具体内容如下 一.controller端代码 @RequestMapping(value = "/capt ...

  2. SpringBoot+Vue项目中遇到Not allowed to load local resource图片路径问题的两种解决方案(在后端映射本地路径或将图片转base64返回给前端)

    一.报错截图 第一种解决方案 后端映射本地路径 编写MyConfig类 Java代码[MyWebConfig] package com.wechat.front.utils;import org.sp ...

  3. Java将图片转为Base64

    Java将图片转为Base64 import net.coobird.thumbnailator.Thumbnails; import org.apache.commons.codec.binary. ...

  4. php 图片文件转base64编码格式,php如何将图片转为base64编码格式

    php将图片转为base64编码格式的方法:首先读取图片流:然后利用[base64_encode]函数进行编码格式转换即可. PHP保存Base64图片base64_decode的问题 PHP对Bas ...

  5. 为什么要将图片转为base64格式

    图片的 base64 编码就是可以将一副图片数据编码成一串字符串,使用该字符串代替图像地址; 1. 提升性能: 网页上的每一个图片,都是需要消耗一个 http 请求下载而来的, 图片的下载始终都要向服 ...

  6. Nodejs 使用 Buffer 将图片转为 base64

    一直以为图片转为 base64 很复杂,结果今天看了下 Docusaurus 的 plugin-ideal-image 插件源码,居然只要一行代码就完事了: const toBase64 = (ext ...

  7. 使用canvas.toDataURL把图片转为base64格式

    使用canvas.toDataURL把图片转为base64格式 function getBase64(url) {//通过构造函数来创建的 img 实例,在赋予 src 值后就会立刻下载图片,相比 c ...

  8. element UI上传图片Upload组件使用 图片转base64和fale文件处理 formdata数据格式的应用

    element UI上传图片Upload组件使用 & 图片转base64和fale文件处理 & formdata数据格式的应用 1.element UI上传图片Upload组件使用 效 ...

  9. JAVA读取文本文件内容以流的形式返回到前端

    JAVA读取文本文件内容以流的形式返回到前端 此方法放Controller ServletOutputStream out = null;ByteArrayOutputStream baos = nu ...

最新文章

  1. SSAS系列——【07】多维数据(查询Cube)
  2. 006_Maven仓库
  3. 由于昨天没发博客,在此向广大粉丝们道歉。 今天发的是一个数据库的代码
  4. 记一次用WPScan辅助渗透WordPress站点
  5. uniapp 支付(支付宝,微信支付)
  6. 漫谈SCA(软件成分分析)测试技术:原理、工具与准确性
  7. Java语言基本元素
  8. c语言三线程,如何用C语言实现多线程
  9. bmklocationmanager方法没有回调_SystemVerilog中的callback(回调)
  10. 2006年年度应用服务器中间件产品评述
  11. EUI插件服务器负载显示不兼容,EUI - 魔兽世界最贴心的插件
  12. leetcode之随心刷
  13. 2022年京东618店庆活动优惠力度怎么样?
  14. 视觉运控平台软件框架(6)---脚本编辑器Qsci
  15. 字模显示字符串C语言,[求助]关于点阵字模显示
  16. linux下格式化U盘的方法
  17. 高等数学笔记:关于等价无穷小替换的一个猜想
  18. NextVR踏入足球锦标赛直播 更能身历其境
  19. React Native 拆分业务包 bundle拆包 分包 携程方案
  20. CSS3动画 3DBOX

热门文章

  1. 基于multisim的fm调制解调_基于multisim的fm调频与鉴频电路设计与仿真
  2. 利用outlook自动回复邮件
  3. js正则表达式校验大全
  4. 自定义微信易信平台分享内容
  5. VMware安装windows xp
  6. 用python写的修改内存值的一代代码(举例植物大战僵尸中文版)
  7. 无法启动计算机丢失rtutils,丢失dll文件一键修复几个步骤就能搞定
  8. 【使用verilog、五级流水和MIPS指令集设计CPU】
  9. epson机械手使用IO控制程序运行而不是使用RC软件来运行程序的配置
  10. ehcache java清除缓存数据,EhCache缓存使用