图像缩放功能

在处理图片资源时,经常需要对图片进行缩放或生成缩略图,这里介绍2种方式实现:

1)im4java

im4java是ImageMagick的SDK,ImageMagick是一款专业的图片处理工具,可以进行各种图像处理,例如获取图片信息、图像缩放、图像旋转等等

使用时需要先在本地安装工具包,工具包官网地址:https://imagemagick.org/index.php

注意:安装时请安装7.1及以上的版本,否则亲测会有严重的性能问题,我这里安装的ImageMagick-7.1.0-Q16-HDRI

im4java官方文档地址:https://im4java.sourceforge.net/docs/dev-guide.html

先引入依赖:

<dependency>
  <groupId>org.im4java</groupId>
  <artifactId>im4java</artifactId>
  <version>1.4.0</version>
</dependency>

 使用im4java生成缩略图示例代码如下:

import org.im4java.core.ConvertCmd;
import org.im4java.core.IM4JavaException;
import org.im4java.core.IMOperation;
import org.im4java.core.ImageCommand;

import java.io.IOException;

public class Im4JavaUtils {
    /**
     * 缩放图片,加锁的原因是避免起多个子进程,CPU占用高,导致系统崩溃
     *
     * @param imageMagickPath 工具路径
     * @param srcImagePath    原图片地址
     * @param newImagePath    新图片地址
     * @param width           缩放后的宽度
     * @param height          缩放后的高度
     */
    public static synchronized void zoomImage(String imageMagickPath, String srcImagePath, String newImagePath, Integer width, Integer height)
    throws IOException, InterruptedException, IM4JavaException {
        ImageCommand cmd = new ConvertCmd();
        cmd.setSearchPath(imageMagickPath);
        IMOperation operation = new IMOperation();
        operation.addImage(srcImagePath + "[0]");
        if (width != null && height != null) {
            operation.resize(width, height);
        }
        operation.addImage(newImagePath);
        cmd.run(operation);
    }
}

注意:

  1. operation.addImage(srcImagePath + "[0]")原图片地址后加上[0]可以处理动态图片,例如GIF,也可以处理视频文件的第一帧图片,普通图片格式加上也不影响处理结果
  2. 使用时请对并发度进行控制,否则同时拉起多个子进程进行图像操作,可能会使系统CPU飙高,导致崩溃

2)Thumbnailator

Thumbnailator是一款优秀的图片处理工具包,使用非常简单,几行代码即可完成图片的处理

官方文档地址:GitHub - coobird/thumbnailator: Thumbnailator - a thumbnail generation library for Java

先引入依赖:

<dependency>
  <groupId>net.coobird</groupId>
  <artifactId>thumbnailator</artifactId>
  <version>0.4.20</version>
</dependency>

 使用Thumbnailator生成缩略图示例代码如下:

import net.coobird.thumbnailator.Thumbnails;

import java.io.IOException;

public class ThumbnailatorUtils {
    /**
     * 指定图片大小进行缩放
     *
     * @param srcImagePath 原始图片路径
     * @param newImagePath 缩放后的图片路径
     * @param width        缩放后的宽度
     * @param height       缩放后的高度
     * @param quality      图片质量,0-1,越高质量越好
     */
    public static void zoomImageBySize(String srcImagePath, String newImagePath, int width, int height, float quality) throws IOException {
        Thumbnails.of(srcImagePath).size(width, height).outputQuality(1f).toFile(newImagePath);
    }

    /**
     * 指定缩放比率进行缩放
     *
     * @param srcImagePath 原始图片路径
     * @param newImagePath 缩放后的图片路径
     * @param scaleRatio   缩放比率
     * @param quality      图片质量,0-1,越高质量越好
     */
    public static void zoomImageByScale(String srcImagePath, String newImagePath, double scaleRatio, float quality) throws IOException {
        Thumbnails.of(srcImagePath).scale(scaleRatio).outputQuality(1f).toFile(newImagePath);
    }
}

可以指定图片大小或者指定缩放比率进行缩放,还有些其他参数具体可参考官网文档

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

lm_ylj

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

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

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

打赏作者

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

抵扣说明:

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

余额充值