• 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. }  
  • 相关阅读:
    快速排序
    C# String.Format
    理解C++ static
    程序地址空间
    map的实现
    【S4】使用empty()而不是判断size()是否为0
    RHEL6.4 NFS文件共享服务器搭建
    使用UDEV绑定ASM多路径磁盘
    MySQL的启动程序
    [ERROR] Fatal error: Please read "Security" section of the manual to find out how to run mysqld as root!
  • 原文地址:https://www.cnblogs.com/yelongsan/p/6288672.html
Copyright © 2020-2023  润新知