图片旋转

根据图片不同角度,进行旋转图片。

 

/**
 * 图片旋转
 * image 图片流对应图片对象
 * degree 旋转角度
 * format 图片名称
 */
public static ByteArrayOutputStream rotateImg(BufferedImage image, int degree,
                                              String format,Color bgcolor) throws IOException {
    int iw = image.getWidth();// 原始图象的宽度
    int ih = image.getHeight();// 原始图象的高度
    int w = 0;
    int h = 0;
    int x = 0;
    int y = 0;
    degree = degree % 360;
    if (degree < 0)
        degree = 360 + degree;// 将角度转换到0-360度之间
    double ang = Math.toRadians(degree);// 将角度转为弧度

    //确定旋转后的图象的高度和宽度
    if (degree == 180 || degree == 0 || degree == 360) {
        w = iw;
        h = ih;
    } else if (degree == 90 || degree == 270) {
        w = ih;
        h = iw;
    } else {
        int d = iw + ih;
        w = (int) (d * Math.abs(Math.cos(ang)));
        h = (int) (d * Math.abs(Math.sin(ang)));
    }

    x = (w / 2) - (iw / 2);// 确定原点坐标
    y = (h / 2) - (ih / 2);
    BufferedImage rotatedImage = new BufferedImage(w, h, image.getType());
    Graphics2D gs = (Graphics2D) rotatedImage.getGraphics();
    if (bgcolor == null) {
        rotatedImage = gs.getDeviceConfiguration().createCompatibleImage(w,
                h, Transparency.OPAQUE);
    } else {
        gs.setColor(bgcolor);
        gs.fillRect(0, 0, w, h);// 以给定颜色绘制旋转后图片的背景
    }

    AffineTransform at = new AffineTransform();
    at.rotate(ang, w / 2.0, h / 2.0);// 旋转图象
    at.translate(x, y);
    AffineTransformOp op = new AffineTransformOp(at,
            AffineTransformOp.TYPE_BICUBIC);
    op.filter(image, rotatedImage);
    image = rotatedImage;

    ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
    ImageOutputStream iamgeOut = ImageIO.createImageOutputStream(byteOut);

    ImageIO.write(image, format, iamgeOut);
    return byteOut;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值