
# 构建程序
本例提供了为图片打水印功能的程序包，使用空白模板创建函数，用户可以[下载（watermark.zip）](https://functionstage-community.obs.cn-north-1.myhuaweicloud.com/examples/watermark.zip)学习使用。
#### 创建程序包
本例使用Python语言实现为图片打水印的功能，有关函数开发的过程请参考[Python函数开发](https://support.huaweicloud.com/devg-functiongraph/functiongraph_02_0420.html)。本例不再介绍业务功能实现的代码，样例代码目录如[图1]所示。
图1样例代码目录   
![](https://support.huaweicloud.com/bestpractice-functiongraph/zh-cn_image_0000002165184021.png "点击放大")
其中index.py为函数执行的入口文件，index.py中入口函数的代码片段如下，参数"obs_output_bucket"为打水印后的图片存储地址，需要在创建函数时配置自定义参数。
```
def handler(event, context):
    srcBucket, srcObjName = getObjInfoFromObsEvent(event)
    outputBucket = context.getUserData('obs_output_bucket')
    client = newObsClient(context)
    # download file uploaded by user from obs
    localFile = "/tmp/" + srcObjName
    downloadFile(client, srcBucket, srcObjName, localFile)
    outFileName, outFile = watermark_image(localFile, srcObjName)
    # 将转换后的文件上传到新的obs桶中
    uploadFileToObs(client, outputBucket, outFileName, outFile)
    return 'OK'
```
#### 创建函数
创建函数的时候，必须选择委托包含OBS访问权限的委托，否则不能使用OBS服务。
1. 登录[函数工作流控制台](https://console.huaweicloud.com/functiongraph/)，在左侧导航栏选择"函数 \> 函数列表"，进入函数列表界面。
2. 单击"创建函数"，进入创建函数流程。
3. 选择"创建空白函数"，填写函数配置信息。 
   输入基础配置信息，完成后单击"创建函数"。
   - 函数类型：事件函数
   
   - 函数名称：输入您自定义的函数名称，此处以"fss_examples_image_watermark"为例。
   
   
   
   - 委托名称：选择[创建委托](https://support.huaweicloud.com/bestpractice-functiongraph/functiongraph_05_0401.html#functiongraph_05_0401__section12356131213497)中创建的"serverless_trust"
   
   - 运行时语言：选择"Python3.6"
    
   
   
4. 进入fss_examples_image_watermark函数详情页，在"代码"页签，单击页面最底部的"添加依赖包"，添加公共依赖包"pillow-7.1.2"。 
   图2添加依赖包   
   ![](https://support.huaweicloud.com/bestpractice-functiongraph/zh-cn_image_0000002129944262.png "点击放大")
   
   
5. 进入fss_examples_image_watermark函数详情页，配置如下信息。 
   1. 在"代码"页签，代码选择"上传自ZIP文件"，上传样例代码watermark.zip。
   
   2. 在"设置 \> 常规设置"页签，设置如下信息，完成后单击"保存"。
      - 内存：选择"128"
      
      - 执行超时时间：输入"3"
      
      - 函数执行入口：默认"index.handler"，无需修改
      
      - 所属应用：默认"default"
      
      - 描述：输入"图片打水印"
       
   
   3. 在"设置 \> 环境变量"页签，输入环境信息，完成后单击"保存"。以下截图仅供参考，在实际使用中，请根据实际情况替换。
      表1环境变量 
      | 键                 | 值                | 说明                                                                                                                                                                                                                                      |
      |:---|:---|:---|
      | obs_output_bucket | bucket-output-fg | 键：index.py文件中定义的存放输出水印图片的OBS桶参数。 值：[创建OBS桶](https://support.huaweicloud.com/bestpractice-functiongraph/functiongraph_05_0401.html#functiongraph_05_0401__section18353131244919)中创建的存放输出水印图片的OBS桶。 |
      | obs_region        | 例如"cn-north-4"   | 键：index.py文件中定义的存放输出水印图片的OBS桶的区域，应与函数所属区域保持一致。 值：OBS桶obs_output_bucket所在的区域，更多Region区域详情请参见[地区和终端节点](https://console.huaweicloud.com/apiexplorer/#/endpoint/FunctionGraph)。                       |
         
      
   
   
   
   
 
