当前位置:首页 > 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
分享给朋友:

相关文章

css3手工制作图片

css3手工制作图片

使用CSS3手工制作图片 CSS3可以通过各种属性如box-shadow、border-radius、gradient等来手工绘制简单的图形或图片效果。以下是几种常见的方法: 绘制圆形 通过bord…

java如何编译

java如何编译

编译Java程序的基本步骤 安装JDK(Java Development Kit)并配置环境变量。确保javac和java命令可在命令行中运行。JDK是编译和运行Java程序的必备工具。 创建Jav…

如何运行java文件

如何运行java文件

运行Java文件的方法 确保已安装Java Development Kit (JDK),可通过命令行输入java -version和javac -version验证安装。 编写Java代码并保存为.…

java如何输入数据

java如何输入数据

输入数据的方法 在Java中,输入数据可以通过多种方式实现,具体取决于输入来源(如控制台、文件、网络等)。以下是几种常见的方法: 使用Scanner类从控制台输入 Scanner类是Java中最常用…

java如何配置环境变量

java如何配置环境变量

配置Java环境变量的方法 下载并安装JDK 从Oracle官网或OpenJDK下载适合操作系统的JDK安装包。运行安装程序并按照提示完成安装,记下JDK的安装路径(例如C:\Program File…

vue图片实现旋转

vue图片实现旋转

使用 CSS transform 实现图片旋转 在 Vue 中可以通过 CSS 的 transform 属性实现图片旋转效果。创建一个数据属性控制旋转角度,通过绑定样式动态更新。 <templ…