huaweicloud-dwr-sdk-demo-img-crop-go:使用华为云DWR Go SDK实现图片裁剪同步工作流

数据工坊(Data Workroom,DWR)是一款近数据处理服务,通过易用的数据处理工作流编排和开放生态的数据处理算子,能够在云上实现图像、视频、文档、图片等数据处理业务。本仓库演示了如何调用dwr-go-sdk创建图片裁剪工作流并对OBS桶里的图片进行裁剪。

Branch3Tags0

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列表
  4. 示例工作流运行需要使用包含OBS读取权限的委托(参考IAM创建委托
  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())
  1. 查询图片裁剪算子
templateInfoResponse, err := client.ShowSystemTemplateDetail(&model.ShowSystemTemplateDetailRequest{TemplateName: "ImageCrop"})
if err != nil {
	fmt.Printf("failed to query public action template: %s", err.Error())
	return
}
  1. 创建工作流
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
}
  1. 触发工作流
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图片处理约束条件)。

6.参考

更多信息请参考DWR数据工坊

7.修订记录

发布日期 文档版本 修订说明
2022-11-25 1.0 文档首次发布

Introduction

数据工坊(Data Workroom,DWR)是一款近数据处理服务,通过易用的数据处理工作流编排和开放生态的数据处理算子,能够在云上实现图像、视频、文档、图片等数据处理业务。本仓库演示了如何调用dwr-go-sdk创建图片裁剪工作流并对OBS桶里的图片进行裁剪。

Customize my domain

Downloads

0

Total downloads (including clone, pull, ZIP & release downloads), updated by T+1.

Languages

Go92.47%
Shell7.53%