java IMAGEIO

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

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

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

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