程序员图片处理利器:分享两款图片处理工具,让图片处理后顾无忧

平台奖励创作,可能会升级VIP文章,可以移步我的公众号:【编程朝花夕拾】,且可获取首发内容。

01 引言

在日常开发中,尤其在电商领域,图片的处理犹如家常便饭。前端有自己的一套框架处理,如canvas等工具。只要前端能做就交给前端团队处理了。

但是,总是前端团队处理不了的情况。如直接处理服务器的图片信息,对接第三方的图片信息等。这些都不需要经过前端的操作,就需要我们Java后端处理了。

你还在徒手撸Graphics2D 这玩意么,虽然不难,但是参数太多,用起来的比较繁琐。下来介绍两款不同领域的图片处理工具。

ThumbnailatorImageCombiner

02 图片处理之王

Thumbnailator是一款基于 Java 的轻量级开源图像处理库,以简洁 API 和高效性能著称。主要的亮点包括:

  • 链式调用语法直观,支持缩放、旋转、裁剪、水印等操作;
  • 自动保持图像质量,避免失真;
  • 零第三方依赖,集成简单;
  • 支持批量处理,性能优异

Github地址:

https://github.com/coobird/thumbnailator

2.1 Maven依赖的引入

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

2.2 案例代码

@Test
void test01() throws IOException {
    String path = "src/main/resources/bgimages/a.jpg";
    String watermark = "src/main/resources/bgimages/watermark.png";

    // 修改图片大小
    Thumbnails.of(path)
            // 图片大小
            .size(600, 600)
            // 缩放比例
//                .scale(0.5)
            // 旋转
            .rotate(45)
            // 水印
            .watermark(Positions.BOTTOM_LEFT, ImageIO.read(new File(watermark)), 0.6f)
            // 裁剪
            .crop(Positions.BOTTOM_CENTER)
            .toFile(new File("src/main/resources/bgimages/aa.jpg"));

}

通过 Thumbnails.of(path)获取到图片的构造对象,可以设置处理当前图片的元素,如图片的大小、缩放的比例、旋转的角度、添加水印以及裁剪的位置等。最终保存到指定的位置。

2.3 案例展示结果

图片修改大小,旋转45度,加水印、裁剪中间位置的结果如下:

除此之外,还可以进行格式转化、以及批量处理等。感兴趣的赶紧去探索吧!

03 图片合成之王

ImageCombiner 是一个专门用于Java服务端图片合成的工具,没有很复杂的功能,简单实用,从实际业务场景出发,提供简单的接口,几行代码即可实现图片拼合(当然用于合成水印也可以),素材上支持图片、文本、矩形三种,支持定位、缩放、旋转、圆角、透明度、颜色、字体、字号、删除线、居中绘制、文本自动换行等特性,足够覆盖图片合成的日常需求。

ImageCombiner 同样来自国内顶级社区dromara

Gitee地址:

https://gitee.com/dromara/image-combiner

3.1 Maven依赖

<dependency>
    <groupId>com.freewayso</groupId>
    <artifactId>image-combiner</artifactId>
    <version>2.6.9</version>
</dependency>

3.2 案例代码

@Test
void test02() throws Exception {
    String path = "src/main/resources/bgimages/d.jpg";
    String watermark = "src/main/resources/bgimages/watermark.png";
    BufferedImage read = ImageIO.read(new File(path));
    ImageCombiner imageCombiner = new ImageCombiner(read, OutputFormat.JPG);

    //针对背景和整图的设置
    imageCombiner.setBackgroundBlur(1);     //设置背景高斯模糊(毛玻璃效果)
    imageCombiner.setQuality(.8f); //设置图片保存质量(0.0~1.0,Java9以下仅jpg格式有效)

    //加文本元素
    imageCombiner.addTextElement("编程朝花夕拾", 50, 10, 10).setColor(Color.blue).setCenter(true);
    //添加水印
    imageCombiner.addImageElement(ImageIO.read(new File(watermark)), 0, 0);
    imageCombiner.combine();

    // InputStream combinedImageStream = imageCombiner.getCombinedImageStream();
    imageCombiner.save("src/main/resources/bgimages/dd.jpg");
}

通过ImageCombiner 指定背景图,然后就可以在背景图上尽情加入各种元素。案例中设置背景的模糊度、以及质量,然后增加文本,并制定位置居中展示。增加了水印图片,最后输出图片。

3.3 案例结果展示

增加防盗水印以及「编程朝花夕拾」的文案。

04 小结

ThumbnailatorImageCombiner应用的场景完全不同。前者主要处理当前图片,可以对当期那图片旋转、裁剪等操作。而后者将图片作为背景如除了修改图片的模糊度和质量,其他的操作都是在背景图上增加元素。

这两款的够用了么?不够的话,就使用JDK自带的javax.imageio.ImageIO或者apche的commons-imaging 自己封装吧,下一个大牛就是你。

基于html+python+Apriori 算法、SVD(奇异值分解)的电影推荐算法+源码+项目文档+算法解析+数据集,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用,详情见md文档 电影推荐算法:Apriori 算法、SVD(奇异值分解)推荐算法 电影、用户可视化 电影、用户管理 数据统计 SVD 推荐 根据电影打分进行推荐 使用 svd 模型计算用户对未评分的电影打分,返回前 n 个打分最高的电影作为推荐结果 n = 30 for now 使用相似电影进行推荐 根据用户最喜欢的前 K 部电影,分别计算这 K 部电影的相似电影 n 部,返回 K*n 部电影进行推荐 K = 10 and n = 5 for now 根据相似用户进行推荐 获取相似用户 K 个,分别取这 K 个用户的最喜爱电影 n 部,返回 K*n 部电影进行推荐 K = 10 and n = 5 for now Redis 使用 Redis 做页面访问次数统计 缓存相似电影 在使用相似电影推荐的方式时,每次请求大概需要 6.6s(需要遍历计算与所有电影的相似度)。 将相似电影存储至 redis 中(仅存储 movie_id,拿到 movie_id 后还是从 mysql 中获取电影详细信息), 时间缩短至:93ms。 十部电影,每部存 top 5 similar movie 登录了 1-6 user并使用了推荐系统,redis 中新增了 50 部电影的 similar movie,也就是说,系统只为 6 为用户计算了共 60 部电影的相似度,其中就有10 部重复电影。 热点电影重复度还是比较高的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

智_永无止境

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

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

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

打赏作者

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

抵扣说明:

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

余额充值