文档章节

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

流萤飘枫丶
 流萤飘枫丶
发布于 2017/03/25 12:11
字数 477
阅读 81
收藏 0

 Java中图片文件和字符串的相互转化 (图片精度可能会丢失)

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;
 }
}

 

© 著作权归作者所有

流萤飘枫丶
粉丝 13
博文 176
码字总数 106070
作品 0
成都
程序员
私信 提问

暂无文章

nginx学习笔记

中间件位于客户机/ 服务器的操作系统之上,管理计算机资源和网络通讯。 是连接两个独立应用程序或独立系统的软件。 web请求通过中间件可以直接调用操作系统,也可以经过中间件把请求分发到多...

码农实战
今天
5
0
Spring Security 实战干货:玩转自定义登录

1. 前言 前面的关于 Spring Security 相关的文章只是一个预热。为了接下来更好的实战,如果你错过了请从 Spring Security 实战系列 开始。安全访问的第一步就是认证(Authentication),认证...

码农小胖哥
今天
11
0
JAVA 实现雪花算法生成唯一订单号工具类

import lombok.SneakyThrows;import lombok.extern.slf4j.Slf4j;import java.util.Calendar;/** * Default distributed primary key generator. * * <p> * Use snowflake......

huangkejie
昨天
12
0
PhotoShop 色调:RGB/CMYK 颜色模式

一·、 RGB : 三原色:红绿蓝 1.通道:通道中的红绿蓝通道分别对应的是红绿蓝三种原色(RGB)的显示范围 1.差值模式能模拟三种原色叠加之后的效果 2.添加-颜色曲线:调整图像RGB颜色----R色增强...

东方墨天
昨天
11
1
将博客搬至CSDN

将博客搬至CSDN

算法与编程之美
昨天
13
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部