java截取图片示例

2022-10-21,,,

复制代码 代码如下:
/**
 *
 */
package com.b510;

import java.awt.rectangle;
import java.awt.image.bufferedimage;
import java.io.file;
import java.io.fileinputstream;
import java.io.ioexception;
import java.util.date;
import java.util.iterator;

import javax.imageio.imageio;
import javax.imageio.imagereadparam;
import javax.imageio.imagereader;
import javax.imageio.stream.imageinputstream;

/**
 * @date 2012-11-26
 * @author xhw
 *
 */
public class imagecut {

    /**
     * 源图片路径名称如:c:\1.jpg
     */
    private string srcpath = "e:/poool.jpg";
    /**
     * 剪切图片存放路径名称.如:c:\2.jpg
     */
    private string subpath = "e:/pool_end";
    /**
     * jpg图片格式
     */
    private static final string image_form_of_jpg = "jpg";
    /**
     * png图片格式
     */
    private static final string image_form_of_png = "png";
    /**
     * 剪切点x坐标
     */
    private int x;

    /**
     * 剪切点y坐标
     */
    private int y;

    /**
     * 剪切点宽度
     */
    private int width;

    /**
     * 剪切点高度
     */
    private int height;

    public imagecut() {

    }

    public imagecut(int x, int y, int width, int height) {
        this.x = x;
        this.y = y;
        this.width = width;
        this.height = height;
    }

    public static void main(string[] args) throws exception {
        imagecut imagecut = new imagecut(134, 0, 366, 366);
        imagecut.cut(imagecut.getsrcpath(), imagecut.getsubpath());
    }

    /**
     * 返回包含所有当前已注册 imagereader 的 iterator,这些 imagereader 声称能够解码指定格式。
     * 参数:formatname - 包含非正式格式名称 .(例如 "jpeg" 或 "tiff")等 。
     *
     * @param postfix
     *            文件的后缀名
     * @return
     */
    public iterator<imagereader> getimagereadersbyformatname(string postfix) {
        switch (postfix) {
        case image_form_of_jpg:
            return imageio.getimagereadersbyformatname(image_form_of_jpg);
        case image_form_of_png:
            return imageio.getimagereadersbyformatname(image_form_of_png);
        default:
            return imageio.getimagereadersbyformatname(image_form_of_jpg);
        }
    }

    /**
     * 对图片裁剪,并把裁剪完蛋新图片保存 。
     * @param srcpath 源图片路径
     * @param subpath 剪切图片存放路径
     * @throws ioexception
     */
    public void cut(string srcpath, string subpath) throws ioexception {
        fileinputstream is = null;
        imageinputstream iis = null;
        try {
            // 读取图片文件
            is = new fileinputstream(srcpath);

            // 获取文件的后缀名
            string postfix = getpostfix(srcpath);
            system.out.println("图片格式为:" + postfix);
            /*
             * 返回包含所有当前已注册 imagereader 的 iterator,这些 imagereader 声称能够解码指定格式。
             * 参数:formatname - 包含非正式格式名称 .(例如 "jpeg" 或 "tiff")等 。
             */
            iterator<imagereader> it = getimagereadersbyformatname(postfix);

            imagereader reader = it.next();
            // 获取图片流
            iis = imageio.createimageinputstream(is);

            /*
             * <p>iis:读取源.true:只向前搜索 </p>.将它标记为 ‘只向前搜索'。
             * 此设置意味着包含在输入源中的图像将只按顺序读取,可能允许 reader 避免缓存包含与以前已经读取的图像关联的数据的那些输入部分。
             */
            reader.setinput(iis, true);

            /*
             * <p>描述如何对流进行解码的类<p>.用于指定如何在输入时从 java image i/o
             * 框架的上下文中的流转换一幅图像或一组图像。用于特定图像格式的插件 将从其 imagereader 实现的
             * getdefaultreadparam 方法中返回 imagereadparam 的实例。
             */
            imagereadparam param = reader.getdefaultreadparam();

            /*
             * 图片裁剪区域。rectangle 指定了坐标空间中的一个区域,通过 rectangle 对象
             * 的左上顶点的坐标(x,y)、宽度和高度可以定义这个区域。
             */
            rectangle rect = new rectangle(x, y, width, height);

            // 提供一个 bufferedimage,将其用作解码像素数据的目标。
            param.setsourceregion(rect);
            /*
             * 使用所提供的 imagereadparam 读取通过索引 imageindex 指定的对象,并将 它作为一个完整的
             * bufferedimage 返回。
             */
            bufferedimage bi = reader.read(0, param);

            // 保存新图片
            imageio.write(bi, postfix, new file(subpath + "_" + new date().gettime() + "." + postfix));
        } finally {
            if (is != null)
                is.close();
            if (iis != null)
                iis.close();
        }

    }

    /**
     * 获取inputfilepath的后缀名,如:"e:/test.pptx"的后缀名为:"pptx"<br>
     *
     * @param inputfilepath
     * @return
     */
    public string getpostfix(string inputfilepath) {
        return inputfilepath.substring(inputfilepath.lastindexof(".") + 1);
    }

    public int getheight() {
        return height;
    }

    public void setheight(int height) {
        this.height = height;
    }

    public string getsrcpath() {
        return srcpath;
    }

    public void setsrcpath(string srcpath) {
        this.srcpath = srcpath;
    }

    public string getsubpath() {
        return subpath;
    }

    public void setsubpath(string subpath) {
        this.subpath = subpath;
    }

    public int getwidth() {
        return width;
    }

    public void setwidth(int width) {
        this.width = width;
    }

    public int getx() {
        return x;
    }

    public void setx(int x) {
        this.x = x;
    }

    public int gety() {
        return y;
    }

    public void sety(int y) {
        this.y = y;
    }

}

《java截取图片示例.doc》

下载本文的Word格式文档,以方便收藏与打印。