本篇博客记载的是一个我们在开发过程中很常用的一个小功能,就是我们在处理图片的时候做数据存放到数据库的功能,我们存放的不再是本地路径而是一个Base64的字符串!
然后我们在取值的时候又将Base64转换为一个图片文件的做法
简单的两个步骤:
一、导入工具类:
Base64Util:
package ;
import ;
import ;
import ;
import ;
import ;
import ;
import .BASE64Decoder;
import .BASE64Encoder;
public class Base64Util{
/**
* 字符串转图片
* @param base64Str
* @return
*/
public static byte[] decode(String base64Str){
byte[] b = null;
BASE64Decoder decoder = new BASE64Decoder();
try {
b = (replaceEnter(base64Str));
} catch (IOException e) {
();
}
return b;
}
/**
* 图片转字符串
* @param image
* @return
*/
public static String encode(byte[] image){
BASE64Encoder decoder = new BASE64Encoder();
return replaceEnter((image));
}
public static String encode(String uri){
BASE64Encoder encoder = new BASE64Encoder();
return replaceEnter((()));
}
/**
*
* @path 图片路径
* @return
*/
public static byte[] imageTobyte(String path){
byte[] data = null;
FileImageInputStream input = null;
try {
input = new FileImageInputStream(new File(path));
ByteArrayOutputStream output = new ByteArrayOutputStream();
byte[] buf = new byte[1024];
int numBytesRead = 0;
while((numBytesRead = (buf)) != -1){
(buf, 0, numBytesRead);
}
data = ();
();
();
} catch (Exception e) {
();
}
return data;
}
public static String replaceEnter(String str){
String reg ="[\n-\r]";
Pattern p = (reg);
Matcher m = (str);
return ("");
}
}
ImageUtils:
package ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
public class ImageUtils {
public static String getBase64ByImgUrl(String url){
String suffix = ((".") + 1);
try {
URL urls = new URL(url);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
Image image = ().getImage(urls);
BufferedImage biOut = toBufferedImage(image);
(biOut, suffix, baos);
String base64Str = ((()));
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 = ;
GraphicsDevice gs = ();
GraphicsConfiguration gc = ();
bimage = ((null),
(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((null),
(null), type);
}
// Copy image to buffered image
Graphics g = ();
// Paint the image onto the buffered image
(image, 0, 0, null);
();
return bimage;
}
/**
* 通过图片的url获取图片的base64字符串
* @param imgUrl 图片url
* @return 返回图片base64的字符串
*/
public static String image2Base64(String imgUrl) {
URL url = null;
InputStream is = null;
ByteArrayOutputStream outStream = null;
HttpURLConnection httpUrl = null;
try{
url = new URL(imgUrl);
httpUrl = (HttpURLConnection) ();
();
();
is = ();
outStream = new ByteArrayOutputStream();
//创建一个Buffer字符串
byte[] buffer = new byte[1024];
//每次读取的字符串长度,如果为-1,代表全部读取完毕
int len = 0;
//使用一个输入流从buffer里把数据读取出来
while( (len=(buffer)) != -1 ){
//用输出流往buffer里写入数据,中间参数代表从哪个位置开始读,len代表读取的长度
(buffer, 0, len);
}
// 对字节数组Base64编码
return (());
}catch (Exception e) {
();
}
finally{
if(is != null)
{
try {
();
} catch (IOException e) {
();
}
}
if(outStream != null)
{
try {
();
} catch (IOException e) {
();
}
}
if(httpUrl != null)
{
();
}
}
return imgUrl;
}
}
二、使用方式:
使用方式非常简单就是调用ImageUtils方法中的方法即可:
例如:我们使用图片转换Base64就直接传入一张图片的路径即可: