前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >原 OSGL 工具库 - 图片处理的艺术之

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

作者头像
老码农
发布2018-06-20 17:21:02
4450
发布2018-06-20 17:21:02
举报
文章被收录于专栏:老码农专栏老码农专栏

OSGL 工具库 - 图片处理的艺术 中我们讲述了如何使用 OSGL Img 提供的 API 对图片进行各种加工处理, 包括

  • 剪切
  • 缩放
  • 加水印
  • 翻转
  • 图像模糊
  • 图像拼接
  • 使用管道来对图片进行多种加工

本文是讲述如何在 OSGL Img 处理框架中自定义图像处理器.

假设我们需要对图像进行暗化处理, 我们定义处理器代码如下:

代码语言:javascript
复制
public class Sunglass extends Img.Processor {
    private float alpha = 0.3f;

    Sunglass() {}
    Sunglass(float alpha) {this.alpha = alpha;}

    @Override
    protected BufferedImage run() {
        int w = sourceWidth;
        int h = sourceHeight;
        Graphics2D g = g();
        g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, alpha));
        g.drawImage(source, 0, 0, w, h, null);
        return target;
    }
}

试用 Sunglass 处理器:

代码语言:javascript
复制
// style A
new Sunglass(0.7f)
        .process(img2())
        .pipeline()
        .resize(0.5f)
        .writeTo("/tmp/img2_sunglass_style_a.jpg");
image
image
代码语言:javascript
复制
// style B
source(img2())
        .resize(0.3f)
        .pipeline(new Sunglass())
        .writeTo("/tmp/img2_sunglass_style_b.png");
image
image

如果希望完美整合 Sunglass 到 OSGL Img 管道 API, 我们需要适配 Sunglass 到 OSGL Img 管道 API 框架中:

代码语言:javascript
复制
public class FluentSunglass extends Img.Processor<FluentSunglass, FluentSunglass.Stage> {

    public static class Stage extends Img.ProcessorStage<Stage, FluentSunglass> {
        public Stage(BufferedImage source, FluentSunglass processor) {
            super(source, processor);
        }
        public Stage alpha(float alpha) {
            processor.alpha = alpha;
            return this;
        }

        public Stage dark() {
            return alpha(0.3f);
        }

        public Stage light() {
            return alpha(0.7f);
        }

        public Stage darker() {
            return alpha(0.1f);
        }

        public Stage lighter() {
            return alpha(0.9f);
        }
    }

    float alpha;

    public FluentSunglass() {
        super();
    }

    @Override
    protected BufferedImage run() {
        return new Sunglass(alpha).source(source).run();
    }
}

试用 FluentSunglass 处理器:

代码语言:javascript
复制
// lighter
source(img2())
        .resize(0.3f)
        .pipeline(FluentSunglass.class)
        .lighter()
        .writeTo("/tmp/img2_f_sunglass_lighter.png");
image
image
代码语言:javascript
复制
// darker
source(img2())
        .resize(0.3f)
        .pipeline(FluentSunglass.class)
        .dark()
        .writeTo("/tmp/img2_f_sunglass_darker.png");
image
image
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
图片处理
图片处理(Image Processing,IP)是由腾讯云数据万象提供的丰富的图片处理服务,广泛应用于腾讯内部各产品。支持对腾讯云对象存储 COS 或第三方源的图片进行处理,提供基础处理能力(图片裁剪、转格式、缩放、打水印等)、图片瘦身能力(Guetzli 压缩、AVIF 转码压缩)、盲水印版权保护能力,同时支持先进的图像 AI 功能(图像增强、图像标签、图像评分、图像修复、商品抠图等),满足多种业务场景下的图片处理需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档