java --Base64編碼/解碼圖片

工程作完了,用到了圖片字符流的轉換,特此記錄下來java

package com.cheqiren.caren.util;

import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.URL;

import javax.imageio.ImageIO;

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

/**    
程序名     ImageUtils.java
程序功能    Base64編碼和解碼圖片文件
做成者                  xxx
做成日期    2015-11-05
======================修改履歷======================
項目名                    狀態            做成者        做成日期
--------------------------------------------------
caren                新規            xxx        2015-11-05
=================================================
*/

@SuppressWarnings("restriction")
public class ImageUtils {
    
    /**
    * 將網絡圖片進行Base64位編碼
    * 
    * @param imgUrl
    *            圖片的url路徑,如http://.....xx.jpg
    * @return
    */
    public static String encodeImgageToBase64(URL imageUrl) throws Exception {// 將圖片文件轉化爲字節數組字符串,並對其進行Base64編碼處理
        ByteArrayOutputStream outputStream = null;

        BufferedImage bufferedImage = ImageIO.read(imageUrl);
        outputStream = new ByteArrayOutputStream();
        ImageIO.write(bufferedImage, "jpg", outputStream);

        // 對字節數組Base64編碼
        BASE64Encoder encoder = new BASE64Encoder();
        // 返回Base64編碼過的字節數組字符串
        return encoder.encode(outputStream.toByteArray());
    }
    
    /**
    * 將本地圖片進行Base64位編碼
    * 
    * @param imgUrl
    *            圖片的url路徑,如http://.....xx.jpg
    * @return
    */
    public static String encodeImgageToBase64(File imageFile) throws Exception {// 將圖片文件轉化爲字節數組字符串,並對其進行Base64編碼處理
        ByteArrayOutputStream outputStream = null;
        BufferedImage bufferedImage = ImageIO.read(imageFile);
        outputStream = new ByteArrayOutputStream();
        ImageIO.write(bufferedImage, "jpg", outputStream);
        // 對字節數組Base64編碼
        BASE64Encoder encoder = new BASE64Encoder();
        return encoder.encode(outputStream.toByteArray());// 返回Base64編碼過的字節數組字符串
    }
    
    /**
    * 將Base64位編碼的圖片進行解碼,並保存到指定目錄
    * 
    * @param base64
    *            base64編碼的圖片信息
    * @param path
    *             文件存儲的路徑
    * @param imgName
    *             保存的文件名
    * @return
    */
    public static void decodeBase64ToImage(String base64, String path,
            String imgName) throws Exception {
        BASE64Decoder decoder = new BASE64Decoder();
        FileUtils.creatFolder(path);
        FileOutputStream write = new FileOutputStream(new File(path
                + imgName));
        byte[] decoderBytes = decoder.decodeBuffer(base64);
        write.write(decoderBytes);
        write.close();
    }
    
    /**
    * 將字符流圖片進行解碼,並保存到指定目錄
    * 
    * @param stream
    *            文件字符流
    * @param path
    *             文件存儲的路徑
    * @param imgName
    *             保存的文件名
    * @return
    */
    @SuppressWarnings("unused")
    public static void saveFileFromInputStream(InputStream stream,String path,
            String imgName) throws Exception{
        FileUtils.creatFolder(path);
        FileOutputStream fs=new FileOutputStream(path + imgName);
        System.out.println("文件保存路徑:"+path + imgName);
        byte[] buffer =new byte[1024*1024];
        int bytesum = 0;
        int byteread = 0;
        while ((byteread=stream.read(buffer))!=-1){
            bytesum += byteread;
            fs.write(buffer,0,byteread);
            fs.flush();
        }
         fs.close();
         stream.close();
         System.out.println("文件寫入完畢。");
    }
}
相關文章
相關標籤/搜索