OSGL Img - 图片处理的艺术


声明:本文转载自https://my.oschina.net/greenlaw110/blog/1786151,转载目的在于传递更多信息,仅供学习交流之用。如有侵权行为,请联系我,我会及时删除。

刚刚发布的 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 的依赖了

本文发表于2018年03月28日 22:38
(c)注:本文转载自https://my.oschina.net/greenlaw110/blog/1786151,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如有侵权行为,请联系我们,我们会及时删除.

阅读 1962 讨论 0 喜欢 0

抢先体验

扫码体验
趣味小程序
文字表情生成器

闪念胶囊

你要过得好哇,这样我才能恨你啊,你要是过得不好,我都不知道该恨你还是拥抱你啊。

直抵黄龙府,与诸君痛饮尔。

那时陪伴我的人啊,你们如今在何方。

不出意外的话,我们再也不会见了,祝你前程似锦。

这世界真好,吃野东西也要留出这条命来看看

快捷链接
网站地图
提交友链
Copyright © 2016 - 2021 Cion.
All Rights Reserved.
京ICP备2021004668号-1