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

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

详细 JavaImageIO处理图像的封装例子     http://www.gzhost.net/Artdetail-1609-649.html

    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给图片添加水印

    最近项目在做一个商城项目, 项目上的图片要添加水印①,添加图片水印;②:添加文字水印; 一下提供下个方法,希望大家可以用得着: package com.blogs.image; import java ...

  2. 用java imageio调整图片DPI,例如从96调整为300

    因项目需求把图片的DPI值提升到300,否则OCR识别产生错乱:直接上源码:1.图片处理接口: package util.image.dpi; import java.awt.image.Buffer ...

  3. java:BufferedImage推断图像通道顺序并转RGB/BGR

    一般来说java ImageIO处理读取图像时.通常是RGB或ARGB格式,可是有的时候.我们须要图像是BGR格式. 比方通过JNI将图像矩阵传递给动态库,动态库里用OpenCV来处理矩阵,而用Ope ...

  4. Spark案例分析

    一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...

  5. java图片截取组件ImageIO

    引用:http://blog.csdn.net/cdl2008sky/article/details/7775681 javax.imageio使用 ImageIO 类的静态方法可以执行许多常见的图像 ...

  6. java 图形化小工具Abstract Window Toolit ImageIO缩放图片,添加水印

    实现步骤: 读取图像Image src = ImageIO.read 创建目标图像BufferedImage distImage = new BufferedImage(dstWidth, dstHe ...

  7. java linux ImageIO 验证码在一段时间以后出不来 问题总结

    最近在测试上布署的项目经常性的出现验证码过了一段时间以后出不来的情况,耐心找了一下,最后在上级的指导下发现了报错,其实说真的,我自己也找到了这个报错,只是没有当一回事.因为这个验证码的东西不是我写的, ...

  8. Java使用imageio、awt生成图片验证码

    1.生成验证码工具类 public class CheckCodeTool { private Integer width = 80; private Integer height = 38; pub ...

  9. Java Swing interview

    http://www.careerride.com/Swing-AWT-Interview-Questions.aspx   Swing interview questions and answers ...

随机推荐

  1. HDU1425 <sort 快排>

    给你n个整数,请按从大到小的顺序输出其中前m大的数. 每组测试数据有两行,第一行有两个数n,m(0<n,m<1000000),第二行包含n个各不相同,且都处于区间[-500000,5000 ...

  2. Myeclipse8.5中svn插件安装方法总结

    [转]http://lwcheng1985.iteye.com/blog/696143   有改动 方法一:在线安装 1.打开HELP->MyEclipse Configuration Cent ...

  3. codeforces 665A Buses Between Cities

    简单题 #include<cstdio> #include<cstring> #include<cmath> #include<vector> #inc ...

  4. linux下的安装百度云网盘

    linux下的百度网盘 (2014-10-20 18:01:14) 标签: linux 百度网盘 网盘 百度 forlinux 分类: 技术博文 百度网盘说实话,其实我挺喜欢的,好处什么的,就不说了, ...

  5. webapp之路--之必备知识

    移动设备的用户越来越多,每天android手机的激活量都已经超过130万台,所以我们面向移动终端的WebAPP也开始跟进了.本文主要介绍webapp的开发与调试的相关知识和经验,以及给出几种可选的解决 ...

  6. [Unity]背包效果-使用NGUI实现物品的拖拽效果Drag

    背包效果-使用NGUI实现物品的拖拽效果Drag 效果实现如图 对象层级关系图 PacketCell - Right 对象作为单元格背景 PacketContainer 对象作为单元格容器 Packe ...

  7. Oracle存储过程中如何使用游标

    --本存储过程的功能:把test_tbl2中与test_tbl1中ID相同但salary不同的记录中的salary的值更新为test_tbl1中的salary的值--创建存储过程create or r ...

  8. zookeoper在root下设置开机启动

    1 准备工作 1) 切换到/etc/rc.d/init.d/目录下 2) 创建zookeeper文件:touch zookeeper 3)更新权限:chmod +777 zookeeper 4)编辑文 ...

  9. [iOS Animation]-CALayer 缓冲

    缓冲 生活和艺术一样,最美的永远是曲线. -- 爱德华布尔沃 - 利顿 在第九章“图层时间”中,我们讨论了动画时间和CAMediaTiming协议.现在我们来看一下另一个和时间相关的机制--所谓的缓冲 ...

  10. 5、手把手教你Extjs5(五)使用图标字体来美化按钮)

    sencha 的例子中,有使用图标字体来美化按钮的例子,这个用起来又方便风格又统一,例如下图: 上面图标字体的使用方法也很简单,只要下载Font Awesome的css和图标文件,放到项目里就可以了. ...