全部产品
阿里云办公

图片处理

更新时间:2018-06-25 11:04:08

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

图片处理的详细信息请参见OSS图片处理指南

图片处理功能

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

图片处理使用

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

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

匿名访问

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

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

基础操作

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

  1. http://image-demo.oss-cn-hangzhou.aliyuncs.com/example.jpg?x-oss-process=image/resize,w_100

自定义样式

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

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

例如:

  1. http://image-demo.oss-cn-hangzhou.aliyuncs.com/example.jpg?x-oss-process=style/oss-pic-style-w-100

级联处理

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

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

例如:

  1. http://image-demo.oss-cn-hangzhou.aliyuncs.com/example.jpg?x-oss-process=image/resize,w_100/rotate,90

支持HTTPS访问

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

  1. https://image-demo.oss-cn-hangzhou.aliyuncs.com/example.jpg?x-oss-process=image/resize,w_100

授权访问

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

以下代码用于生成带签名的图片处理URL:

  1. // Endpoint以杭州为例,其它Region请按实际情况填写。
  2. String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
  3. // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
  4. String accessKeyId = "<yourAccessKeyId>";
  5. String accessKeySecret = "<yourAccessKeySecret>";
  6. String bucketName = "<yourBucketName>";
  7. String objectName = "<yourObjectName>";
  8. // 创建OSSClient实例。
  9. OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
  10. // 设置图片处理样式。
  11. String style = "image/resize,m_fixed,w_100,h_100/rotate,90";
  12. // 指定过期时间为10分钟。
  13. Date expiration = new Date(new Date().getTime() + 1000 * 60 * 10 );
  14. GeneratePresignedUrlRequest req = new GeneratePresignedUrlRequest(bucketName, objectName, HttpMethod.GET);
  15. req.setExpiration(expiration);
  16. req.setProcess(style);
  17. URL signedUrl = ossClient.generatePresignedUrl(req);
  18. System.out.println(signedUrl);
  19. // 关闭OSSClient。
  20. ossClient.shutdown();

SDK访问

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

SDK处理图片文件支持自定义样式、HTTPS和级联处理。图片处理的完整代码请参见:GitHub

基础操作

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

  1. // Endpoint以杭州为例,其它Region请按实际情况填写。
  2. String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
  3. // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
  4. String accessKeyId = "<yourAccessKeyId>";
  5. String accessKeySecret = "<yourAccessKeySecret>";
  6. String bucketName = "<yourBucketName>";
  7. String objectName = "<yourObjectName>";
  8. // 创建OSSClient实例。
  9. OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
  10. // 缩放
  11. String style = "image/resize,m_fixed,w_100,h_100";
  12. GetObjectRequest request = new GetObjectRequest(bucketName, objectName);
  13. request.setProcess(style);
  14. ossClient.getObject(request, new File("example-resize.jpg"));
  15. // 裁剪
  16. style = "image/crop,w_100,h_100,x_100,y_100,r_1";
  17. request = new GetObjectRequest(bucketName, objectName);
  18. request.setProcess(style);
  19. ossClient.getObject(request, new File("example-crop.jpg"));
  20. // 旋转
  21. style = "image/rotate,90";
  22. request = new GetObjectRequest(bucketName, objectName);
  23. request.setProcess(style);
  24. ossClient.getObject(request, new File("example-rotate.jpg"));
  25. // 锐化
  26. style = "image/sharpen,100";
  27. request = new GetObjectRequest(bucketName, objectName);
  28. request.setProcess(style);
  29. ossClient.getObject(request, new File("example-sharpen.jpg"));
  30. // 水印
  31. style = "image/watermark,text_SGVsbG8g5Zu-54mH5pyN5YqhIQ";
  32. request = new GetObjectRequest(bucketName, objectName);
  33. request.setProcess(style);
  34. ossClient.getObject(request, new File("example-watermark.jpg"));
  35. // 格式转换
  36. style = "image/format,png";
  37. request = new GetObjectRequest(bucketName, objectName);
  38. request.setProcess(style);
  39. ossClient.getObject(request, new File("example-format.png"));
  40. // 获取图片信息
  41. style = "image/info";
  42. request = new GetObjectRequest(bucketName, objectName);
  43. request.setProcess(style);
  44. ossClient.getObject(request, new File("example-info.txt"));
  45. // 关闭OSSClient。
  46. ossClient.shutdown();

自定义样式

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

  1. // Endpoint以杭州为例,其它Region请按实际情况填写。
  2. String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
  3. // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
  4. String accessKeyId = "<yourAccessKeyId>";
  5. String accessKeySecret = "<yourAccessKeySecret>";
  6. String bucketName = "<yourBucketName>";
  7. String objectName = "<yourObjectName>";
  8. // 创建OSSClient实例。
  9. OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
  10. // 自定义样式。
  11. String style = "style/<yourCustomStyleName>";
  12. GetObjectRequest request = new GetObjectRequest(bucketName, objectName);
  13. request.setProcess(style);
  14. ossClient.getObject(request, new File("example-new.jpg"));
  15. // 关闭OSSClient。
  16. ossClient.shutdown();

级联处理

以下代码用于级联处理图片:

  1. // Endpoint以杭州为例,其它Region请按实际情况填写。
  2. String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
  3. // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
  4. String accessKeyId = "<yourAccessKeyId>";
  5. String accessKeySecret = "<yourAccessKeySecret>";
  6. String bucketName = "<yourBucketName>";
  7. String objectName = "<yourObjectName>";
  8. // 创建OSSClient实例。
  9. OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
  10. // 级联处理。
  11. String style = "image/resize,m_fixed,w_100,h_100/rotate,90";
  12. GetObjectRequest request = new GetObjectRequest(bucketName, objectName);
  13. request.setProcess(style);
  14. ossClient.getObject(request, new File("example-new.jpg"));
  15. // 关闭OSSClient。
  16. ossClient.shutdown();

图片处理工具

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

本文导读目录