引用:http://blog.csdn.net/cdl2008sky/article/details/7775681

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. 功能强大的图片截取修剪神器:Android SimpleCropView及其实例代码重用简析(转)

    功能强大的图片截取修剪神器:Android SimpleCropView及其实例代码重用简析 SimpleCropView是github上第一个第三方开源的图片修剪截取利器,功能强大,设计良好.我个人 ...

  2. Java 图片处理——如何生成高清晰度而占有磁盘小的缩略图

    现在的web项目,图片越来越多,图片大小也越来越大,随便就能达到1M,2M,甚至更大.用户上传的图片,一般是无法直接使用的.一般要生成两三种对应的缩略图,分别适配不同的终端,不同的场景.比如PC,手机 ...

  3. Java 图片提取RGB数组 RGBOfCharMaps (整理)

    package demo; /** * Java 图片提取RGB数组 RGBOfCharMaps (整理) * 声明: * 和ImageCombining配合使用的工具,这里是提取图片的R.G.B生成 ...

  4. Java 图片转换为字符图 CharMaps (整理)

      /* * Java 图片转换成字符图 CharMaps (整理) * * 2016-1-2 深圳 南山平山村 曾剑锋 * * @(#)CharMaps.java 2014/1/16 * 1.这个一 ...

  5. simpleImageTool又纯java图片水印、缩放工具

    simpleImageTool又一个简单.好用的图片格式转换.缩放水印叠加等功能的纯Java图片工具库. simpleImageTool的由来,近期需要用到图片处理,通过网上的图片流直接进行缩放水印叠 ...

  6. java图片处理开源框架

    java图片处理开源框架 以前一直不明白,java开源框架什么意思,搜集资料得出以下结论 其实java框架可以理解为一个工具或者一个插件,将一个公用的.常用的技术封装起来,处理一些基础的.繁琐的问题. ...

  7. Java图片加文字水印

    Java图片加文字水印 import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.I ...

  8. 微信小程序 画布drawImage实现图片截取

    大多数图片都大小不一,选择框的尺寸也是宽高相等的,就会有图片被压缩 解决方法: 1.可以使用画布对图片先进行截取,保存截取图片(用户自己选取,或者指定图片中心区域截取),但是对于多张图片手动截取,会影 ...

  9. java图片操作--生成与原图对称的图片

    java图片操作--生成与原图对称的图片 package com.pay.common.util; import java.awt.image.BufferedImage; import java.i ...

随机推荐

  1. JSTL不同版本和EL表达式的关联

    JSTL目前有3个版本:JSTL1.0.JSTL1.1.JSTL1.2 JSTL1.0和JSTL1.1包含jstl.jar和standard.jar这2个jar包,在j2ee4的版本中是需要单独引用这 ...

  2. Redis学习(6)-常用命令

    List命令 value值为LinkedList类型. 使用环境: 1,做大数据集合的增删. 2,任务队列.用户任务队列 链表查看 lrange key start end:获取链表从start到en ...

  3. ReentrantLock和synchronized的区别随笔

    http://wsmajunfeng.iteye.com/blog/1492316 可重入锁 ReentrantLock 的含义是: 当某个线程获取某个锁后,在未释放锁的情况下,第二次再访问该锁锁定的 ...

  4. ssh之为什么要放弃ssh?

    本文经转载, 源出处不详.https://www.cnblogs.com/hackxiyu/p/6849085.html 最近听一些朋友说,招聘面试的很多人简历都差不多,大部分人的简历上面都写了熟悉s ...

  5. HDUOJ----4509湫湫系列故事——减肥记II

    湫湫系列故事——减肥记II Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Tot ...

  6. 学习Tkinter

    tutorial point这个网站教程很多,无所不包.还包括一堆在线IDE,值得收藏 一.第一个tkinter程序 import tkinter top = tkinter.Tk() # Code ...

  7. JavaScript 设计模式之命令模式

    一.命令模式概念解读 1.命令模式概念文字解读 命令模式(Command)的定义是:用来对方法调用进行参数化处理和传送,经过这样处理过的方法调用可以在任何需要的时候执行.也就是说该模式旨在将函数的调用 ...

  8. 【C++】int与string互转

    int转string(注:itoa不是标准函数,OJ平台可能不接受) ; ]; string str; sprintf(temp, "%d", n); str = temp; or ...

  9. 由ConcurrentLinkedQueue扯到线程安全 待整理

    前几天项目总是报错,找了下原因. ConcurrentLinkedQueue 本身是一个基于链接节点的无界线程安全队列,你自己调用就不用考虑线程安全了吗? 结论是:原子性操作当然是线程安全的,非原子性 ...

  10. OkHttp拦截器的实现原理

    今天项目中遇到需要将从push接收到的数据按照协议parse成应用层需要的结构化数据类型问题:因为push消息类型繁多,等待解析出的结构化数据类型也多样,有的还需要经过几步的parse过程:而且因为项 ...