avax.imageio
使用 ImageIO 类的静态方法可以执行许多常见的图像 I/O 操作。   
此包包含一些基本类和接口,有的用来描述图像文件内容(包括元数据和缩略图)(IIOImage);

有的用来控制图像读取过程(ImageReader、ImageReadParam)和控制图像写入过程(ImageWriter 和 ImageWriteParam);

[java] view plain copy
  1. package com.mapbar.graphics;
  2. import java.awt.Graphics;
  3. import java.awt.Image;
  4. import java.awt.Rectangle;
  5. import java.awt.image.BufferedImage;
  6. import java.io.File;
  7. import java.io.FileOutputStream;
  8. import java.io.IOException;
  9. import java.util.Arrays;
  10. import java.util.Iterator;
  11. import javax.imageio.ImageIO;
  12. import javax.imageio.ImageReadParam;
  13. import javax.imageio.ImageReader;
  14. import javax.imageio.metadata.IIOMetadata;
  15. import javax.imageio.stream.ImageInputStream;
  16. import com.sun.image.codec.jpeg.JPEGCodec;
  17. import com.sun.image.codec.jpeg.JPEGImageEncoder;
  18. /**
  19. *
  20. * Class ImageIOTest.java
  21. *
  22. * Description javax.imageio 操作
  23. *
  24. * Company mapbar
  25. *
  26. * author Chenll E-mail: Chenll@mapbar.com
  27. *
  28. * Version 1.0
  29. *
  30. * Date 2012-7-23 上午11:16:17
  31. */
  32. public class ImageIOTest {
  33. /**
  34. * Java Image I/O API 支持的读入,写出普通的格式,如果需要开发其它格式,还需要第三方插件,eg JIMI, JMagic
  35. */
  36. public void formatImageNames() {
  37. String[] imageFormats = ImageIO.getReaderFormatNames();
  38. // [jpg, BMP, bmp, JPG, wbmp, jpeg, png, PNG, JPEG, WBMP, GIF, gif]
  39. System.out.println(Arrays.asList(imageFormats));
  40. String[] imageFormats1 = ImageIO.getWriterFormatNames();
  41. // [BMP, bmp, jpg, JPG, wbmp, jpeg, png, PNG, JPEG, WBMP, GIF, gif]
  42. System.out.println(Arrays.asList(imageFormats1));
  43. }
  44. /**
  45. * Image I/O高级操作 ImageReader ImageWriter 通过ImageReader
  46. * 可以获取图片信息而不用把整张图片数据都读入内存。
  47. *
  48. * @throws IOException
  49. */
  50. public void imageReaderOp() throws IOException {
  51. Iterator<ImageReader> readers = ImageIO
  52. .getImageReadersByFormatName("JPG");
  53. ImageReader reader = readers.next();
  54. // 构造输入源
  55. File bigFile = new File("E:\\big.JPG");
  56. ImageInputStream iis = ImageIO.createImageInputStream(bigFile);
  57. // 输入源和ImageReader关联
  58. reader.setInput(iis, true);
  59. // 获取第一张图片的高度,试图解码文件的必要部分,去获取图片的宽度,而不用读取任何一个象素
  60. int imageIndex = 0;
  61. int width = reader.getWidth(imageIndex);
  62. }
  63. /**
  64. * 控制图片操作,ImageReadParam 可以让程序更好的控制内存,比如指定一个感兴趣的区域
  65. *
  66. * @throws IOException
  67. */
  68. public void imageReadParamOp() throws IOException {
  69. int imageIndex = 0;
  70. Iterator<ImageReader> readers = ImageIO
  71. .getImageReadersByFormatName("JPG");
  72. ImageReader reader = readers.next();
  73. File bigFile = new File("E:\\big.JPG");
  74. ImageInputStream iis = ImageIO.createImageInputStream(bigFile);
  75. reader.setInput(iis, true);
  76. ImageReadParam irp = reader.getDefaultReadParam();
  77. int halfWidth = reader.getWidth(imageIndex) / 2;
  78. int halfHeight = reader.getHeight(imageIndex) / 2;
  79. Rectangle rect = new Rectangle(0, 0, halfWidth, halfHeight);
  80. irp.setSourceRegion(rect);
  81. BufferedImage bi = reader.read(imageIndex, irp);
  82. ImageIO.write(bi, "JPG", new File("E:\\big_half.JPG"));
  83. }
  84. /**
  85. * 图片元信息
  86. *
  87. * @throws IOException
  88. */
  89. public void ImageMetadata() throws IOException {
  90. int imageIndex = 0;
  91. Iterator<ImageReader> readers = ImageIO
  92. .getImageReadersByFormatName("JPG");
  93. ImageReader reader = readers.next();
  94. File bigFile = new File("E:\\big.JPG");
  95. ImageInputStream iis = ImageIO.createImageInputStream(bigFile);
  96. reader.setInput(iis, true);
  97. IIOMetadata metadata = reader.getImageMetadata(imageIndex);
  98. }
  99. /**
  100. * 生成缩略图
  101. *
  102. * @throws IOException
  103. */
  104. public void generateSmall() throws IOException {
  105. File bigFile = new File("E:\\big.JPG");
  106. Image image = ImageIO.read(bigFile);
  107. int width = image.getWidth(null); // 3264
  108. int height = image.getHeight(null); // 2448
  109. BufferedImage buffi = new BufferedImage(width / 2, height / 2,
  110. BufferedImage.TYPE_INT_RGB);
  111. Graphics g = buffi.getGraphics();
  112. g.drawImage(image, 0, 0, width / 2, height / 2, null);
  113. g.dispose();
  114. ImageIO.write(buffi, "JPG", new File("E:\\small.JPG"));// width:1632 height:1224
  115. }
  116. public static void main(String[] args) throws IOException {
  117. ImageIOTest iot = new ImageIOTest();
  118. iot.generateSmall();
  119. iot.formatImageNames();
  120. iot.imageReaderOp();
  121. iot.imageReadParamOp();
  122. iot.ImageMetadata();
  123. }
  124. }

