java中图片和字节数组相互转化

方案一:使用ImageIO来实现

将图片转化为字节数组

 /***  通过图片路径将图片文件转化为字符数组*  * @param url 图片路径* @return byte[]*/public static byte[] imageToBytes(String url){ByteArrayOutputStream byteOutput = new ByteArrayOutputStream();BufferedImage bufferedImage = null;try {bufferedImage = ImageIO.read(new File(url));ImageIO.write(bufferedImage,"jpg",byteOutput);return byteOutput.toByteArray();} catch (IOException e) {e.printStackTrace();}finally {try {if (byteOutput != null)byteOutput.close();} catch (IOException e) {e.printStackTrace();}}return null;}

将图片的字节数组转化为图片

 /***  将图片字节数组转化为图片,存放到指定路径** @param bytes 图片字节数组* @param url 存放的路径*/public static void bytesToImage(byte[] bytes, String url){ByteArrayInputStream byteInput = new ByteArrayInputStream(bytes);BufferedImage bufferedImage = null;try {bufferedImage = ImageIO.read(byteInput);File file = new File(url);//可以是jpg,png,gif格式ImageIO.write(bufferedImage, "jpg", file);//不管输出什么格式图片,此处不需改动} catch (IOException e) {e.printStackTrace();}finally{try {if (byteInput != null)byteInput.close();} catch (IOException e) {e.printStackTrace();}}}

这种方法虽然快捷方便,但是有一定的问题,使用ImageIO.read()方法会在生成图片时给图片背景蒙上一片红色,不过根据笔者发现背景是白色的图片会出现这种情况,暂时还未发现还有什么条件下发生这种问题。还有就是使用ImageIO.write()方法会造成图片质量的损耗,生成的图片清晰度会下降。

方案二:利用字节流来实现

将图片转化为字节数组

 /***  通过图片路径将图片文件转化为字符数组*  * @param url 图片路径* @return byte[]*/public static byte[] ImageToBytes(String url){FileImageInputStream input = null;ByteArrayOutputStream output = null;try {input = new FileImageInputStream(new File(url));output = new ByteArrayOutputStream();byte[] buf = new byte[1024];int numBytesRead = 0;while ((numBytesRead = input.read(buf)) != -1) {output.write(buf, 0, numBytesRead);}return output.toByteArray();} catch (IOException e) {e.printStackTrace();}finally {try {if (input != null)input.close();} catch (IOException e) {e.printStackTrace();}try {if (output != null)output.close();} catch (IOException e) {e.printStackTrace();}}return null;}

将图片的字节数组转化为图片

 /***  将图片字节数组转化为图片,存放到指定路径** @param bytes 图片字节数组* @param url 存放的路径*/public static void BytesToImage(byte[] bytes, String url){FileImageOutputStream imageOutput = null;//打开输入流try {imageOutput = new FileImageOutputStream(new File(url));imageOutput.write(bytes, 0, bytes.length);//将byte写入硬盘} catch (IOException e) {e.printStackTrace();}finally {try {if (imageOutput != null)imageOutput.close();} catch (IOException e) {e.printStackTrace();}}}

使用字节流来实现图片和字节数组的相互转化,就不会有方案一的问题了。不得不说,字节流yyds呀!

java中图片和字节数组相互转化相关推荐

  1. java中 如何将一个字节数组转换成字符串

    String tmpStr="我的测试";  byte[] tb = tmpStr.getBytes();  String m=new String(tb);   System.o ...

  2. java中如何获取字节数组_如何从java中读取字节数组中的数据

    大家好 我将一个mp3文件转换为字节数组,我从字节数组中读取,但它显示行号15的空指针异常 我的代码: public class MainClass { static byte[] bytesarra ...

  3. java中对象与字节数组相互转换

    1.首先对象要继承Serializable接口 将字节转换为对象 [java] view plaincopy public static Object ByteToObject(byte[] byte ...

  4. 读入的字节都写入字节数组中_使用Java将文件读入字节数组的7个示例

    读入的字节都写入字节数组中 嗨,大家好,Java程序员经常在现实世界中遇到编程问题,他们需要将文件中的数据加载到字节数组中,该文件可以是文本文件或二进制文件. 一个示例是将文件的内容转换为String ...

  5. java中字符和字节的区别是什么?

    关于java字符的文章早已是非常多了,本文是对我个人过往学习java,理解及应用java中字符的一个总结.此文内容涉及字符和字节的基本概念,以及java中字符和字节的区别是什么等相关问题,希望对大家有 ...

  6. 用Java将文件读入字节数组的7个示例

    嗨,大家好,Java程序员经常在现实世界中遇到编程问题,他们需要将文件中的数据加载到字节数组中,该文件可以是文本或二进制文件. 一个示例是将文件的内容转换为String以便显示. 不幸的是,用于表示文 ...

  7. java中字符和字节的转换_Java最佳实践–字符到字节和字节到字符的转换

    java中字符和字节的转换 在使用Java编程语言时,我们将继续讨论与建议的实践有关的系列文章,我们将讨论String性能调优. 特别是,我们将着重于使用默认编码时如何有效地处理字符到字节和字节到字符 ...

  8. 【性能优化】面试官:Java中的对象和数组都是在堆上分配的吗?

    写在前面 从开始学习Java的时候,我们就接触了这样一种观点:Java中的对象是在堆上创建的,对象的引用是放在栈里的,那这个观点就真的是正确的吗?如果是正确的,那么,面试官为啥会问:"Jav ...

  9. Java中如何定义一个数组呢?

    转自: Java中如何定义一个数组呢? 数组(Array)是有序的元素序列.若将有限个类型相同的变量的集合命名,那么这个名称为数组名.组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标 ...

最新文章

  1. python编程初学者指南pdf-Python物理建模初学者指南
  2. linux内核网络协议栈--linux网络设备理解(十四)
  3. JEP 181不兼容,嵌套类/ 2
  4. mlse均衡器matlab,基于LMS自适应均衡器matlab仿真.doc
  5. POJ3185(简单BFS,主要做测试使用)
  6. 也可以让生命发出耀眼的飞鸽传书光芒
  7. 20岁MM和25岁MM的区别(非原创,分享贴)
  8. webassembly类型_几张图让你看懂WebAssembly
  9. 贝叶斯判别分析的基本步骤_环境感知算法-目标追踪1.2- 贝叶斯方法
  10. 非客观书评(三)——《ARM Cortex-M3 权威指南》
  11. matlab画迟滞迥线,[画图的问题]怎么画类似于磁滞回线的图像?一个x值对应两个y值的...
  12. 荒野行动 android 鼠标,荒野行动键盘映射模拟器
  13. 网上支付跨行清算系统与大小额支付系统有什么区别?
  14. 试题 算法训练 印章
  15. 操作系统-进程管理(信号量机制)
  16. Xenu Link Sleuth死链接检测工具(SEO工具)
  17. leetcode——第322题——零钱兑换
  18. LSGO软件技术团队2015~2016学年第十四周(1130~1206)总结
  19. 用手机UC浏览器页面打开vue项目,图片,css,js都没加载
  20. 用递归的方式分析白色相簿2 coda篇各结局概率

热门文章

  1. 【每日一题】502. IPO
  2. 计算机二级常见知识点语言,计算机等级考试二级C语言常见知识点总结
  3. python爬取高考各高校分数线_Python 爬取高校历年分数线
  4. Python实战案例,CV2模块,Python实现抖音字符视频
  5. gpu处理信号_在PyTorch中使用DistributedDataParallel进行多GPU分布式模型训练
  6. mysql在线模拟器_力荐一款在线SQL模拟器
  7. .net 获取字符串中的第一个逗号的位置_用EXCEL合并同列字符串
  8. tcpip测试工具软件,TCP Test Tool(TCP测试工具) V2.3 官方版
  9. 传感器为什么在低量程偏差大_传感器的静态特性
  10. HTML5 行内元素有哪些,块级元素有哪些, 空元素有哪些?