图片处理是OSS提供的海量、安全、低成本、高可靠的图片处理服务。原始图片上传到OSS后,您可以通过简单的RESTful接口,在任何时间、任何地点、任何互联网设备上对图片进行处理。

图片处理支持的参数请参见处理参数

图片处理的完整代码请参见GitHub

使用图片处理参数处理图片

  • 使用单个图片处理参数处理图片并保存为本地图片
    <?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访问或日常运维,请登录RAM控制台创建RAM账号。
    $accessKeyId = "<yourAccessKeyId>";
    $accessKeySecret = "<yourAccessKeySecret>";
    
    // Endpoint以杭州为例,其它Region请按实际情况填写。
    $endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
    $bucket = "<yourBucketName>";
    $object = "<yourObjectName>";
    // 指定处理后的图片名称。
    $download_file = "<LocalFileName>";
    
    $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);
    
    // 若目标图片不在指定Bucket内,需上传图片到目标Bucket。
    // $ossClient->uploadFile($bucket, $object, "<yourLocalFile>");
    
    // 将图片缩放为固定宽高100 px,并保存在本地。
    $options = array(
        OssClient::OSS_FILE_DOWNLOAD => $download_file,
        OssClient::OSS_PROCESS => "image/resize,m_fixed,h_100,w_100" );
    $ossClient->getObject($bucket, $object, $options);
    
    // 图片处理完成后,若Bucket内的原图不再需要,可以删除原图。
    // $ossClient->deleteObject($bucket, $object);
  • 使用多个图片处理参数处理图片并保存为本地图片
    使用多个图片处理参数处理图片时,多个参数之间以正斜线(/)分隔。
    <?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访问或日常运维,请登录RAM控制台创建RAM账号。
    $accessKeyId = "<yourAccessKeyId>";
    $accessKeySecret = "<yourAccessKeySecret>";
    // Endpoint以杭州为例,其它Region请按实际情况填写。
    $endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
    $bucket = "<yourBucketName>";
    $object = "<yourObjectName>";
    // 指定处理后的图片名称。
    $download_file = "<LocalFileName>";
    
    $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint, false);
    // 若目标图片不在指定Bucket内,需上传图片到目标Bucket。
    // $ossClient->uploadFile($bucket, $object, "<yourLocalFile>");
    
    // 将图片缩放为固定宽高100 px后,再旋转90°,之后保存到本地。
    $style = "image/resize,m_fixed,w_100,h_100/rotate,90";
    $options = array(
        OssClient::OSS_FILE_DOWNLOAD => $download_file,
        OssClient::OSS_PROCESS => $style);
    $ossClient->getObject($bucket, $object, $options);
    
    // 图片处理完成后,若Bucket内的原图不再需要,可以删除原图。
    // $ossClient->deleteObject($bucket, $object);

使用图片样式处理图片

您可以将多个图片处理参数封装在一个样式中,之后使用样式批量处理图片。详情请参见 图片样式。以下代码展示了使用图片样式处理图片:
<?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访问或日常运维,请登录RAM控制台创建RAM账号。
$accessKeyId = "<yourAccessKeyId>";
$accessKeySecret = "<yourAccessKeySecret>";
// Endpoint以杭州为例,其它Region请按实际情况填写。
$endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
$bucket = "<yourBucketName>";
$object = "<yourObjectName>";
// 指定处理后的图片名称。
$download_file = "<LocalFileName>";

$ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);

// 若目标图片不在指定Bucket内,需上传图片到目标Bucket。
// $ossClient->uploadFile($bucket, $object, "<yourLocalFile>");

// 指定图片样式。
$style = "style/<yourCustomStyleName>";
// 将图片保存在本地。
$options = array(
    OssClient::OSS_FILE_DOWNLOAD => $download_file,
    OssClient::OSS_PROCESS => $style);
$ossClient->getObject($bucket, $object, $options);
// 图片处理完成后,若Bucket内的原图不再需要,可以删除原图。
// $ossClient->deleteObject($bucket, $object);

图片处理持久化

您可以通过 ImgSaveAs接口将图片保存至原图片所在存储空间。以下代码展示了图片处理持久化操作:
<?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访问或日常运维,请登录RAM控制台创建RAM账号。
$accessKeyId = "<yourAccessKeyId>";
$accessKeySecret = "<yourAccessKeySecret>";
// Endpoint以杭州为例,其它Region请按实际情况填写。
$endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
$bucket= "<yourBucketName>";
$object = "<yourObjectName>";
// 指定处理后的图片名称。
$save_object = "<saveObjectName>";

function base64url_encode($data)
{
    return rtrim(strtr(base64_encode($data), '+/', '-_'), '=');
}

$ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint, false);
// 若目标图片不在指定Bucket内,需上传图片到目标Bucket。
// $ossClient->uploadFile($bucket, $object, "<yourLocalFile>");

// 将图片缩放为固定宽高100 px后,再旋转90°。
$style = "image/resize,m_fixed,w_100,h_100/rotate,90";

// 将处理后的图片转存到当前Bucket。
$process = $style.
           '|sys/saveas'.
           ',o_'.base64url_encode($save_object).
           ',b_'.base64url_encode($bucket);
$result = $ossClient->processObject($bucket, $object, $process);

// 打印处理结果。
print($result);

生成带图片处理参数的文件签名URL

私有文件的访问URL带有签名。OSS不支持在带签名的URL后直接添加图片处理参数。如果您想要对私有文件进行图片处理,需要将图片处理参数加入到签名中,相关的代码示例如下:
<?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访问或日常运维,请登录RAM控制台创建RAM账号。
$accessKeyId = "<yourAccessKeyId>";
$accessKeySecret = "<yourAccessKeySecret>";
// Endpoint以杭州为例,其它Region请按实际情况填写。
$endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
$bucket= "<yourBucketName>";
$object = "<yourObjectName>";

$ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);

// 生成一个带图片处理参数的签名的URL,有效期是3600秒,可以直接使用浏览器访问。
$timeout = 3600;
$options = array(
    OssClient::OSS_PROCESS => "image/resize,m_lfit,h_100,w_100" );
$signedUrl = $ossClient->signUrl($bucket, $object, $timeout, "GET", $options);

print("rtmp url: \n" . $signedUrl);

图片处理工具

您可以通过可视化图片处理工具ImageStyleViewer直观地看到OSS图片处理结果。