Base符串与图片的相互转换

时间:2024-11-11 07:24:56

本篇博客记载的是一个我们在开发过程中很常用的一个小功能,就是我们在处理图片的时候做数据存放到数据库的功能,我们存放的不再是本地路径而是一个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就直接传入一张图片的路径即可: