使用Base64将图片转化为字符串(后期详细整理)

需要导入sun.misc.BASE64Decoder.jar包

Base64ToImage.java

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;

public class Base64ToImage {
//  替换字符串
  public String changeStr(String oldStr, String newStr, String str) {
      return str.replace(oldStr, newStr);
  }
  /**
   * 
   * @功能:创建一个目录,并在此目录下生成图片
   * @时间:2017年3月7日 下午8:38:21
   * @param path 原Base64字符串存放的目录
   * @param targetPath 生成图片的父目录
   * @param dirName 生成图片的目录名
 * @throws IOException 
   */
  public void readStrToImg(String path,String targetPath,String dirName){
      File file = new File(path);
//    目标目录
    File targetFile=new File(targetPath+"\\"+dirName);
//    创建一个名称为dirName的目录
    targetFile.mkdir();
    targetPath=targetPath+"\\"+dirName;
    File[] array = file.listFiles();
    for (int i = 0; i < array.length; i++) {
        if (array[i].isFile()) {
//            去掉txt文件的扩展名,值得到文件名
            String fileName=array[i].getName().substring(0, array[i].getName().length()-3);
//            新建一个文件,用来存储Base64字符串,并且文件的名称要与图片的名称一致
            try {
                GenerateImage(readStr(array[i].getPath()),targetPath,fileName);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }
    System.out.println("完成!");
  }
  /**
   * 
   * @功能:根据路径,读取文件的内容,返回字符串
   * @时间:2017年3月7日 下午8:44:02
   * @param path 这个文件的路径
   * @return
 * @throws IOException 
   */
  public String readStr(String path) throws IOException{
      InputStream is=new FileInputStream(path);
      InputStreamReader isr=new InputStreamReader(is);
      BufferedReader br=new BufferedReader(isr);
      String str="";
      int flag=0;
      br.mark(flag);
      while(br.ready()){
          br.reset();
          str+=br.readLine();
          br.mark(flag);
      }
      br.close();
      isr.close();
      is.close();
    return changeStr("/","*",str);
  }
  //base64字符串转化成图片
  public boolean GenerateImage(String imgStr,String targetPath,String imageName)
  {   //对字节数组字符串进行Base64解码并生成图片
      if (imgStr == null) //图像数据为空
          return false;
      Decoder.BASE64Decoder decoder = new Decoder.BASE64Decoder();
      try 
      {
          //Base64解码
          byte[] b = decoder.decodeBuffer(imgStr);
          for(int i=0;i<b.length;++i)
          {
              if(b[i]<0)
              {//调整异常数据
                  b[i]+=256;
              }
          }
          //生成jpeg图片
          String imgFilePath = targetPath+"\\"+imageName;//新生成的图片
          OutputStream out = new FileOutputStream(imgFilePath);    
          out.write(b);
          out.flush();
          out.close();
          return true;
      } 
      catch (Exception e) 
      {
          return false;
      }
  }
}

ImageToBase64 .java

import java.io.File;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class ImageToBase64 
{

//    替换字符串
    public String changeStr(String oldStr, String newStr, String str) {
        return str.replace(oldStr, newStr);
    }

    /**
     * 
     * @功能:创建一个目录,并且在此目录下创建生成的Base64码的文件
     * @时间:2017年3月7日 下午6:27:48
     * @param path 图片的路径
     * @param targetPath Base64字符串存放的路径
     * @param dirName 存放Base64字符串的文件的名称
     */
    public void writeStrToFile(String path,String targetPath,String dirName) {
        File file = new File(path);
//        目标目录
        File targetFile=new File(targetPath+"\\"+dirName);
//        创建一个名称为dirName的目录
        targetFile.mkdir();
        File[] array = file.listFiles();
        for (int i = 0; i < array.length; i++) {
            if (array[i].isFile()) {
//                新建一个文件,用来存储Base64字符串,并且文件的名称要与图片的名称一致
                writeStr(GetImageStr(array[i].getPath()),targetFile+"\\"+array[i].getName()+".txt");
            }

        }
        System.out.println("完成!");
    }
    /**
     * 
     * @功能:将base64编码写入到txt文件中
     * @时间:2017年3月7日 下午6:46:20
     * @param path
     * @param str
     */
    public void writeStr(String imageStr,String targetPath){
        String imgFilePath = targetPath;//新生成的图片
        byte[] bytes=imageStr.getBytes();
        OutputStream out = null;
        try {
            out = new FileOutputStream(imgFilePath);
            out.write(bytes);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }    
        try {
            out.flush();
            out.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
    /**
     * 
     * @功能:图片转化成base64字符串
     * @时间:2017年3月7日 下午8:37:35
     * @param path
     * @return
     */
    public String GetImageStr(String path)
    {//将图片文件转化为字节数组字符串,并对其进行Base64编码处理
        InputStream in = null;
        byte[] data = null;
        //读取图片字节数组
        try 
        {
            in = new FileInputStream(path);        
            data = new byte[in.available()];
            in.read(data);
            in.close();
        } 
        catch (IOException e) 
        {
            e.printStackTrace();
        }
        //对字节数组Base64编码
        Decoder.BASE64Encoder encoder = new Decoder.BASE64Encoder();
        return changeStr("/","*",encoder.encode(data));//将编码中/全部替换成*后返回Base64编码过的字节数组字符串

    }


}

Test.java

import java.util.Scanner;

import sjj.base64.Base64ToImage;
import sjj.base64.ImageToBase64;

public class Test {

    public static void main(String[] args) {
        String path="";
        String targetPath="";
        String fileName="";
        int flag=0;
        System.out.println("1.图片转化为字符串\r\n2.字符串转化为图片");
        Scanner scan=new Scanner(System.in);
        flag=scan.nextInt();
        if(flag==1){
            ImageToBase64 itb=new ImageToBase64();
            System.out.println("输入源图片的路径:");
            path=scan.next();
            System.out.println("输入字符串存放的路径:");
            targetPath=scan.next();
            System.out.println("输入存放字符串的目录的名称:");
            fileName=scan.next();
            itb.writeStrToFile(path, targetPath, fileName);
        }else if(flag==2){
            Base64ToImage bti=new Base64ToImage();
            System.out.println("输入源字符串的路径:");
            path=scan.next();
            System.out.println("输入图片存放的路径:");
            targetPath=scan.next();
            System.out.println("输入存放图片的目录的名称:");
            fileName=scan.next();
            bti.readStrToImg(path, targetPath, fileName);
        }else{
            System.out.println("程序结束!");
        }
    }

}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值