package org.springblade.common.utils;
|
|
import org.apache.commons.codec.binary.Base64;
|
import org.springframework.web.multipart.MultipartFile;
|
|
import javax.imageio.ImageIO;
|
import javax.swing.*;
|
import java.awt.*;
|
import java.awt.image.BufferedImage;
|
import java.io.ByteArrayOutputStream;
|
import java.io.IOException;
|
import java.io.InputStream;
|
import java.net.HttpURLConnection;
|
import java.net.URL;
|
|
|
public class ImageUtils {
|
|
|
|
public static String getBase64ByImgUrl(String url){
|
String suffix = url.substring(url.lastIndexOf(".") + 1);
|
try {
|
URL urls = new URL(url);
|
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
Image image = Toolkit.getDefaultToolkit().getImage(urls);
|
BufferedImage biOut = toBufferedImage(image);
|
ImageIO.write(biOut, suffix, baos);
|
String base64Str = Base64Util.encode(baos.toByteArray());
|
return base64Str;
|
} catch (Exception e) {
|
return "";
|
}
|
|
}
|
|
public static BufferedImage toBufferedImage(Image image) {
|
if (image instanceof BufferedImage) {
|
return (BufferedImage) image;
|
}
|
// This code ensures that all the pixels in the image are loaded
|
image = new ImageIcon(image).getImage();
|
BufferedImage bimage = null;
|
GraphicsEnvironment ge = GraphicsEnvironment
|
.getLocalGraphicsEnvironment();
|
try {
|
int transparency = Transparency.OPAQUE;
|
GraphicsDevice gs = ge.getDefaultScreenDevice();
|
GraphicsConfiguration gc = gs.getDefaultConfiguration();
|
bimage = gc.createCompatibleImage(image.getWidth(null),
|
image.getHeight(null), transparency);
|
} catch (HeadlessException e) {
|
// The system does not have a screen
|
}
|
if (bimage == null) {
|
// Create a buffered image using the default color model
|
int type = BufferedImage.TYPE_INT_RGB;
|
bimage = new BufferedImage(image.getWidth(null),
|
image.getHeight(null), type);
|
}
|
// Copy image to buffered image
|
Graphics g = bimage.createGraphics();
|
// Paint the image onto the buffered image
|
g.drawImage(image, 0, 0, null);
|
g.dispose();
|
return bimage;
|
}
|
|
/**
|
* 得到文件流
|
* @param url 图片地址
|
* @return
|
*/
|
public static byte[] getFileStream(String url){
|
try {
|
URL httpUrl = new URL(url);
|
HttpURLConnection conn = (HttpURLConnection)httpUrl.openConnection();
|
conn.setRequestMethod("GET");
|
conn.setConnectTimeout(5 * 1000);
|
//通过输入流获取图片数据
|
InputStream inStream = conn.getInputStream();
|
//得到图片的二进制数据
|
byte[] btImg = readInputStream(inStream);
|
return btImg;
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
return null;
|
}
|
|
/**
|
* 从输入流中获取数据
|
* @param inStream 输入流
|
* @return
|
* @throws Exception
|
*/
|
public static byte[] readInputStream(InputStream inStream) throws Exception{
|
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
|
byte[] buffer = new byte[1024];
|
int len = 0;
|
while( (len=inStream.read(buffer)) != -1 ){
|
outStream.write(buffer, 0, len);
|
}
|
inStream.close();
|
return outStream.toByteArray();
|
}
|
|
/**
|
* MultipartFile 转 base64 字符串
|
* @param file
|
* @return
|
*/
|
public static String mulToBase64(MultipartFile file) {
|
String base64EncoderImg = "";
|
byte[] buffer = null;
|
try {
|
InputStream inputStream = file.getInputStream();
|
ByteArrayOutputStream bos = new ByteArrayOutputStream();
|
byte[] b = new byte[1024];
|
int n;
|
while ((n = inputStream.read(b)) != -1)
|
{
|
bos.write(b, 0, n);
|
}
|
inputStream.close();
|
bos.close();
|
buffer = bos.toByteArray();
|
base64EncoderImg = "data:image/png;base64," +Base64.encodeBase64String(buffer);
|
// 返回
|
return base64EncoderImg;
|
} catch (IOException e) {
|
e.printStackTrace();
|
}
|
// 返回
|
return base64EncoderImg;
|
}
|
|
|
/**
|
* 通过图片的url获取图片的base64字符串
|
* @param imgUrl 图片url
|
* @return 返回图片base64的字符串
|
*/
|
public static String imageUrlToBase64(String imgUrl) {
|
|
URL url = null;
|
|
InputStream is = null;
|
|
ByteArrayOutputStream outStream = null;
|
|
HttpURLConnection httpUrl = null;
|
|
try{
|
|
url = new URL(imgUrl);
|
|
httpUrl = (HttpURLConnection) url.openConnection();
|
|
httpUrl.connect();
|
|
httpUrl.getInputStream();
|
|
is = httpUrl.getInputStream();
|
|
|
|
outStream = new ByteArrayOutputStream();
|
|
//创建一个Buffer字符串
|
|
byte[] buffer = new byte[1024];
|
|
//每次读取的字符串长度,如果为-1,代表全部读取完毕
|
|
int len = 0;
|
|
//使用一个输入流从buffer里把数据读取出来
|
|
while( (len=is.read(buffer)) != -1 ){
|
|
//用输出流往buffer里写入数据,中间参数代表从哪个位置开始读,len代表读取的长度
|
|
outStream.write(buffer, 0, len);
|
|
}
|
|
// 对字节数组Base64编码
|
|
return Base64Util.encode(outStream.toByteArray());
|
|
}catch (Exception e) {
|
|
e.printStackTrace();
|
|
}
|
|
finally{
|
|
if(is != null)
|
|
{
|
|
try {
|
|
is.close();
|
|
} catch (IOException e) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
if(outStream != null)
|
|
{
|
|
try {
|
|
outStream.close();
|
|
} catch (IOException e) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
if(httpUrl != null)
|
|
{
|
|
httpUrl.disconnect();
|
|
}
|
|
}
|
|
return imgUrl;
|
|
}
|
}
|