天天看點

CutImage java實作

import java.awt.image.BufferedImage;
import java.io.*;
import javax.imageio.*;
import java.awt.*;

public class CutImage {
    public boolean cutImage(File sourceImage,String saveImagePath)
    {
        try{
            // 擷取底圖
            BufferedImage source=ImageIO.read(sourceImage);
            int width=(int)(source.getWidth()*/);
            int height=(int)(source.getHeight()*/);
            // 切割成四個小圖
            for(int i=;i<=;i++) {
                for (int j = ; j <= ; j++) {
                    ImageIO.write(source.getSubimage(j * width, i * height, width, height), "JPEG", new File(saveImagePath + "\\cutImage_" + i + "" + j + ".jpg"));
                }
            }
            // 擷取小圖
            BufferedImage cutImg00 = ImageIO.read(new File("E:\\codes\\cutImage_00.jpg"));
            BufferedImage cutImg01 = ImageIO.read(new File("E:\\codes\\cutImage_01.jpg"));
            BufferedImage cutImg10 = ImageIO.read(new File("E:\\codes\\cutImage_10.jpg"));
            BufferedImage cutImg11 = ImageIO.read(new File("E:\\codes\\cutImage_11.jpg"));
            //建立一個不帶透明度的圖檔
            BufferedImage reverse10=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
            BufferedImage reverse11=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
            //像素取反
            for (int i = ; i < height; i++) {
                for (int j = ; j < width; j++) {
                    int pixel = cutImg10.getRGB(j, i);
                    reverse10.setRGB(j,i,-pixel);
                }
            }
            for (int i = ; i < height; i++) {
                for (int j = ; j < width; j++) {
                    int pixel = cutImg11.getRGB(j, i);
                    reverse11.setRGB(j,i,-pixel);
                }
            }

            // 建立Graphics2D對象,用在底圖對象上繪圖
            Graphics2D g2d = source.createGraphics();
            // 在圖形和圖像中實作混合和透明效果,alpha選擇值從0.0~1.0: 完全透明~完全不透明
            g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, (float) ));
            // 繪制 x:距離左上角的X偏移量  y:距離左上角的Y偏移量
            g2d.drawImage(cutImg00, width, height, width, height, null);
            g2d.drawImage(cutImg01, , , width, height, null);
            g2d.drawImage(reverse10, width, , width, height, null);
            g2d.drawImage(reverse11, , height, width, height, null);
            g2d.dispose();// 釋放圖形上下文使用的系統資源

            ImageIO.write(source, "JPEG", new File(saveImagePath + "\\TranformImage" + ".jpg"));
            return true;
        } catch (IOException e) {
            e.printStackTrace();
            return false;
        }
    }

    public static void main(String[] args)
    {
        CutImage imageCutdemo=new CutImage();
        if(imageCutdemo.cutImage(new File("E:\\codes\\eg.jpg"),"E:\\codes"))
        {
            System.out.println("轉換成功");
        }
        else
        {
            System.out.println("轉換失敗");
        }
    }
}