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. Windows环境下使用VS2005编译OpenSSL

    如何Windows环境下,使用VS2005编译OpenSSL,虽然这个问题在Baidu.Google上一堆,但安装中还是遇到些问题,在这里 记录下来希望能帮助大家不要在走弯路.注:我是在WinXP S ...

  2. (转)windows上virtualenv 安装及使用

    [注意]要在某个含有空格的目录下面创建virtualenv环境,就要安装 win32api . 原文地址:http://blog.csdn.net/liuchunming033/article/det ...

  3. javascript 函数 add(1)(2)(3)(4)实现无限极累加 —— 一步一步原理解析

    问题:我们有一个需求,用js 实现一个无限极累加的函数, 形如 add(1) //=> 1; add(1)(2)  //=> 2; add(1)(2)(3) //=>  6; add ...

  4. scrollView顶部空白

    在iOS7之后,苹果会自动给导航控制器里面的所有UIScrollView顶部都会添加额外的滚动区域64.

  5. [iOS]C语言技术视频-02-程序分支结构(if...else)

    下载地址: 链接: http://pan.baidu.com/s/1dREc2 密码: egbt

  6. ecos资源探测器

    两种类型的资源探测器 xml文件资源探测器 目录资源探测器 系统内置的资源探测器(核心) 数据库定义目录资源探测器 -base_application_datable 关注dbschema servi ...

  7. C# 开发系列(一)

    1.开发环境搭建: win7 32位系统,然后安装 visual studio 2012. 2.将 .net_framework 加入到windows 的环境变量当中. C:\Windows\Micr ...

  8. IOS开发中重写init方法使用需谨慎

    IOS开发中重写init方法使用需谨慎 今天在写一个小软件的时候出现一点问题,这个软件的功能是搜索全国学校,首页就是搜索输入框,在框中输入完要查询的学校所在省份,点击buttom后就会跳转到对应的视图 ...

  9. greenDAO简介

    了解android开发的人应该都会知道,android的数据库开发主要用到sqlite.greenDAO应该算是当前最火的数据库开源框架了吧,它是一个移动开发的ORM(object / relatio ...

  10. MapReduce 多表连接

    题目描述: 现在有两个文件,1为存放公司名字和城市ID,2为存放城市ID和城市名 表一: factoryname,addressed Beijing Red Star,1 Shenzhen Thund ...