使用OSS Golang SDK进行图片处理时,发现提供的文档中,并没有提供图片处理的相关介绍。
难道是SDK不支持图片处理?但SDK封装的是通用OSS Api,既然PHP/Python等语言的SDK支持了,Golang肯定也是有办法支持的。于是参照PHP SDK关于图片处理的代码,总结出了如下类似的示例。

一、使用标准的HTTP GET请求:

在URL的QueryString中设置处理参数(x-oss-process)。
如果图片文件的访问权限为私有读写,必须通过授权才能进行访问。

1、匿名访问
http://./?x-oss-process=image/,
2、授权访问
options
    client, err := oss.New(config.Endpoint, config.AccessID, config.AccessKey)
    if err != nil {
        log.Fatalln(err)
    }

    bucket, err := client.Bucket("bucket_test")
    if err != nil {
        log.Fatal(err)
    }

    options := []oss.Option{
        oss.Process("image/resize,m_fixed,h_100,w_100"),
    }

    signUrl, err := bucket.SignURL("IMG_20180128_155838.jpg", oss.HTTPGet, 600, options...)
    if err != nil {
        log.Println(err)
    }

    fmt.Println(signUrl)

二、使用SDK中的方法进行处理:

参照PHP SDK文档中的相关示例代码,调用Goland SDK中类似的方法,构造出Golang示例代码:

PHP代码:
<?php
if (is_file(__DIR__ . '/../autoload.php')) {
    require_once __DIR__ . '/../autoload.php';
}
if (is_file(__DIR__ . '/../vendor/autoload.php')) {
    require_once __DIR__ . '/../vendor/autoload.php';
}
use OSS\OssClient;
// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
$accessKeyId = "<yourAccessKeyId>";
$accessKeySecret = "<yourAccessKeySecret>";
// Endpoint以杭州为例,其它Region请按实际情况填写。
$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
$bucket = "<yourBucketName>";
$object = "<yourObjectName>";
$download_file = "download.jpg";
$ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);
// 上传示例图片。
$ossClient->uploadFile($bucket, $object, "example.jpg");
// 图片缩放
$options = array(
    OssClient::OSS_FILE_DOWNLOAD => $download_file,
    OssClient::OSS_PROCESS => "image/resize,m_fixed,h_100,w_100" );
$ossClient->getObject($bucket, $object, $options);
// 图片裁剪
$options = array(
    OssClient::OSS_FILE_DOWNLOAD => $download_file,
    OssClient::OSS_PROCESS => "image/crop,w_100,h_100,x_100,y_100,r_1" );
$ossClient->getObject($bucket, $object, $options);
// 图片旋转
$options = array(
    OssClient::OSS_FILE_DOWNLOAD => $download_file,
    OssClient::OSS_PROCESS => "image/rotate,90" );
$ossClient->getObject($bucket, $object, $options);
// 图片锐化
$options = array(
    OssClient::OSS_FILE_DOWNLOAD => $download_file,
    OssClient::OSS_PROCESS => "image/sharpen,100" );
$ossClient->getObject($bucket, $object, $options);
// 图片水印
$options = array(
    OssClient::OSS_FILE_DOWNLOAD => $download_file,
    OssClient::OSS_PROCESS => "image/watermark,text_SGVsbG8g5Zu-54mH5pyN5YqhIQ" );
$ossClient->getObject($bucket, $object, $options);
// 图片格式转换
$options = array(
    OssClient::OSS_FILE_DOWNLOAD => $download_file,
    OssClient::OSS_PROCESS => "image/format,png" );
$ossClient->getObject($bucket, $object, $options);
// 获取图片信息。
$options = array(
    OssClient::OSS_FILE_DOWNLOAD => $download_file,
    OssClient::OSS_PROCESS => "image/info" );
$ossClient->getObject($bucket, $object, $options);
// 删除示例图片。
$ossClient->deleteObject($bucket, $object);

调用上述代码后,可以将处理后的图片或获取到信息保存到指定的$download_file 文件中。

Golang代码
    client, err := oss.New(config.Endpoint, config.AccessID, config.AccessKey)
    if err != nil {
        log.Fatalln(err)
    }

    bucket, err := client.Bucket("bucket_test")
    if err != nil {
        log.Fatal(err)
    }

    options := []oss.Option{
        oss.Process("image/info"),
    }
    
        // 流式下载,处理后的图片以流的形式返回,可输出到标准输出
    body, err := bucket.GetObject("IMG_20180128_155838.jpg", options...)
    if err != nil {
        log.Fatalln(err)
    }
    defer body.Close()
    data, err := ioutil.ReadAll(body)
    if err != nil {
        log.Fatalln(err)
    }

    fmt.Println(string(data))
      
        // 下载到指定文件,处理后的图片或信息保存到指定的文件
    options := []oss.Option{
        oss.Process("image/resize,m_fixed,h_100,w_100"),
    }   
    err = bucket.GetObjectToFile("IMG_20180128_155838.jpg", "img.jpg", options...)
    fmt.Println(err)

三、Golang SDK中的问题:

x-oss-process