zoukankan      html  css  js  c++  java
  • java图片基本操作-缩放,旋转,镜像,拼接

    /**
         * 缩放
         */
        public static void zoomByScale(BufferedImage bufImage, double scale) throws IOException {
            //获取缩放后的长和宽
            int _width = (int) (scale * bufImage.getWidth());
            int _height = (int) (scale * bufImage.getHeight());
            //获取缩放后的Image对象
            Image _img = bufImage.getScaledInstance(_width, _height, Image.SCALE_DEFAULT);
            //新建一个和Image对象相同大小的画布
            BufferedImage image = new BufferedImage(_width, _height, BufferedImage.TYPE_INT_RGB);
            //获取画笔
            Graphics2D graphics = image.createGraphics();
            //将Image对象画在画布上,最后一个参数,ImageObserver:接收有关 Image 信息通知的异步更新接口,没用到直接传空
            graphics.drawImage(_img, 0, 0, null);
            //释放资源
            graphics.dispose();
            //使用ImageIO的方法进行输出,记得关闭资源
            OutputStream out = new FileOutputStream("/Users/sunxianyan/Downloads/缩放.jpg");
            ImageIO.write(image, "jpeg", out);
            out.close();
        }
    
        /**
         * 旋转
         */
        public static void rotate(BufferedImage bufImage, int degree) throws IOException {
            int w = bufImage.getWidth();// 得到图片宽度。
            int h = bufImage.getHeight();// 得到图片高度。
    
            int swidth = 0; //旋转后的宽度
            int sheight = 0;//旋转后的高度
            int x;//原点横坐标
            int y;//原点纵坐标
    
            degree = degree %360;
            if (degree<0){
                degree = 360+degree;
            }
            double theta = Math.toRadians(degree);
            if (degree == 180|| degree ==0||degree==360){
                sheight = bufImage.getWidth();
                swidth =bufImage.getHeight();
            } else if (degree == 90 || degree == 270) {
                sheight = bufImage.getWidth();
                swidth = bufImage.getHeight();
            } else {
                swidth = (int) (Math.sqrt(w * w + h * h));
                sheight = (int) (Math.sqrt(w * w + h * h));
            }
            x = (swidth / 2) - (w / 2);// 确定原点坐标
            y = (sheight / 2) - (h / 2);
            BufferedImage spinImage = new BufferedImage(swidth, sheight,bufImage.getType());
            // 设置图片背景颜色
            Graphics2D gs = (Graphics2D) spinImage.getGraphics();
            gs.setColor(Color.white);
            gs.fillRect(0, 0, swidth, sheight);// 以给定颜色绘制旋转后图片的背景
    
            AffineTransform at = new AffineTransform();
            at.rotate(theta, swidth / 2, sheight / 2);// 旋转图象
            at.translate(x, y);
            AffineTransformOp op = new AffineTransformOp(at,
                    AffineTransformOp.TYPE_BICUBIC);
            spinImage = op.filter(bufImage, spinImage);
            ImageIO.write(spinImage,"jpeg", new File("/Users/sunxianyan/Downloads/旋转.jpg"));
        }
    
        /**
         * 裁剪
         */
        public static void clip(BufferedImage bufImage) throws IOException {
            ImageIO.write(bufImage.getSubimage(0, 0, 100, 100), "JPEG", new File("/Users/sunxianyan/Downloads/裁剪.jpg"));
        }
    
        /**
         * 镜像
         */
        public static void mirror(BufferedImage bufImage) throws IOException {
    
            // 获取图片的宽高
            final int width = bufImage.getWidth();
            final int height = bufImage.getHeight();
    
            // 读取出图片的所有像素
            int[] rgbs = bufImage.getRGB(0, 0, width, height, null, 0, width);
    
            // 对图片的像素矩阵进行水平镜像
            for (int row = 0; row < height; row++) {
                for (int col = 0; col < width / 2; col++) {
                    int temp = rgbs[row * width + col];
                    rgbs[row * width + col] = rgbs[row * width + (width - 1 - col)];
                    rgbs[row * width + (width - 1 - col)] = temp;
                }
            }
    
            // 把水平镜像后的像素矩阵设置回 bufImage
            bufImage.setRGB(0, 0, width, height, rgbs, 0, width);
            ImageIO.write(bufImage, "JPEG", new File("/Users/sunxianyan/Downloads/镜像.jpg"));
        }
    
        /**
         * 拼接
         */
        public static void add() throws IOException {
            String fileUrl = "https://static.cdn.longmaosoft.com/00039447dd4fa068e1835148c3d5431e.png";
            String filepath = "/Users/sunxianyan/Downloads/223233fmbmgbxrmfwmi3mw.jpg";
    
            BufferedImage bufImage = ImageIO.read(new URL(fileUrl));
            BufferedImage addImage = ImageIO.read(new File(filepath));
    
            Graphics2D g2d = (Graphics2D) bufImage.getGraphics().create();
    
            // 绘制图片(如果宽高传的不是图片原本的宽高, 则图片将会适当缩放绘制)
            g2d.drawImage(addImage, 50, 50, addImage.getWidth(), addImage.getHeight(),null);
    
            g2d.dispose();
    
            ImageIO.write(bufImage,"jpeg", new File("/Users/sunxianyan/Downloads/拼接.jpg"));
        }
  • 相关阅读:
    链表操作
    建立简单的链表
    scanf()函数用法小结
    快速求某年某月是第几天(未整理)
    合并两个有序数组(未整理)
    如何配置JAVA的环境变量、Tomcat环境变量
    【动态规划】流水作业调度问题与Johnson法则
    分治法(二)
    分治法(一)
    HTML5入门十一---Canvas画布实现画图(二)
  • 原文地址:https://www.cnblogs.com/yangyuxiaozi/p/10599129.html
Copyright © 2011-2022 走看看