代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
Java
】
图片工具类,与base64互相转换
作者:
/ 发布于
2019/8/28
/
920
package com.demo.springbootdemo.util; import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.*; import java.net.HttpURLConnection; import java.net.URL; import javax.imageio.ImageIO; /** * @author damon * @date 2019-08-26 * 图片工具类,包括画图,把内存中的图片转为base64,把本地图片转为base64,把网络图片转为base64,把base64反转为图片 * 使用在线工具去解析base64的时候,一定要添加前缀 data:image/jpg;base64, 包括逗号 */ public class ImageUtil { public static void main(String[] args) throws IOException { //得到图片缓冲区 //INT精确度达到一定,RGB三原色,高度70,宽度150 BufferedImage bi = new BufferedImage(150,70,BufferedImage.TYPE_INT_RGB); //得到它的绘制环境(这张图片的笔) Graphics2D g2 = (Graphics2D) bi.getGraphics(); //填充一个矩形 左上角坐标(0,0),宽70,高150;填充整张图片 g2.fillRect(0,0,150,70); //设置颜色 g2.setColor(Color.RED); //填充整张图片(其实就是设置背景颜色) g2.fillRect(0,0,150,70); g2.setColor(Color.RED); //画边框 g2.drawRect(0,0,150-1,70-1); //设置字体:字体、字号、大小 g2.setFont(new Font("体",Font.BOLD,18)); //设置背景颜色 g2.setColor(Color.BLACK); //向图片上写字符串 g2.drawString("HelloWorld",3,50); //保存图片 JPEG表示保存格式 ImageIO.write(bi,"JPG",new FileOutputStream("C:\\Users\\HP\\Desktop\\image\\image-test.jpg")); } /** * 画图 */ public static BufferedImage drawImage() { //得到图片缓冲区 //INT精确度达到一定,RGB三原色,高度70,宽度150 BufferedImage bufferedImage = new BufferedImage(150,70,BufferedImage.TYPE_INT_RGB); //得到它的绘制环境(这张图片的笔) Graphics2D g2 = (Graphics2D) bufferedImage.getGraphics(); //填充一个矩形 左上角坐标(0,0),宽70,高150;填充整张图片 g2.fillRect(0,0,150,70); //设置颜色 g2.setColor(Color.RED); //填充整张图片(其实就是设置背景颜色) g2.fillRect(0,0,150,70); g2.setColor(Color.RED); //画边框 g2.drawRect(0,0,150-1,70-1); //设置字体:字体、字号、大小 g2.setFont(new Font("体",Font.BOLD,18)); //设置背景颜色 g2.setColor(Color.BLACK); //向图片上写字符串 g2.drawString("HelloWorld",3,50); return bufferedImage; } /** * 这是自己写的,将bufferedImage转为base64编码值 * 适用于这种场景: 后端在内存生成图片,然后把图片转为base64编码值,返回给前端,前端进行解码,展示图片 * 为什么不返回流? 如果后端返回流到前端,浏览器监控到流的返回会开启下载功能 */ public static String convertBufferedImageToBase64(BufferedImage bufferedImage) throws IOException { ByteArrayOutputStream bos = new ByteArrayOutputStream(); String result = null; try { ImageIO.write(bufferedImage, "jpg", bos); BASE64Encoder encoder = new BASE64Encoder(); result = encoder.encode(bos.toByteArray()); } catch (IOException e) { throw new IOException(e); } finally { bos.close(); } return result; } /** * 将本地图片转换成base64字符串 * @param imgFile 图片本地路径 */ public static String convertLocalImageToBase64(String imgFile) throws IOException { // 将图片文件转化为字节数组字符串,并对其进行Base64编码处理 InputStream in = null; byte[] data = null; String result = null; try { // 读取图片字节数组 in = new FileInputStream(imgFile); data = new byte[in.available()]; in.read(data); // 对字节数组Base64编码 BASE64Encoder encoder = new BASE64Encoder(); // 返回Base64编码过的字节数组字符串 result = encoder.encode(data); } catch (IOException e) { throw new IOException(e); } finally { if (in != null) { in.close(); } } return result; } /** * 将网络图片转换成base64字符串 * @param imgURL 图片线上路径 */ public static String convertWebImageToBase64(String imgURL) throws IOException { ByteArrayOutputStream data = new ByteArrayOutputStream(); String result = null; InputStream is = null; try { // 创建URL URL url = new URL(imgURL); byte[] by = new byte[1024]; // 创建链接 HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("GET"); conn.setConnectTimeout(5000); is = conn.getInputStream(); // 将内容读取内存中 int len; while ((len = is.read(by)) != -1) { data.write(by, 0, len); } // 对字节数组Base64编码 BASE64Encoder encoder = new BASE64Encoder(); result = encoder.encode(data.toByteArray()); } catch (IOException e) { throw new IOException(e); } finally { // 关闭流 if (is != null) { is.close(); } } return result; } /** * 将base64字符串转换成图片并保存到本地 * @param imgStr base64字符串 * @param imgFilePath 图片存放路径 */ public static void convertBase64ToImageAndSaveToLocal(String imgStr,String imgFilePath) throws IOException { // 对字节数组字符串进行Base64解码并生成图片 if (imgStr == null || "".equals(imgStr)) { return; } BASE64Decoder decoder = new BASE64Decoder(); OutputStream out = null; try { // Base64解码 byte[] b = decoder.decodeBuffer(imgStr); for (int i = 0; i < b.length; ++i) { // 调整异常数据 if (b[i] < 0) { b[i] += 256; } } out = new FileOutputStream(imgFilePath); out.write(b); out.flush(); } catch (IOException e) { throw new IOException(e); } finally { if (out != null) { out.close(); } } } /** * 将bufferedImage保存到本地 * @param savePath 保存图片的路径,细致到图片文件名 */ public static void saveBufferedImageToLocal(BufferedImage bufferedImage, String savePath) throws IOException { FileOutputStream fos = null; try { fos = new FileOutputStream(savePath); ImageIO.write(bufferedImage,"JPG",fos); } catch (IOException e) { throw new IOException(e); } finally { if (fos != null) { fos.close(); } } } }
试试其它关键字
同语言下
.
List 切割成几份 工具类
.
一行一行读取txt的内容
.
Java PDF转换成图片并输出给前台展示
.
java 多线程框架
.
double类型如果小数点后为零则显示整数否则保留两位小
.
将图片转换为Base64字符串公共类抽取
.
sqlParser 处理SQL(增删改查) 替换schema 用于多租户
.
JAVA 月份中的第几周处理 1-7属于第一周 依次类推 29-
.
java计算两个经纬度之间的距离
.
输入时间参数计算年龄
可能有用的
.
List 切割成几份 工具类
.
一行一行读取txt的内容
.
Java PDF转换成图片并输出给前台展示
.
java 多线程框架
.
double类型如果小数点后为零则显示整数否则保留两位小
.
将图片转换为Base64字符串公共类抽取
.
sqlParser 处理SQL(增删改查) 替换schema 用于多租户
.
JAVA 月份中的第几周处理 1-7属于第一周 依次类推 29-
.
java计算两个经纬度之间的距离
.
输入时间参数计算年龄
贡献的其它代码
Label
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3