当前位置:首页 > Java

java 如何缩小图片

2026-03-25 07:40:58Java

缩小图片的方法

在Java中缩小图片可以通过多种方式实现,以下介绍几种常见的方法:

使用java.awt.ImageGraphics2D

通过Image.getScaledInstance()Graphics2D的绘制方法可以实现图片缩放:

java 如何缩小图片

import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;

public class ImageResizer {
    public static void resize(String inputImagePath, String outputImagePath, int scaledWidth, int scaledHeight) throws Exception {
        BufferedImage inputImage = ImageIO.read(new File(inputImagePath));
        BufferedImage outputImage = new BufferedImage(scaledWidth, scaledHeight, inputImage.getType());

        Graphics2D g2d = outputImage.createGraphics();
        g2d.drawImage(inputImage, 0, 0, scaledWidth, scaledHeight, null);
        g2d.dispose();

        ImageIO.write(outputImage, "jpg", new File(outputImagePath));
    }
}

使用Thumbnailator

Thumbnailator是一个专门用于缩略图生成的Java库,使用简单:

import net.coobird.thumbnailator.Thumbnails;

public class ThumbnailExample {
    public static void resize(String inputPath, String outputPath, int width, int height) throws Exception {
        Thumbnails.of(inputPath)
            .size(width, height)
            .toFile(outputPath);
    }
}

使用ImageIO和插值算法

通过设置渲染提示可以控制缩放质量:

java 如何缩小图片

import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;

public class HighQualityResizer {
    public static void resize(String inputPath, String outputPath, int width, int height) throws Exception {
        BufferedImage originalImage = ImageIO.read(new File(inputPath));
        BufferedImage resizedImage = new BufferedImage(width, height, originalImage.getType());

        Graphics2D g = resizedImage.createGraphics();
        g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
        g.drawImage(originalImage, 0, 0, width, height, null);
        g.dispose();

        ImageIO.write(resizedImage, "jpg", new File(outputPath));
    }
}

保持宽高比的缩放

如果需要保持原始图片的宽高比,可以计算适当的尺寸:

public static void resizeWithAspectRatio(String inputPath, String outputPath, int maxWidth, int maxHeight) throws Exception {
    BufferedImage originalImage = ImageIO.read(new File(inputPath));
    int originalWidth = originalImage.getWidth();
    int originalHeight = originalImage.getHeight();

    float ratio = Math.min((float)maxWidth/originalWidth, (float)maxHeight/originalHeight);
    int newWidth = (int)(originalWidth * ratio);
    int newHeight = (int)(originalHeight * ratio);

    BufferedImage resizedImage = new BufferedImage(newWidth, newHeight, originalImage.getType());
    Graphics2D g = resizedImage.createGraphics();
    g.drawImage(originalImage, 0, 0, newWidth, newHeight, null);
    g.dispose();

    ImageIO.write(resizedImage, "jpg", new File(outputPath));
}

性能考虑

对于大批量图片处理,建议:

  • 使用缓冲技术减少I/O操作
  • 考虑多线程处理
  • 选择合适的插值算法(双线性或双三次通常质量较好)

格式支持

上述方法支持常见图片格式如JPG、PNG等,具体取决于ImageIO注册的插件。如需更多格式支持,可添加额外依赖如TwelveMonkeys ImageIO

标签: 图片java
分享给朋友:

相关文章

java如何编程

java如何编程

Java编程基础 Java是一种面向对象的编程语言,广泛应用于企业级开发、移动应用(Android)等领域。以下是Java编程的核心步骤和示例。 环境搭建 安装JDK 从Oracle官网下载适合…

java如何连接数据库

java如何连接数据库

Java连接数据库的方法 Java连接数据库通常使用JDBC(Java Database Connectivity)技术,以下是具体步骤和示例代码。 加载数据库驱动 在连接数据库之前,需要加载对应的…

react如何引用图片

react如何引用图片

在React中引用图片的方法 使用import直接引入图片 在React组件中,可以通过import语句将图片作为模块引入。这种方式适合在组件内部使用图片,Webpack会处理图片的路径和打包。 i…

java如何打印数组

java如何打印数组

打印数组的方法 在Java中,打印数组有多种方式,以下是几种常见的方法: 使用Arrays.toString()方法 这种方法适用于一维数组,可以快速将数组转换为字符串形式输出: int[] a…

java面试官如何面试别人

java面试官如何面试别人

考察基础知识 从Java核心概念入手,包括面向对象特性(封装、继承、多态)、集合框架(ArrayList vs LinkedList、HashMap实现原理)、异常处理机制、多线程(线程池、锁机制)等…

vue实现生成图片

vue实现生成图片

Vue 实现生成图片的方法 使用 html2canvas 库 html2canvas 是一个流行的库,可以将 DOM 元素转换为 Canvas,进而生成图片。适用于 Vue 项目。 安装 html2…