简单易用的图片缩略图处理库

哈喽,大家好,我是源小北

最近在工作中,刚好有遇到对图片进行缩放处理的功能。于是,便拿起很久以前使用过的Java原生工具类处理图片,不过在开发过程中也发现了一些问题。

在Java中,原生的处理图片缩略图,我们可以使用java.awt.Graphics2D和Image.getScaledInstance两种工具类。我们先来看看他们的使用方式。

首先是java.awt.Graphics2D

很多人可能对Graphics2D 不是很熟悉,它是Java平台提供的可以渲染二维形状、文本、图像的基础类。

下面我们来看看使用Graphics2D进行图片大小调整的一个例子。

/**
 * 图片缩放
 *
 * @param srcImagePath  图片路径
 * @param targetWidth   目标宽度
 * @return
 * @throws IOException
 */
public static BufferedImage resizeImage(String srcImagePath, int targetWidth) throws IOException {
    Image srcImage = ImageIO.read(new File(srcImagePath));
    int targetHeight = getTargetHeight(targetWidth, srcImage);
    BufferedImage resizedImage = new BufferedImage(targetWidth, targetHeight, BufferedImage.TYPE_INT_RGB);
    Graphics2D graphics2D = resizedImage.createGraphics();
    graphics2D.drawImage(srcImage, 0, 0, targetWidth, targetHeight, null);
    graphics2D.dispose();
    return resizedImage;
}

/**
 * 根据指定宽度,计算等比例高度
 *
 * @param targetWidth   目标宽度
 * @param srcImage      图片信息
 * @return
 */
private static int getTargetHeight(int targetWidth, Image srcImage) {
    int targetHeight = srcImage.getHeight(null);
    if (targetWidth < srcImage.getWidth(null)) {
        targetHeight = Math.round((float)targetHeight / ((float)srcImage.getWidth(null) / (float)targetWidth));
    }
    return targetHeight;
}

先简单的看看,我们再来看看另一工具类的实现代码例子:

Image.getScaledInstance

/**
 * 图片缩放
 *
 * @param srcImagePath  图片路径
 * @param targetWidth   目标宽度
 * @return
 * @throws IOException
 */
public static BufferedImage resizeImage2(String srcImagePath, int targetWidth) throws IOException {
    Image srcImage = ImageIO.read(new File(srcImagePath));
    int targetHeight = getTargetHeight(targetWidth, srcImage);
    Image image = srcImage.getScaledInstance(targetWidth, targetHeight, Image.SCALE_DEFAULT);
    BufferedImage bufferedImage = new BufferedImage(targetWidth, targetHeight, BufferedImage.TYPE_INT_RGB);
    bufferedImage.getGraphics().drawImage(image, 0, 0, null);
    return bufferedImage;
}

/**
 * 根据指定宽度,计算等比例高度
 *
 * @param targetWidth   目标宽度
 * @param srcImage      图片信息
 * @return
 */
private static int getTargetHeight(int targetWidth, Image srcImage) {
    int targetHeight = srcImage.getHeight(null);
    if (targetWidth < srcImage.getWidth(null)) {
        targetHeight = Math.round((float)targetHeight / ((float)srcImage.getWidth(null) / (float)targetWidth));
    }
    return targetHeight;
}

不过我们要注意,使用Image.getScaledInstance虽然相比java.awt.Graphics2D调整图片更大小简单方便,生成的图片质量也不错,但是这种方式的效率并不高。

但是指背君觉得,这两种Java的原生工具类,进行图片缩略图处理还是有很多的弊端:代码非常可读性不高,且不够简练,需要经过一番折腾才能得到最终的效果。

那么有没有其他优雅、简练且易用的方式处理图片缩略图呢?当然有啦,源小北经过一番苦寻,终于在开源界找到啦一个简单好用的开源Java工具类。

重头戏:Thumbnailator

Thumbnailator是什么呢?它是一个专门处理缩略图的Java代码库。它可以通过一个简单的步骤执行相当复杂的缩略图处理任务。

GitHub上的开源地址:https://github.com/coobird/thumbnailator

那么,到底有多件单呢?我们看看下面的例子:

假如,我们需要在一个目录中创建图像文件的JPEG缩略图,在保留原始图像的纵横比的同时,全部调整为600像素x400像素的最大尺寸,可以通过以下方式执行:

首先项目中导入对应的Java包:

<dependency>
    <groupId>net.coobird</groupId>
    <artifactId>thumbnailator</artifactId>
    <version>[0.4, 0.5)</version>
</dependency>

然后只需按下面方式编码:

Thumbnails.of(new File("path/to/directory").listFiles())
    .size(600, 400)
    .outputFormat("jpg")
    .toFiles(Rename.PREFIX_DOT_THUMBNAIL);

哈哈,你没有看错,就上面的一行代码就完成了图片缩略图的处理,是不是比Java原生的处理方式方面多了。

而且代码整体看来,简单、易读更容易使用。有了这个类库,大家处理图片缩略图可以说是轻而易举啦!

小北有话说

开源指北,立志做最好的开源分享平台,分享有趣实用的开源项目。

以上就是本次推荐的全部内容,我是源小北,感谢各位的观看。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小马也是行动派

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值