JAVA 把base64图片数据转为本地图片

项目中用到的把base64图片数据转为本地图片的函数

[java][/java] view plaincopy

  1. /**
  2.      * 替换html中的base64图片数据为实际图片
  3.      * @param html
  4.      * @param fileRoot 本地路径
  5.      * @param serRoot 服务器路径
  6.      * @return
  7.      */
  8.     public static String replaceBase64Image(String html,String fileRoot,String serRoot){
  9.         File file = new File(fileRoot);
  10.         if(!file.exists()){//文件根目录不存在时创建
  11.             new File(fileRoot).mkdirs();
  12.         }
  13.         String htmlContent = html;
  14.         Pattern pattern = Pattern.compile(“\\<img[^>]*src=\”data:image/[^>]*>”);
  15.         Matcher matcher = pattern.matcher(html);
  16.         GUIDUtils.init();
  17.         while(matcher.find()){      //找出base64图片元素
  18.             String str = matcher.group();
  19.             String src = ExStringUtils.substringBetween(str, “src=\””, “\””);//src=”…”
  20.             String ext = ExStringUtils.defaultIfEmpty(ExStringUtils.substringBetween(str, “data:image/”, “;”), “jpg”);//图片后缀
  21.             String base64ImgData = ExStringUtils.substringBetween(str, “base64,”, “\””);//图片数据
  22.             if(ExStringUtils.isNotBlank(ext)&&ExStringUtils.isNotBlank(base64ImgData)){
  23.                 //data:image/gif;base64,base64编码的gif图片数据
  24.                 //data:image/png;base64,base64编码的png图片数据
  25.                 if(“jpeg”.equalsIgnoreCase(ext)){//data:image/jpeg;base64,base64编码的jpeg图片数据
  26.                     ext = “jpg”;
  27.                 } else if(“x-icon”.equalsIgnoreCase(ext)){//data:image/x-icon;base64,base64编码的icon图片数据
  28.                     ext = “ico”;
  29.                 }
  30.                 String fileName = GUIDUtils.buildMd5GUID(false)+”.”+ext;//待存储的文件名
  31.                 String filePath = fileRoot+File.separator+fileName;//图片路径
  32.                 try {
  33.                     convertBase64DataToImage(base64ImgData, filePath);//转成文件
  34.                     String serPath = serRoot+fileName;//服务器地址
  35.                     htmlContent = htmlContent.replace(src, serPath);//替换src为服务器地址
  36.                 } catch (IOException e) {
  37.                     e.printStackTrace();
  38.                 }
  39.             }
  40.         }
  41.         return htmlContent;
  42.     }
  43.     /**
  44.      * 把base64图片数据转为本地图片
  45.      * @param base64ImgData
  46.      * @param filePath
  47.      * @throws IOException
  48.      */
  49.     public static void convertBase64DataToImage(String base64ImgData,String filePath) throws IOException {
  50.         BASE64Decoder d = new BASE64Decoder();
  51.         byte[] bs = d.decodeBuffer(base64ImgData);
  52.         FileOutputStream os = new FileOutputStream(filePath);
  53.         os.write(bs);
  54.         os.close();
  55.     }

标签