找回密码
 开放注册

QQ登录

只需一步,快速开始

微信登录

微信扫码,快速开始

搜索
查看: 852|回复: 1

java 切割图片

[复制链接]

482

主题

303

回帖

1486

牛毛

二级牛人

学习  !!!

积分
1486
QQ
发表于 2009-9-2 16:21:38 | 显示全部楼层 |阅读模式 来自 河北省沧州市
import java.io.*;
import java.awt.*;
import java.awt.image.*;
import java.awt.Graphics;
import javax.imageio.ImageIO;
public class ImageCut {
    /** *//** */
    /** *//**
     * 图像切割(改)
     *
     * @param srcImageFile
     *            源图像地址
     * @param x
     *            目标切片起点x坐标
     * @param y
     *            目标切片起点y坐标
     * @param destWidth
     *            目标切片宽度
     * @param destHeight
     *            目标切片高度
     */
    public static void abscut(String srcImageFile, int x, int y, int destWidth,
            int destHeight) {
        try {
            Image img;
            ImageFilter cropFilter;
            // 读取源图像
            BufferedImage bi = ImageIO.read(new File(srcImageFile));
            int srcWidth = bi.getWidth(); // 源图宽度
            int srcHeight = bi.getHeight(); // 源图高度
            if (srcWidth >= destWidth && srcHeight >= destHeight) {
                Image image = bi.getScaledInstance(srcWidth, srcHeight,
                        Image.SCALE_DEFAULT);
                // 改进的想法:是否可用多线程加快切割速度
                // 四个参数分别为图像起点坐标和宽高
                // 即: CropImageFilter(int x,int y,int width,int height)
                cropFilter = new CropImageFilter(x, y, destWidth, destHeight);
                img = Toolkit.getDefaultToolkit().createImage(
                        new FilteredImageSource(image.getSource(), cropFilter));
                BufferedImage tag = new BufferedImage(destWidth, destHeight,
                        BufferedImage.TYPE_INT_RGB);
                Graphics g = tag.getGraphics();
                g.drawImage(img, 0, 0, null); // 绘制缩小后的图
                g.dispose();
                // 输出为文件
                ImageIO.write(tag, "JPEG", new File(srcImageFile));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    /** *//** */
    /** *//**
     * @param args
     */
    public static void main(String[] args) {
        // abscut("upload\\200805151335353535.jpg", 10, 10, 100, 140);
//调用 abscut 方法 传值 把图片源地址 传过去 还有 xy为中心 切割成大小 值都传过去
//由于 abscut 是静态方法 所以可以直接调用
// 下边的方法是 把castle.jpg 切割为  宽 400 高 300 的图片
        abscut("D:\\castle.jpg", 10, 11, 400, 300);
    }
}

0

主题

8

回帖

8

牛毛

初生牛犊

积分
8
发表于 2009-9-2 16:31:46 | 显示全部楼层 来自 山东省德州市
您需要登录后才可以回帖 登录 | 开放注册

本版积分规则

帮助|Archiver|小黑屋|通信管理局专项备案号:[2008]238号|NB5社区 ( 皖ICP备08004151号;皖公网安备34010402700514号 )

GMT+8, 2025-4-29 03:26 , Processed in 0.153464 second(s), 41 queries .

Powered by Discuz! X3.5

快速回复 返回顶部 返回列表