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. 清除浮动的方法 after伪类。

    .clearfix{ *zoom:1; } .clearfix:after{ content: ""; display: block; clear: both; } 在样式中加入上 ...

  2. spring和springMVC的上下文

    上下文可以替代注解, 但是注解更方便 package com.tgb.web.controller; import javax.annotation.Resource; import javax.se ...

  3. C#读取word文件

    第一步:添加对在项目引用里添加上对Microsoft Word 11.0 object library的引用.右击--引用---在com标签下添加.

  4. JQuery常用动画实现函数

    1.上拉.下拉和切换 slideup().slidedown().slideToggle() JQuery里面的切换太吊了,它自带判断当前显示状态,如果为显示就执行隐藏,如果为隐藏就执行显示. 2.淡 ...

  5. CSS——京东首页实战总结

    第一天成果 1.浮动的盒子不要给宽,内容撑起盒子的宽 在前端设计中,一般不给浮动的盒子设置宽,让其用内容撑起一个高度. 2.小三角的表示 ◇用一个盒子(盒子宽为字的宽,高度为字高度的一半)去截取这个菱 ...

  6. 二分查找javascript

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. jquery全选框的实现

    函数实现的话: head里加入函数实现 <script language="javascript" type="text/javascript"> ...

  8. Nginx安装及配置虚拟主机

    nginx安装部分 依赖环境 yum -y install gcc zlib openssl-devel zlib-devel 1. 下载好下面两个包:nginx-1.8.1.tar.gz pcre- ...

  9. shell vim--处理二进制文本

    1 使用vim  -b  :%!xxd 参考:http://www.cnblogs.com/killkill/archive/2010/06/23/1763785.html 2 使用xxd命令 htt ...

  10. mustache.js基本使用(一)

    作者:zccst 模板已是第二次接触,第一次使用模板记得是在十分系统里渲染页面时使用,当时已做到熟练使用,但实际上仍不知道原因. 再次学习模板已不是从0开始,所以还算顺手,但毕竟还只限于使用,今天继续 ...