java旋转图片

93 阅读1分钟

旋转图片 0 90 180 -90

public static void convertImage(String srcPath,String outPath,int angle) {
    BufferedImage originalImage = ImageIO.read(new File(srcPath));
    //矢量化
    int xOffNum=0;
    int yOffNum=0;
    int height = 0;
    int width = 0;
    //构造数据
    List<PixelMessage> original=new ArrayList<>();
    for (int x = originalImage.getMinX(); x < originalImage.getWidth(); x++) {
        for (int y = originalImage.getMinY(); y < originalImage.getHeight(); y++) {
            int rgb = originalImage.getRGB(x, y);
            PixelMessage pixelMessage=new PixelMessage();
            pixelMessage.setX(x);
            pixelMessage.setY(originalImage.getHeight()-1-y);
            pixelMessage.setValue(rgb);
            original.add(pixelMessage);
        }
    }
    int cosValue=0;
    int sinValue=0;
    if(angle==0){
        cosValue=1;
        sinValue=0;
        height=originalImage.getHeight();
        width=originalImage.getWidth();
    }else if(angle==90){
        cosValue=0;
        sinValue=1;
        xOffNum=0;
        yOffNum=originalImage.getWidth()-1;
        height=originalImage.getWidth();
        width=originalImage.getHeight();
    }else if(angle==-90){
        cosValue=0;
        sinValue=-1;
        xOffNum=originalImage.getHeight()-1;
        yOffNum=0;
        height=originalImage.getWidth();
        width=originalImage.getHeight();
    }else{
        cosValue=-1;
        sinValue=0;
        xOffNum=originalImage.getWidth()-1;
        yOffNum=originalImage.getHeight()-1;
        height=originalImage.getHeight();
        width=originalImage.getWidth();
    }
    BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
    for(PixelMessage pixelMessage:original){
        int x0=pixelMessage.getX()*cosValue+pixelMessage.getY()*sinValue+xOffNum;
        int y0=pixelMessage.getY()*cosValue-pixelMessage.getX()*sinValue+yOffNum;
        bufferedImage.setRGB(x0,height-1-y0,pixelMessage.getValue());
    }
    ImageIO.write(bufferedImage, "jpg", new File(outPath));
}