我是条汉子 发表于 2017-12-28 20:07:25

java IMAGEIO

  javax.imageio
  使用 ImageIO 类的静态方法可以执行许多常见的图像 I/O 操作。   
  此包包含一些基本类和接口,有的用来描述图像文件内容(包括元数据和缩略图)(IIOImage);
  有的用来控制图像读取过程(ImageReader、ImageReadParam)和控制图像写入过程(ImageWriter 和 ImageWriteParam);
  详细 Java ImageIO处理图像的封装例子   http://www.gzhost.net/Artdetail-1609-649.html
view plain copy
[*]package com.mapbar.graphics;
[*]
[*]import java.awt.Graphics;
[*]import java.awt.Image;
[*]import java.awt.Rectangle;
[*]import java.awt.image.BufferedImage;
[*]import java.io.File;
[*]import java.io.FileOutputStream;
[*]import java.io.IOException;
[*]import java.util.Arrays;
[*]import java.util.Iterator;
[*]
[*]import javax.imageio.ImageIO;
[*]import javax.imageio.ImageReadParam;
[*]import javax.imageio.ImageReader;
[*]import javax.imageio.metadata.IIOMetadata;
[*]import javax.imageio.stream.ImageInputStream;
[*]
[*]import com.sun.image.codec.jpeg.JPEGCodec;
[*]import com.sun.image.codec.jpeg.JPEGImageEncoder;
[*]
[*]/**
[*] *
[*] * Class ImageIOTest.java
[*] *
[*] * Description javax.imageio 操作
[*] *
[*] * Company mapbar
[*] *
[*] * author Chenll E-mail: Chenll@mapbar.com
[*] *
[*] * Version 1.0
[*] *
[*] * Date 2012-7-23 上午11:16:17
[*] */
[*]public class ImageIOTest {
[*]
[*]    /**
[*]   * Java Image I/O API 支持的读入,写出普通的格式,如果需要开发其它格式,还需要第三方插件,eg JIMI, JMagic
[*]   */
[*]    public void formatImageNames() {
[*]
[*]      String[] imageFormats = ImageIO.getReaderFormatNames();
[*]      //
[*]      System.out.println(Arrays.asList(imageFormats));
[*]
[*]      String[] imageFormats1 = ImageIO.getWriterFormatNames();
[*]      //
[*]      System.out.println(Arrays.asList(imageFormats1));
[*]
[*]    }
[*]
[*]    /**
[*]   * Image I/O高级操作 ImageReader ImageWriter 通过ImageReader
[*]   * 可以获取图片信息而不用把整张图片数据都读入内存。
[*]   *
[*]   * @throws IOException
[*]   */
[*]    public void imageReaderOp() throws IOException {
[*]      Iterator<ImageReader> readers = ImageIO
[*]                .getImageReadersByFormatName("JPG");
[*]      ImageReader reader = readers.next();
[*]      // 构造输入源
[*]      File bigFile = new File("E:\\big.JPG");
[*]      ImageInputStream iis = ImageIO.createImageInputStream(bigFile);
[*]      // 输入源和ImageReader关联
[*]      reader.setInput(iis, true);
[*]      // 获取第一张图片的高度,试图解码文件的必要部分,去获取图片的宽度,而不用读取任何一个象素
[*]      int imageIndex = 0;
[*]      int width = reader.getWidth(imageIndex);
[*]    }
[*]
[*]    /**
[*]   * 控制图片操作,ImageReadParam 可以让程序更好的控制内存,比如指定一个感兴趣的区域
[*]   *
[*]   * @throws IOException
[*]   */
[*]    public void imageReadParamOp() throws IOException {
[*]      int imageIndex = 0;
[*]      Iterator<ImageReader> readers = ImageIO
[*]                .getImageReadersByFormatName("JPG");
[*]      ImageReader reader = readers.next();
[*]      File bigFile = new File("E:\\big.JPG");
[*]      ImageInputStream iis = ImageIO.createImageInputStream(bigFile);
[*]      reader.setInput(iis, true);
[*]      ImageReadParam irp = reader.getDefaultReadParam();
[*]      int halfWidth = reader.getWidth(imageIndex) / 2;
[*]      int halfHeight = reader.getHeight(imageIndex) / 2;
[*]      Rectangle rect = new Rectangle(0, 0, halfWidth, halfHeight);
[*]      irp.setSourceRegion(rect);
[*]      BufferedImage bi = reader.read(imageIndex, irp);
[*]      ImageIO.write(bi, "JPG", new File("E:\\big_half.JPG"));
[*]    }
[*]
[*]    /**
[*]   * 图片元信息
[*]   *
[*]   * @throws IOException
[*]   */
[*]    public void ImageMetadata() throws IOException {
[*]      int imageIndex = 0;
[*]      Iterator<ImageReader> readers = ImageIO
[*]                .getImageReadersByFormatName("JPG");
[*]      ImageReader reader = readers.next();
[*]      File bigFile = new File("E:\\big.JPG");
[*]      ImageInputStream iis = ImageIO.createImageInputStream(bigFile);
[*]      reader.setInput(iis, true);
[*]      IIOMetadata metadata = reader.getImageMetadata(imageIndex);
[*]    }
[*]
[*]    /**
[*]   * 生成缩略图
[*]   *
[*]   * @throws IOException
[*]   */
[*]    public void generateSmall() throws IOException {
[*]      File bigFile = new File("E:\\big.JPG");
[*]      Image image = ImageIO.read(bigFile);
[*]      int width = image.getWidth(null); // 3264
[*]      int height = image.getHeight(null); // 2448
[*]      BufferedImage buffi = new BufferedImage(width / 2, height / 2,
[*]                BufferedImage.TYPE_INT_RGB);
[*]      Graphics g = buffi.getGraphics();
[*]      g.drawImage(image, 0, 0, width / 2, height / 2, null);
[*]      g.dispose();
[*]      ImageIO.write(buffi, "JPG", new File("E:\\small.JPG"));// width:1632 height:1224
[*]    }
[*]
[*]    public static void main(String[] args) throws IOException {
[*]      ImageIOTest iot = new ImageIOTest();
[*]      iot.generateSmall();
[*]      iot.formatImageNames();
[*]      iot.imageReaderOp();
[*]      iot.imageReadParamOp();
[*]      iot.ImageMetadata();
[*]    }
[*]
[*]}
[*]

页: [1]
查看完整版本: java IMAGEIO