记录关于java8 将图片长宽保持比例进行改变

需求: 将图片保持长宽比的同时转为指定边长的正方形
picFile 为原始图片文件 maxWidth 为正方形边长,如果需要变为指定长宽的长方形,则需要加入高,最后返回新图片的字节数组

// 设置图片最大宽度
    private static byte[] setPicWidth(File picFile, int maxWidth)throws Exception{
        // 1.读取原始图片
        BufferedImage  oriImg = ImageIO.read(picFile);
        // 2. 检测宽度
        int oriImgWidth = oriImg.getWidth();
        int oriImgHeight = oriImg.getHeight();

        // 3. 调整缩放后的长宽
        // 设置新的长宽
        int newWidth,newHeight;

        if (oriImgWidth > oriImgHeight){
            newWidth = maxWidth;
            newHeight = (int) Math.round((double) oriImgHeight / oriImgWidth * maxWidth);
        }else{
            newWidth = (int) Math.round((double) oriImgWidth / oriImgHeight * maxWidth);
            newHeight = maxWidth;
        }

        // 3. 创建新图片
        // 创建新图片
        BufferedImage resizedImage = new BufferedImage(maxWidth, maxWidth, BufferedImage.TYPE_INT_ARGB);
        Graphics2D g = resizedImage.createGraphics();
        g.setColor(new Color(0, 0, 0, 0));  // 设置透明背景色
        g.fillRect(0, 0, maxWidth, maxWidth);  // 填充透明背景色
        g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC);

        // 计算将原始图片绘制在新图片上的位置
        int x = (maxWidth - newWidth) / 2;
        int y = (maxWidth - newHeight) / 2;

        // 绘制原始图片到新图片上
        g.drawImage(oriImg, x, y, newWidth, newHeight, null);
        g.dispose();

        //4. 返回字节数组
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        ImageIO.write(resizedImage, "png", baos);
        byte[] bytes = baos.toByteArray();
        baos.close();
        return bytes;

    }


什么时候会需要这种功能呢?那当然是在通过域向word中插入图片的时候了记录关于java8 将图片长宽保持比例进行改变_第1张图片

 

你可能感兴趣的:(java,开发语言)