dongfang1017 发表于 2009-9-2 16:21:38

java 切割图片

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);
    }
}

wangchao123 发表于 2009-9-2 16:31:46

本帖最后由 wangchao123 于 2009-9-2 16:41 编辑

长丝土工布 无纺土工布 hdpe防水板dva防水板防渗膜双向土工格栅玻纤土工格栅
页: [1]
查看完整版本: java 切割图片