函数计算-触发OSS来处理图片加水印和大小裁剪

本文涉及的产品
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
函数计算FC,每月15万CU 3个月
简介: 在Web应用中,有很多在类型,其中针对有一种是针对电商、图片处理网站中当客户上传到OSS的图片进行大小裁剪或者批量加上防盗水印,通常的做法是搭建一个在线服务器并部署WEB应用来进行处理,程序需要按照一定规则来定时来触发事件。

阿里云在4月26日推出Function Compute(函数计算)后,很多客户踊跃申请试用,基于这个产品的目前的试用场景,会汇总多个场景逐步从浅入深来完成一系列主题讲解。

 

业务场景描述

在Web应用中,有很多在类型,其中针对有一种是针对电商、图片处理网站中当客户上传到OSS的图片进行大小裁剪或者批量加上防盗水印,通常的做法是搭建一个在线服务器并部署WEB应用来进行处理,程序需要按照一定规则来定时来触发事件,这样的情况下,会有3个明显的工作需要额外来考虑:

1、需要搭建Web应用服务器(不管有没有图片处理,空置率会比较高)

2、需要编写相关OSS代码来处理这块事情(需要专门维护一套运行处理代码)

3、需要考虑图片处理的及时性如何保障(要考虑并发和定时器的执行方法)

以上问题,我们仅仅需要通过阿里云的函数计算产品来设置简单事件触发器和编写一些简单OSS的程序就能完美解决上述问题,下面让我们来看看这个任务的如何分解。


  整体架构图

首先来对比一下新老架构有什么不同,老架构需要考虑三个地方的处理,例如处理OSS图片的内容、触发条件的处理、以及搭建应用服务器等。

  老的框架:

如下图,需要考虑蓝色部分,图片转码需要编写相关代码进行处理。

8a303725f815bcef127f3bdb0232ef4dd22620e8

蓝色标注是老架构中需要关注的,程序需要一种机制对上传来的图片进行设置,例如从OSS的某个目录进行定期扫描,并批量发送到图片进行加水印,大小变化等,并把处理过的图片,用户需要搭建WEB应用,需要编写相关OSS的处理,还需要有个机制能定期做程序处理。

总结下来需要用户关注内容点:

1、对图片的处理需要编写相关代码

2、OSS上把转码后的图片转移到新的Bucket,需要维护相关代码

3、需要考虑图片处理的及时性

 

新框架:

用户仅仅需要在Function Compute(函数计算)上设置触发器+函数,例如,监控某个Bucket下的PutObject的事件,当用户把图片上传到OSS的某个Bucket,

马上触发后续的函数代码,函数代码的无非就是把图片进行处理,并把图片转移到新的bucket中,整个过程,不需要搭建Web服务器,不需要写触发条件,

也无需关注整个服务状态如何。纯粹的事件触发后续程序,详见下图分解,仅仅一处蓝色圆圈就是需要编写的代码。

164b7985865db26a20d85d0c004c75866350a3f5

整个业务处理流程

72d23ff8ee6ed914554ba6a37007c36fe0c5a948

  源码实例

基于新框架的内容,我把相关代码按块来分解,按照两块内容来处理,控制台上的操作和Fcli命令行工具的使用

 

通过控制台的操作

1、 开通service

0917e729329b708f285c68d4fad5c7433566464e

2、新增函数计算

新建函数计算里,需要选择运行环境,目前是Nodejs4.4,后续会推出Python、Java环境等。

这个示例中选在线编辑,输入编写代码即可。

470532ee4550ed156f124e3ce6b6f74f418ab56a

代码段:

'use strict';
module.exports.handler = function(event, context, callback) {
        var co = require('co');             //设置初始的OSS环境变量
        var OSS = require('ali-oss');
        var client = new OSS({
          region: 'oss-cn-shanghai',
          accessKeyId: ‘your accessKeyId’,     //输入你的accessKeyId
          accessKeySecret:’ your accessKey Secret’, //输入你的accessKeySecret
          bucket: 'function-demo-bucket'        //输入华东2区的bucket name
        });
        //读取bucket下的目录
        co(function* () {
          var result = yield client.list({
                prefix: 'tmp/'
          });
          var name ;
          var nameArray = result.objects;
          for(var index=0; index < nameArray.length; index++){
                var str = nameArray[index].name;
                if (str.indexOf('.jpg') > 0){
                        console.log(str);
		               //把处理后的图片存放到执行环境的/tmp目录下(tmp目录能存放的256MB文件)
                        var resize = yield client.get(str,'/tmp/example-resize.jpg',{process: 'image/resize,m_fixed,w_128,h_128'});
                        
						//删除掉被处理完成的图片,防止第多次被处理
                        var del = yield client.delete(str);
                        console.log(del);

                        //把新处理后的图片转移到新目录下
                        name = new Date().getTime()+'.jpg';
                        var put = yield client.put('resource/'+ name,'/tmp/example-resize.jpg',{
                           meta: {
                           year: 2017,
                           people: 'wenyi'
                          }
                       });

                        callback(null, "New pic Name is : "+name);
                        console.log(name);
					}
          }
         callback(null, "Invk OSS is OK!");
         }).catch(function(err){
           console.log(err)
         });

       
};

