文档章节

Java中图片文件和字符串的相互转化

湖心亭看雪
 湖心亭看雪
发布于 2014/09/26 11:14
字数 483
阅读 2721
收藏 13
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.imageio.ImageIO;
public class TypeConverter {
 private static String ImageFileFormat = "jpg";
 private static StringBuffer sb1 = null;
 private static BufferedImage buffImage = null;
 private static ByteArrayOutputStream baos = null;
 private static byte[] byteImage = null;
 private static String ImageFileNameFormat = "yyyy-MM-dd_HH-mm-ss";
 private static String splitSymbol = ",";
 private static String[] imageStringArr = null;
 // picturePath为图片文件的在磁盘上的保存路径,返回值为文件转换成字符串之后的字符串,转换过程以逗号分隔(此方法理论上也可以将非图片格式的文件转换成字符串)
 public static String ImageFileToString(String picturePath) {
  sb1 = new StringBuffer();
  try {
   buffImage = ImageIO.read(new File(picturePath));
   baos = new ByteArrayOutputStream();
   ImageIO.write(buffImage, ImageFileFormat, baos);
  } catch (IOException e) {
   e.printStackTrace();
  }
  byteImage = baos.toByteArray();
  for (int i = 0; i < byteImage.length; i++) {
   if (sb1.length() == 0) {
    sb1.append(byteImage[i]);
   } else {
    sb1.append(splitSymbol + byteImage[i]);
   }
  }
  return sb1.toString();
 }
 // pictureString为需要转换成图片文件的字符串,pictureToPath是字符串转换为图片文件之后的图片文件的保存路径
 public static void StringToImageFile(String pictureString,
   String pictureToPath) {
  if (pictureString.contains(",")) {
   imageStringArr = split(pictureString, splitSymbol);
   byte[] image = new byte[imageStringArr.length];
   for (int i = 0; i < imageStringArr.length; i++) {
    image[i] = Byte.parseByte(imageStringArr[i]);
   }
   String name = saveImage(image, pictureToPath);
  } else {
   System.out.println("(字符串----->图片文件)不能解析的格式!");
  }
 }
 private static String[] split(String s, String token) {
  if (s == null)
   return null;
  if (token == null || s.length() == 0)
   return new String[] { s };
  int size = 0;
  String[] result = new String[4];
  while (s.length() > 0) {
   int index = s.indexOf(token);
   String splitOne = s;
   if (index > -1) {
    splitOne = s.substring(0, index);
    s = s.substring(index + token.length());
   } else {
    s = "";
   }
   if (size >= result.length) {
    String[] tmp = new String[result.length * 2];
    System.arraycopy(result, 0, tmp, 0, result.length);
    result = tmp;
   }
   if (splitOne.length() > 0) {
    result[size++] = splitOne;
   }
  }
  String[] tmp = result;
  result = new String[size];
  System.arraycopy(tmp, 0, result, 0, size);
  return result;
 }
 private static BufferedImage readImage(byte[] bytes) throws IOException {
  ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
  return ImageIO.read(bais);
 }
 private static String saveImage(byte[] imgages, final String saveDir) {
  try {
   BufferedImage bis = readImage(imgages);
   DateFormat sdf = new SimpleDateFormat(ImageFileNameFormat);
   String fileTime = sdf.format(new Date());
   final String name = fileTime + "_" + "." + ImageFileFormat;
   File f = new File(saveDir + name);
   boolean istrue = false;
   if (f.exists()) {
    istrue = ImageIO.write(bis, ImageFileFormat, f);
   } else {
    f.mkdirs();
    istrue = ImageIO.write(bis, ImageFileFormat, f);
   }
   if (istrue) {
    return name;
   }
  } catch (Exception e) {
  }
  return null;
 }
}

© 著作权归作者所有

上一篇: 第一章
下一篇: Java中的JSON
湖心亭看雪
粉丝 20
博文 50
码字总数 15707
作品 0
武汉
程序员
私信 提问
C#picturebox控件图片以json格式上传java后台保存

关于winform上传图片到Java后端,保存到数据库,有多种方法,本文主要介绍利用picturebox控件,点击按钮上传图片,将图片转化为base64格式,以json格式上传到Java后台,再从java端解析,保存到...

土狼一族
07/11
0
0
Java语言学习(十):输入/输出

Java中,I/O操作代表着输入、输出,Java所有的I/O机制都是基于数据流进行输入输出。java.io类包提供了很多的输入输出处理功能方法,大家可以参考下JDK文档中关于I/O的一些处理方法:JDK在线中...

海岸线的曙光
2018/07/18
8
0
常用的Java代码汇总

1. 字符串有整型的相互转换 2. 向文件末尾添加内容 3. 得到当前方法的名字 4. 转字符串到日期 或者是: 5. 使用JDBC链接Oracle 6. 把 Java util.Date 转成 sql.Date 7. 使用NIO进行快速的文件...

源码同
2015/01/26
1K
0
20非常有用的Java程序片段

下面是20个非常有用的Java程序片段,希望能对你有用。 1. 字符串有整型的相互转换 2. 向文件末尾添加内容 3. 得到当前方法的名字 4. 转字符串到日期 或者是: 5. 使用JDBC链接Oracle 6. 把 ...

crazyinsomnia
2009/12/27
5.8K
25
Android的反编译和代码混淆

系列文章: Android的反编译和代码混淆 Android的打包签名 Android的多渠道打包 前言 包括以下内容 要反编译apk需要下面3个工具 反编译资源文件 反编译类文件 代码混淆 要反编译apk需要下面3...

跳动的松鼠
2017/11/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring Boot + Mybatis + Ehcache 二级缓存实例

二级缓存是多个SqlSession共享的,其作用域是mapper的同一个namespace,不同的sqlSession两次执行相同namespace下的sql语句且向sql中传递参数也相同即最终执行相同的sql语句,第一次执行完毕...

xiaolyuh
19分钟前
4
0
Spring源码学习(二)哎呦,按菜谱做菜与AbstractAutowireCapableBeanFactory.createBean流程差不多

记得跟老婆谈恋爱时,有一天心血来潮给老婆做饭,按照菜谱一步一步的做,结果差点把厨房烧了!!! 这事至今老婆还记得。 入口 上一篇说了,AbstractBeanFactory.getBean的主流程 ,今天来说下...

温安适
21分钟前
34
0
前端UI攻城狮 你们该抛弃jQuery了

你不再需要jQuery! Web工程师太依赖jQuery了,某种意义上说jQuery已经成了JavaScript的同义词。但是我们真的需要他么?或许我们应该反思一下什么时候才真的需要jQuery。 对我个人而言开始使...

前端老手
23分钟前
5
0
六、Java设计模式之工厂方法

工厂方法定义: 定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类,工厂方法让类的实例化推迟到子类中进行 类型:创建型 工厂方法-使用场景: 创建对象需要大量重复的代码 ...

东风破2019
今天
6
0
win服务器管理遇到的一系列问题记录

有些小伙伴在使用iis7远程桌面管理工具的时候总是会遇到一系列的问题,下面就是为大家介绍一下服务器日常管理过程中出现的问题及我的解决办法和心得。希望能帮到大家。   拒绝服务器重新启...

1717197346
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部