# huaweicloud-dwr-sdk-demo-img-crop-go **Repository Path**: HuaweiCloudDeveloper/huaweicloud-dwr-sdk-demo-img-crop-go ## Basic Information - **Project Name**: huaweicloud-dwr-sdk-demo-img-crop-go - **Description**: 数据工坊(Data Workroom,DWR)是一款近数据处理服务,通过易用的数据处理工作流编排和开放生态的数据处理算子,能够在云上实现图像、视频、文档、图片等数据处理业务。本仓库演示了如何调用dwr-go-sdk创建图片裁剪工作流并对OBS桶里的图片进行裁剪。 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master-dev - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-11-24 - **Last Updated**: 2025-06-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # huaweicloud-dwr-sdk-demo-go ## 1.介绍 本示例介绍了如何使用华为云DWR服务的Go SDK创建包含图片裁剪算子的同步工作流,并触发工作流,对原图裁剪,获得裁剪后的图片。 ## 2.版本说明 本示例配套的SDK版本为v0.1.12 ## 3.准备工作 1. 参考华为云DWR开发工具包(SDK) 引入 DWR Go SDK 2. 要使用华为云DWR Go SDK,您需要拥有华为云账号以及该账号对应的 Access Key(AK)和 Secret Access Key(SK)。 3. 获取您期望使用的目标终端节点(参考[华为云DWR endpoint列表](https://developer.huaweicloud.com/endpoint)) 4. 示例工作流运行需要使用包含OBS读取权限的委托(参考[IAM创建委托](https://support.huaweicloud.com/usermanual-iam/iam_06_0004.html)) 5. 华为云 DWR Go SDK 需要运行在 Go 1.14 及以上版本。 ## 4.示例代码 1. 构造client ``` client := dwr.NewDwrClient( dwr.DwrClientBuilder(). WithEndpoint(endpoint). WithCredential( basic.NewCredentialsBuilder(). WithAk(ak). WithSk(sk). WithProjectId(projectId). Build()). WithHttpConfig(config.DefaultHttpConfig(). WithIgnoreSSLVerification(true). WithHttpHandler(httphandler.NewHttpHandler().AddResponseHandler(func(response http.Response) { fmt.Println(response.Header) }))). Build()) ``` 2. 查询图片裁剪算子 ``` templateInfoResponse, err := client.ShowSystemTemplateDetail(&model.ShowSystemTemplateDetailRequest{TemplateName: "ImageCrop"}) if err != nil { fmt.Printf("failed to query public action template: %s", err.Error()) return } ``` 3. 创建工作流 ``` createResponse, err := client.CreateWorkflow(&model.CreateWorkflowRequest{ GraphName: workflowName, Body: &model.CreateWorkflowRequestBody{ States: &[]model.State{{ Type: model.GetStateTypeEnum().END, StateName: endState, }, { Start: &start, Type: model.GetStateTypeEnum().OPERATION, PayloadFilterIn: &payloadFilter, PayloadFilterOut: &payloadFilter, StateName: "ImageCrop", ActionMode: &actionMode, Actions: &actions, NextState: &endState, }}, Inputs: &workflowInputs, Description: &description, Mode: &mode, ExpressConfig: &model.ExpressConfig{ SupportAnonymous: &supportAnonymous, }, }, }) if err != nil || createResponse.HttpStatusCode != http.StatusCreated { fmt.Printf("failed to create workflow, err: %#v, response: %#v", err, createResponse) return err } ``` 4. 触发工作流 ``` response, err := http.Get(fmt.Sprintf("%s?x-workflow-graph-name=%s", imgUrl, workflowName)) if err != nil { fmt.Printf("failed to get cropped image: %s", err.Error()) return } defer func() { err := response.Body.Close() if err != nil { fmt.Printf("failed to close body\n") } }() ``` ## 5.备注 示例代码中截取原图左上角100x100范围的内容,为保证裁剪效果,需要原图片分辨率大于100x100,同时小于图片转码的最大限制(参考[OBS图片处理约束条件](https://support.huaweicloud.com/fg-obs/obs_01_0140.html))。 ## 6.参考 更多信息请参考[DWR数据工坊](https://support.huaweicloud.com/dwr/index.html) ## 7.修订记录 | 发布日期 | 文档版本 | 修订说明| |-|-|-| | 2022-11-25 | 1.0 | 文档首次发布 |