3、设置OSS Trigger

在这个选项页里,我们选中华东2的Bucket和触发事件,触发事件目前控制台仅支持通过OSS进行触发,但是通过API或者SDK可以编写自行触发的事件。在这里,我列举控制台的方式来处理。

设置到这个地方,肯定有人会跑出来说,为什么不直接用OSS本身的URL进行resize呀,你考虑一点都没错,但是当我想把resize后的图片再存下来,怎么搞?或者我是不同Bucket下的,怎么搞?再或者,我想跨region保存,怎么搞?涉及到一系列问题,都交给OSS的SDK来处理,就要写大量代码。哪么通过FC,在一个函数中都可以自定义搞定,这样灵活方便的事情,显然不用再搭建执行环境来处理,交给FC即可。

函数计算的OSS的Trigger设置如下:

注意:由于本案例是在同一个bucket中操作图片,如果不设置前缀或者后缀做区分图片处理类型,会死循环的生成很多图片。


43da04881cbf465db0584972119803471c65d6ad


在oss上的文件夹的目录结构如下:

80d7e58dea9f114b98502720e61f0c6f38ecb723


4、查看执行结果

710ab5bbeabda6cd4b94e85444f639752dffe169



整个业务执行结束,完成了完整的一个例子。


相关实践学习
【AI破次元壁合照】少年白马醉春风,函数计算一键部署AI绘画平台
本次实验基于阿里云函数计算产品能力开发AI绘画平台,可让您实现“破次元壁”与角色合照,为角色换背景效果,用AI绘图技术绘出属于自己的少年江湖。
从 0 入门函数计算
在函数计算的架构中,开发者只需要编写业务代码,并监控业务运行情况就可以了。这将开发者从繁重的运维工作中解放出来,将精力投入到更有意义的开发任务上。
目录
相关文章
|
5月前
|
存储 编解码 Serverless
Serverless架构下的OSS应用:函数计算FC自动处理图片/视频转码(演示水印添加+缩略图生成流水线)
本文介绍基于阿里云函数计算(FC)和对象存储(OSS)构建Serverless媒体处理流水线,解决传统方案资源利用率低、运维复杂、成本高等问题。通过事件驱动机制实现图片水印添加、多规格缩略图生成及视频转码优化,支持毫秒级弹性伸缩与精确计费,提升处理效率并降低成本,适用于高并发媒体处理场景。
307 0
|
9月前
|
SQL 分布式计算 Serverless
基于阿里云 EMR Serverless Spark 版快速搭建OSS日志分析应用
基于阿里云 EMR Serverless Spark 版快速搭建OSS日志分析应用
238 0
|
运维 Serverless 调度
函数计算产品使用问题之怎么在HTTP触发的函数里添加或读取自定义头部
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
存储 运维 Serverless
函数计算产品使用问题之OSS触发器是否可以只设置文件前缀
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
存储 前端开发 Serverless
Serverless 魔法之旅:如何用 Funcraft、OSS 和 ROS 打造超级CI/CD流水线!
【8月更文挑战第8天】在现代软件开发中,CI/CD对于提升效率与代码质量至关重要。本文介绍如何运用阿里云的Serverless服务——Funcraft、OSS及ROS构建完整的CI/CD流程。首先配置Funcraft实现代码自动化构建与部署;接着利用OSS管理静态文件,确保网站内容正确加载;最后借助ROS自动化资源创建与管理,实现代码自动部署。通过整合这些服务,不仅加速了开发进程,还保证了代码质量和部署一致性,充分发挥Serverless架构的优势。
329 5
|
存储 运维 监控
函数计算产品使用问题之如何在控制台配置HTTP触发器并使用HTTP请求触发
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
215 6
|
监控 Java Serverless
函数计算产品使用问题之对于OSS打包的zip的保存目录,该如何操作
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
209 6
|
Java Serverless 数据库连接
函数计算操作报错合集之调用打包的OSS函数时发生报错,该怎么办
Serverless 应用引擎(SAE)是阿里云提供的Serverless PaaS平台,支持Spring Cloud、Dubbo、HSF等主流微服务框架,简化应用的部署、运维和弹性伸缩。在使用SAE过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
231 2
|
存储 监控 Serverless
函数计算产品使用问题之怎么批量下载Stable Diffusion(SD)图片
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
166 0
函数计算产品使用问题之怎么批量下载Stable Diffusion(SD)图片
|
NoSQL Serverless API
Serverless 架构实现弹幕场景问题之API Gateway和OSS域名未绑定成功的问题如何解决
Serverless 架构实现弹幕场景问题之API Gateway和OSS域名未绑定成功的问题如何解决
150 0

相关产品

  • 函数计算