当前位置: 首页 > article >正文

【工具类】——图片缩放

在java中对于图片的处理一般都是使用Graphics2D类来实现。
Graphics2D 是 Java 2D API 的核心类,用于在 Java 平台上渲染二维形状、文本和图像。它是 Graphics 类的扩展,提供了更复杂的图形操作功能,包括几何变换、颜色管理、文本布局等。
用来实现图片的指定尺寸缩放
工具类代码
public class ImageResizer {

public static byte[] imageResizer(byte[] imageBytes, int width, int height) {
    try {
        ByteArrayInputStream bais = new ByteArrayInputStream(imageBytes);
        BufferedImage originalImage = ImageIO.read(bais);
        // 创建缩放后的图像
        BufferedImage resizedImage = new BufferedImage(width, height, originalImage.getType());
        Graphics2D graphics = resizedImage.createGraphics();

        // 改善图像质量
        graphics.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);

        // 设置透明度,保持原始图像的透明度
        graphics.setComposite(AlphaComposite.Src);

        // 绘制图像
        graphics.drawImage(originalImage, 0, 0, width, height, null);
        graphics.dispose();
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        ImageIO.write(resizedImage, "png", baos);
        return baos.toByteArray();
    } catch (Exception e) {
        return null;
    }
}

}

测试类

public static void main(String[] args) {
    // 指定原始图像文件路径和目标尺寸
    String inputImagePath = "/Users/qweasdzxc/Downloads/test0.jpeg"; // 替换为实际路径
    int targetWidth = 100; // 目标宽度
    int targetHeight = 100; // 目标高度
    // 读取原始图像文件
    try {
        File inputFile = new File(inputImagePath);
        BufferedImage originalImage = ImageIO.read(inputFile);

        // 将原始图像转换为字节数组
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        ImageIO.write(originalImage, "png", baos);
        byte[] imageBytes = baos.toByteArray();

        // 调整图像大小
        byte[] resizedImageBytes = imageResizer(imageBytes, targetWidth, targetHeight);

        // 将调整大小后的图像保存到新文件
        if (resizedImageBytes != null) {
            ByteArrayInputStream bais = new ByteArrayInputStream(resizedImageBytes);
            BufferedImage resizedImage = ImageIO.read(bais);
            ImageIO.write(resizedImage, "png", new File("/Users/qweasdzxc/Downloads/test1.jpeg")); // 替换为实际路径
            System.out.println("Image resized successfully.");
        } else {
            System.out.println("Failed to resize image.");
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

http://www.kler.cn/a/318003.html

相关文章:

  • 基于Spring Boot与Redis的令牌主动失效机制实现
  • 【机器学习】如何配置anaconda环境(无脑版)
  • #include<string>和#include<string.h>有什么区别
  • 记录使用documents4j来将word文件转化为pdf文件
  • 初探鸿蒙:从概念到实践
  • 使用electron-egg把vue项目在linux Ubuntu环境下打包并安装运行
  • 掌握Python办公自动化,轻松成为职场高效达人
  • CSS中的root的作用
  • 软件测试面试八股文(含文档)
  • 若依框架下项目,通过Nginx进行双服务部署
  • 使用k8s搭建mariadb+nginx+wordpress
  • JAVA毕业设计181—基于Java+Springboot+vue3的潮鞋交易管理系统(源代码+数据库+开题+万字论文)
  • 《华为三台交换机堆叠的详细命令行配置示例》
  • 观察者模式(发布-订阅模式)
  • Moshi: a speech-text foundation model for real time dialogue
  • 828华为云征文 | 解锁企业级邮件服务,在华为云Flexus x实例上部署Mailcow开源方案
  • ONNX模型部署利器ONNXRUNTIME框架
  • 算法-Init
  • [sniffer]分析
  • Excel 冻结多行多列
  • Python机器学习基础(NumPy、Pandas、Matplotlib)
  • 【CPP11?】结合CPP发展历史来理解CPP11
  • 代码随想录算法训练营Day14 | 226.翻转二叉树、101. 对称二叉树、104.二叉树的最大深度、111.二叉树的最小深度
  • 【MySQL内置数据库】information_schema
  • 【C++】检测TCP链接超时——时间轮组件设计
  • 自学前端的正确姿势是...