OSGL 工具库 - 图片处理的艺术

刚刚发布的 osgl 工具包 加入了一个新成员: org.osgl.util.Img, 这个工具可以让你轻松自由地处理图像数据

图像数据输入

Img 工具采用 InputStream 来获取图像数据。

开场前,我们先看看这篇博客中用到的三个图片:img1, img2 and img3:

  • img1

img1

  • img2

img2

  • img3

img3

获得原始图像输入:

博客中我们将使用下面的工厂方法来获得需要的图像数据:

private static InputStream img1() {
    URL url = ImgTest.class.getResource("/img/img1.png");
    return IO.is(url);
}

private static InputStream img2() {
    URL url = ImgTest.class.getResource("/img/img2.jpg");
    return IO.is(url);
}

private static InputStream img3() {
    return IO.is(ImgTest.class.getResource("/img/img3.png"));
}

1. 剪切

我们使用 img1 来做剪切实验,从 (30, 30)(100, 100)

Img.crop(source(img1()))
        .from(30, 30)
        .to(100, 100)
        .writeTo(new File("/tmp/img1_crop.gif"));

img1_crop

2. 缩放

Img 提供两种缩放方式:

2.1 缩放到给定的长宽:

Img.resize(source(img1()))
        .to(100, 200)
        .writeTo(new File("/tmp/img1_resize.png"));

img1_resize

2.2 按比例缩放:

Img.resize(source(img1()))
        .to(2.0f)
        .writeTo(new File("/tmp/img1_resize_x2.png"));

img1_resize_x2

按比例缩小的例子:

source(img2())
        .resize(0.5f)
        .writeTo("/tmp/img2_resize_scale.png");

img2_resize_scale

2.3 缩放到指定长宽值并保持长宽比例:

source(img1())
        .resize(100, 200)
        .keepRatio()
        .writeTo(new File("/tmp/img1_resize_keep_ratio.png"));

img1_resize_keep_ratio

3. 加水印

使用默认设置:

source(img1())
        .watermark("CONFIDENTIAL")
        .writeTo("/tmp/img1_watermark_def.png");

img1_watermark_def

也可以配置水印的位置颜色等参数:

source(img1())
        .watermark("CONFIDENTIAL")
        .offsetY(-200)
        .color(Color.DARK_GRAY)
        .writeTo("/tmp/img1_watermark.png");

img1_watermark

4. 翻转

Img 支持水平或者垂直翻转:

source(img1())
        .flip()
        .writeTo("/tmp/img1_flip_h.png");

img1_flip_h

source(img1())
        .flipVertial()
        .writeTo("/tmp/img1_flip_v.png");

img1_flip_v

5. 图像模糊:

使用不同模糊级别的效果:

source(img1()).blur().writeTo("/tmp/img1_blur_default.png");

img1_blur_default

source(img2()).blur(10).writeTo("/tmp/img2_blur_10.jpg");

img2_blur_10

source(img2()).blur(2).writeTo("/tmp/img2_blur_2.jpg");

img2_blur_2

source(img3()).blur(5).writeTo("/tmp/img3_blur_5.jpg");

img2_blur_10

6. 图像拼接

source(img2())
        .appendWith(source(img3()))
        .writeTo("/tmp/img_concat_2_3.png");

img_concat_2_3

source(img2())
        .appendTo(source(img3()))
        .writeTo("/tmp/img_concat_3_2.png");

img_concat_3_2

垂直拼接并不做比例校正:

source(img2()).appendWith(source(img1()))
        .noScaleFix()
        .vertically()
        .writeTo("/tmp/img_concat_2_1.png");

img_concat_2_1

拼接三张图片:

concat(source(img1()), source(img2()))
        .appendWith(source(img3()))
        .vertically()
        .writeTo("/tmp/img_concat_123.png");

img_concat_123

另一种拼接方式:

concat(source(img2()))
        .with(source(img3()))
        .vertically()
        .appendWith(source(img1()))
        .writeTo("/tmp/img_concat_231.png");

img_concat_231

7. 使用管道来对图像进行多种加工:

source(img1())
        .resize(300, 400)
        .pipeline()
        .crop(50, 50, 250, 350)
        .pipeline()
        .watermark("HELLO OSGL")
        .writeTo("/tmp/img1_pipeline.png");

img1_pipeline

总结

本篇博客我们演示了如何使用 OSGL Img 工具来处理图像数据,包括:

  1. 剪切
  2. 缩放
  3. 水印
  4. 翻转
  5. 模糊
  6. 拼接
  7. 以及使用管道来进行多种操作

如果需要使用 OSGL Img 工具,可以在你的 pom.xml 文件中加入一下依赖:

<dependency>
  <groupId>org.osgl</groupId>
  <artifactId>osgl-tool</artifactId>
  <version>${osgl-tool.version}</version>
</dependency>

当前 osgl-tool.version1.8.1.

特别提示

使用 act-1.8.3 或者 act-1.8.4 的不需要单独引入 osgl-tool 的依赖了

在 OSGL 开发艺术系列的下一篇中, 我们会介绍如何在 OSGL Img 框架中整合自定义图像处理器

转载于:https://my.oschina.net/greenlaw110/blog/1786151

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值