• java旋转图片


    /**
         * 旋转图片
         * @param image
         * @param degree
         * @param bgcolor
         * @return
         * @throws IOException
         */
        private InputStream rotateImg(BufferedImage image, int degree, 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.TRANSLUCENT);
            } else {
                gs.setColor(bgcolor);
                gs.fillRect(0, 0, w, h);//以给定颜色绘制旋转后图片的背景
            }
    
            AffineTransform at = new AffineTransform();
            at.rotate(ang, w / 2, h / 2);//旋转图象
            at.translate(x, y);
            AffineTransformOp op = new AffineTransformOp(at, AffineTransformOp.TYPE_BICUBIC);
            op.filter(image, rotatedImage);
            image = rotatedImage;
    
            ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
            ImageOutputStream imageOut = ImageIO.createImageOutputStream(byteOut);
            ImageIO.write(image, "png", imageOut);
            return new ByteArrayInputStream(byteOut.toByteArray());
        }
    随笔看心情
  • 相关阅读:
    一、left
    padding溢出
    一、
    Python创建、删除桌面、启动组快捷方式的例子分享
    openstack常见问题解决方法总结
    __attribute__ 详解
    __ATTRIBUTE__ 知多少?
    CentOS如何设置终端显示字符界面区域的大小
    shell使用技巧
    openstack 安全策略权限控制等api接口
  • 原文地址:https://www.cnblogs.com/stromgao/p/12091173.html
Copyright © 2020-2023  润新知