刚刚发布的 osgl 工具包 加入了一个新成员: org.osgl.util.Img, 这个工具可以让你轻松自由地处理图像数据
 图像数据输入
 Img 工具采用 InputStream 来获取图像数据。
 开场前,我们先看看这篇博客中用到的三个图片:img1, img2 and 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")); 
 
 2. 缩放
 Img 提供两种缩放方式:
 2.1 缩放到给定的长宽:
 Img.resize(source(img1()))         .to(100, 200)         .writeTo(new File("/tmp/img1_resize.png")); 
 
 2.2 按比例缩放:
 Img.resize(source(img1()))         .to(2.0f)         .writeTo(new File("/tmp/img1_resize_x2.png")); 
 
 按比例缩小的例子:
 source(img2())         .resize(0.5f)         .writeTo("/tmp/img2_resize_scale.png"); 
 
 2.3 缩放到指定长宽值并保持长宽比例:
 source(img1())         .resize(100, 200)         .keepRatio()         .writeTo(new File("/tmp/img1_resize_keep_ratio.png")); 
 
 3. 加水印
 使用默认设置:
 source(img1())         .watermark("CONFIDENTIAL")         .writeTo("/tmp/img1_watermark_def.png"); 
 
 也可以配置水印的位置颜色等参数:
 source(img1())         .watermark("CONFIDENTIAL")         .offsetY(-200)         .color(Color.DARK_GRAY)         .writeTo("/tmp/img1_watermark.png"); 
 
 4. 翻转
 Img 支持水平或者垂直翻转:
 source(img1())         .flip()         .writeTo("/tmp/img1_flip_h.png"); 
 
 source(img1())         .flipVertial()         .writeTo("/tmp/img1_flip_v.png"); 
 
 5. 图像模糊:
 使用不同模糊级别的效果:
 source(img1()).blur().writeTo("/tmp/img1_blur_default.png"); 
 
 source(img2()).blur(10).writeTo("/tmp/img2_blur_10.jpg"); 
 
 source(img2()).blur(2).writeTo("/tmp/img2_blur_2.jpg"); 
 
 source(img3()).blur(5).writeTo("/tmp/img3_blur_5.jpg"); 
 
 6. 图像拼接
 source(img2())         .appendWith(source(img3()))         .writeTo("/tmp/img_concat_2_3.png"); 
 
 source(img2())         .appendTo(source(img3()))         .writeTo("/tmp/img_concat_3_2.png"); 
 
 垂直拼接并不做比例校正:
 source(img2()).appendWith(source(img1()))         .noScaleFix()         .vertically()         .writeTo("/tmp/img_concat_2_1.png"); 
 
 拼接三张图片:
 concat(source(img1()), source(img2()))         .appendWith(source(img3()))         .vertically()         .writeTo("/tmp/img_concat_123.png"); 
 
 另一种拼接方式:
 concat(source(img2()))         .with(source(img3()))         .vertically()         .appendWith(source(img1()))         .writeTo("/tmp/img_concat_231.png"); 
 
 7. 使用管道来对图像进行多种加工:
 source(img1())         .resize(300, 400)         .pipeline()         .crop(50, 50, 250, 350)         .pipeline()         .watermark("HELLO OSGL")         .writeTo("/tmp/img1_pipeline.png"); 
 
 总结
 本篇博客我们演示了如何使用 OSGL Img 工具来处理图像数据,包括:
  - 剪切
- 缩放
- 水印
- 翻转
- 模糊
- 拼接
- 以及使用管道来进行多种操作
如果需要使用 OSGL Img 工具,可以在你的 pom.xml 文件中加入一下依赖:
 <dependency>   <groupId>org.osgl</groupId>   <artifactId>osgl-tool</artifactId>   <version>${osgl-tool.version}</version> </dependency> 
 当前 osgl-tool.version 是 1.8.1.
 特别提示
 使用 act-1.8.3 或者 act-1.8.4 的不需要单独引入 osgl-tool 的依赖了