java ImageIO处理相关推荐

  1. java imageio temp_Java ImageIO.setUseCache方法代碼示例

    本文整理匯總了Java中javax.imageio.ImageIO.setUseCache方法的典型用法代碼示例.如果您正苦於以下問題:Java ImageIO.setUseCache方法的具體用法? ...

  2. java imageio 保存_java-ImageIO保存回原始大小

    我一直在从互联网上寻找一些解决方案,但仍然找不到我的问题的答案. 我一直在工作或正在执行一个程序,该程序将从PC上获取图像文件,然后将使用Java Graphics对其进行编辑以添加一些文本/对象/等 ...

  3. JAVA ImageIO图片处理后变色

    JAVA ImageIO图片处理后变色问题 最初使用ImagIO.Read() 从InputStream 转成BufferImage 然后进行水印添加,普通图片没问题,但是当前端通过JS剪裁传入后就出 ...

  4. java ImageIO.write图片上传变色及背景变黑解决

    java ImageIO.write图片上传变色及背景变黑解决 public void getImage(HttpServletRequest request, HttpServletResponse ...

  5. java imageio删除图片_Java 提取、替换、删除PDF文档中的图片

    在一篇文章里,配有与文本信息相得益彰的图片,不仅能够活跃与美化版面,同时也有利于提高文章的可读性和阅读效果,从而增强其吸引力.同时,对文档中已存在图片的处理也尤为重要.本文将通过使用Java程序来演示 ...

  6. java imageio 内存问题_java imageio内存泄漏

    我有两个 Java应用程序都使用大量内存,并且都使用ImageIO.write().到目前为止,这是我在两者之间找到的唯一共识. 一个循环中的图像大小调整.另一个循环下载图像并将其保存到磁盘.这是相关 ...

  7. java import imageio_是否可以使用Java ImageIO从InputStream读取多个...

    是的,可以从(单个)InputStream读取多个图像. 我认为最明显的解决方案是使用一种文件格式,该文件格式已广泛支持多种图像,例如TIFF.即使ImageIO类没有任何便利的方法,如ImageIO ...

  8. Java imageio底层_java - Java中的ImageIO问题 - 堆栈内存溢出

    我遇到的问题是,我在JAVA的Applet Viewer中看不到ImageIO类引用的任何图片. 我正在关注在线教程,但尚未收到作者的回信-他的页面上有类似的问题他没有回答,所以我假设他正在尝试自己解 ...

  9. java imageio 内存问题_java中的内存泄漏ImageIO.read()

    我正在使用ImageIO.read().这是由原始应用的主要方法调用的类是这样的:java中的内存泄漏ImageIO.read() import java.awt.*; import javax.sw ...

最新文章

  1. 以女朋友为例讲解 TCP/IP 三次握手与四次挥手
  2. 【考证】华为HCIP、HCIE认证考试大纲
  3. 选购光端机有哪些必备条件
  4. Open Source Web Design!
  5. C#实现图片的无损压缩
  6. 有机会多熟悉下开源框架
  7. [转]oracle分析函数Rank, Dense_rank, row_number
  8. SpringBoot时间戳与MySql数据库记录相差14小时排错
  9. window10怎么卸载php,window_win10怎么卸载程序?win10卸载程序教程,当win10正式版发布以后,不少 - phpStudy...
  10. 【英语学习】【Daily English】U10 Education L02 I'm not a pushy parent
  11. Oracle数据库链路
  12. ztz11的noip模拟赛T1:愤怒的XiaoX
  13. C语言:使用递归解决汉诺塔问题。
  14. c语言作业陌路寒暄,短学期算法与编程实习的C语言题目
  15. uniapp教程,uni-app教程
  16. React Suspense 尝鲜,处理前后端IO异步操作
  17. 床的标准尺寸和规格都有哪种
  18. java解压在线tgz文件
  19. IIS Nginx Apache Tomcat 中间件漏洞
  20. 17、内容页面 - 小程序端开发 - 微擎小程序模块应用开发

热门文章

  1. 钉钉扫码登录二维码错乱
  2. linux列表去重复数据,Linux常用去除重复数据口令
  3. ad16中如何改变栅格颜色
  4. working directory is not part of a module
  5. 互联网金融系列-支付清算体系介绍-下篇
  6. python 字符串与ASCII码转换的脚本
  7. 哪些英文单词改变时态需要双写末尾字母
  8. github项目ratel:JAVA实现斗地主
  9. kubernetes资源管理平台ratel
  10. origin画图修改横坐标