生活宝|商城|团购|房产|招聘|外卖|交友|微博|汽车|同城|游戏|贷款|发稿|建站|软件|客服
上海论坛

10分钟上线 - API网关 + 函数计算实现图片处理服务

更新于 2018-3-13 16:03:34 121人阅读 0人回复 显示全部楼层 倒序浏览

a
0 0
  @ME:   
  • TA的每日心情
    慵懒
    3 天前
  • 签到天数: 91 天

    连续签到: 1 天

    [LV.6]常住居民II

    发表于 2018-3-13 16:03:34 | 显示全部楼层 |阅读模式
    53快服 销量提升50%

    马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

    您需要 登录 才可以下载或查看,没有帐号?快速注册

    x
    摘要: 阿里云函数计算服务(FunctionCompute,FC)是一个事件驱动的全托管计算服务。通过函数计算与云端各个服务的广泛集成,开发者只需要编写函数代码,就能够快速地开发出弹性高可用的后端系统。接下来我们利用 API网关 + FC,来快速实现一个图片转换服务。
    阿里云函数计算服务(FunctionCompute,FC)是一个事件驱动的全托管计算服务。通过函数计算与云端各个服务的广泛集成,开发者只需要编写函数代码,就能够快速地开发出弹性高可用的后端系统。接下来我们利用 API网关 + FC,来快速实现一个图片转换服务。
    我们先从最简单的 hello word 开始,函数代码如下:

    def my_handler(event, context):    return 'hello world'
    函数名
    my_handler需要与创建函数时的”Handler”字段相对应:例如创建函数时指定的 Handler 为main.my_handler,那么函数计算会去加载main.py中定义的my_handler函数
    event 参数
    event 参数是用户调用函数时传入的数据,其类型是str
    context 参数
    context 参数中包含一些函数的运行时信息(例如 request id/临时 AK 等)。其类型是FCContext,具体结构和使用在下面的使用 context介绍
    返回值
    函数的返回值会作为调用函数的结果返回给用户,它可以是任意类型:对于简单类型会函数计算会把它转换成 str 返回,对于复杂类型会把它转换成 JSON 字符串返回
    结合API 网关,开发者可以方便地将自己的函数以 HTTP 的方式提供给别人使用。关于 API 网关和 FC 的交互协议细节,可参考这篇文章。下图是图片拼接和选择服务的效果和代码示例。当body内容为二进制时,需在函数计算中对body内容进行Base64编码,同时设置isBase64Encoded=true。如果body无需Base64编码,isBase64Encoded可以设置为false。API网关会对isBase64Encoded=true的body内容进行Base64解码后再透出给客户端。

    import base64import loggingimport randomimport oss2from wand.image import ImageTEMPLATE = open('/code/index.html').read()def my_handler(event, context):    logger = logging.getLogger()    logger.info('event: %s', event)    creds = context.credentials    auth = oss2.StsAuth(creds.accessKeyId, creds.accessKeySecret, creds.securityToken)    bucket = oss2.Bucket(auth, 'oss-cn-shanghai-internal.aliyuncs.com', 'rockuw-sh-2')    fc_obj = bucket.get_object('fc.png')    py_obj = bucket.get_object('python.png')    with Image(file=fc_obj) as fc_img:        with Image(file=py_obj) as py_img:            img = Image()            img.blank(fc_img.width + py_img.width + 20, py_img.height)            img.composite(image=fc_img, left=0, top=0)            img.composite(image=py_img, left=fc_img.width+20, top=0)            img.rotate(random.randint(0, 360))            img_enc = base64.b64encode(img.make_blob(format='png'))    resp = {        'isBase64Encoded': False,        'statusCode': 200,        'body': TEMPLATE.replace('{fc-py}', img_enc)    }    return resp
    识别以下二维码,阅读更多干货


    您需要登录后才可以回帖 登录 | 快速注册

    本版积分规则

    品牌广播台 更多>>
    便民工具
    返回顶部快速回复返回列表联系客服手机访问
    关于我们 | 联系我们 | 广告服务 | 网站导航 | 诚聘英才 | 友情链接 | 免责申明 |  帮助中心 | 手机访问 | 排行榜 | 小黑屋 | 设首页 | 加收藏
    © 2011-2017 上海论坛 版权所有 沪ICP备11017971号-7    在线客服 举报 郑重声明:本站只提供网上自由交流讨论,所有个人言论并不代表本站立场
    快速回复 返回顶部 返回列表