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

图片处理的详细信息请参见OSS图片处理指南。图片处理的完整代码请参见GitHub

图片处理功能

OSS图片处理提供以下功能:

图片处理使用

图片处理使用标准的HTTP GET请求。您可以在URL的QueryString中设置处理参数。

如果图片文件的访问权限为私有读写,必须通过授权才能进行访问。

  • 匿名访问

    您可以通过如下格式的三级域名匿名访问处理后的图片:

    http://<yourBucketName>.<yourEndpoint>/<yourObjectName>?x-oss-process=image/<yourAction>,<yourParamValue>
    
    参数 描述
    bucket 存储空间名称
    endpoint 存储空间所在地域的访问域名
    object 图片文件名称
    image 图片处理的保留标志符
    action 对图片做的操作,如缩放、裁剪、旋转等
    param 对图片做的操作所对应的参数
    • 基础操作

      例如,将图缩略成宽度为100,高度按比例处理:

      http://image-demo.oss-cn-hangzhou.aliyuncs.com/example.jpg?x-oss-process=image/resize,w_100
      
    • 自定义样式

      使用如下格式的三级域名匿名访问图片处理:

      http://<yourBucketName>.<yourEndpoint>/<yourObjectName>?x-oss-process=style/<yourStyleName>
      
      • style:自定义样式的保留标志符。
      • yourStyleName:自定义样式名称,即通过控制台自定义样式的规则名称。

      例如:

      http://image-demo.oss-cn-hangzhou.aliyuncs.com/example.jpg?x-oss-process=style/oss-pic-style-w-100
      
    • 级联处理

      通过级联处理,可以对一张图片顺序进行多个操作,格式如下:

      http://<yourBucketName>.<yourEndpoint>/<yourObjectName>?x-oss-process=image/<yourAction1>,<yourParamValue1>/<yourAction2>,<yourParamValue2>/...
      

      例如:

      http://image-demo.oss-cn-hangzhou.aliyuncs.com/example.jpg?x-oss-process=image/resize,w_100/rotate,90
      
    • 支持HTTPS访问

      图片服务支持HTTPS访问,例如:

      https://image-demo.oss-cn-hangzhou.aliyuncs.com/example.jpg?x-oss-process=image/resize,w_100
      
  • 授权访问

    授权访问支持自定义样式、 HTTPS和级联处理。

    以下代码用于生成带签名的图片处理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访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
    $accessKeyId = "<yourAccessKeyId>";
    $accessKeySecret = "<yourAccessKeySecret>";
    // Endpoint以杭州为例,其它Region请按实际情况填写。
    $endpoint = "http://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);
    
  • SDK访问

    对于任意权限的图片文件,都可以直接使用SDK访问和处理。

    SDK处理图片文件支持自定义样式、HTTPS和级联处理。

    • 基础操作

      以下代码展示了图片处理的基础操作:

      <?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);
      
    • 自定义样式

      以下代码用于自定义图片样式:

      <?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");
      
      // 自定义样式。
      $style = "style/oss-pic-style-w-300";
      $options = array(
          OssClient::OSS_FILE_DOWNLOAD => $download_file,
          OssClient::OSS_PROCESS => $style);
      $ossClient->getObject($bucket, $object, $options);
      
      // 删除示例图片。
      $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访问或日常运维,请登录 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, false);
      
      // 上传示例图片。
      $ossClient->uploadFile($bucket, $object, "example.jpg");
      
      // 级联处理。
      $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);
      
      // 删除示例图片。
      $ossClient->deleteObject($bucket, $object);
      

图片处理工具

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