图片处理
图片处理是OSS提供的海量、安全、低成本、高可靠的图片处理服务。原始图片上传到OSS后,您可以通过简单的RESTful接口,在任何时间、任何地点、任何互联网设备上对图片进行处理。
图片处理的详细信息请参见OSS图片处理指南。
图片处理功能
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:
// Endpoint以杭州为例,其它Region请按实际情况填写。 String endpoint = "http://oss-cn-hangzhou.aliyuncs.com"; // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。 String accessKeyId = "<yourAccessKeyId>"; String accessKeySecret = "<yourAccessKeySecret>"; String bucketName = "<yourBucketName>"; String objectName = "<yourObjectName>"; // 创建OSSClient实例。 OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); // 设置图片处理样式。 String style = "image/resize,m_fixed,w_100,h_100/rotate,90"; // 指定过期时间为10分钟。 Date expiration = new Date(new Date().getTime() + 1000 * 60 * 10 ); GeneratePresignedUrlRequest req = new GeneratePresignedUrlRequest(bucketName, objectName, HttpMethod.GET); req.setExpiration(expiration); req.setProcess(style); URL signedUrl = ossClient.generatePresignedUrl(req); System.out.println(signedUrl); // 关闭OSSClient。 ossClient.shutdown();sClient.shutdown();
- SDK访问
对于任意权限的图片文件,都可以直接使用SDK访问和处理。
SDK处理图片文件支持自定义样式、HTTPS和级联处理。
- 基础操作
以下代码展示了图片处理的基础操作:
// Endpoint以杭州为例,其它Region请按实际情况填写。 String endpoint = "http://oss-cn-hangzhou.aliyuncs.com"; // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。 String accessKeyId = "<yourAccessKeyId>"; String accessKeySecret = "<yourAccessKeySecret>"; String bucketName = "<yourBucketName>"; String objectName = "<yourObjectName>"; // 创建OSSClient实例。 OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); // 缩放 String style = "image/resize,m_fixed,w_100,h_100"; GetObjectRequest request = new GetObjectRequest(bucketName, objectName); request.setProcess(style); ossClient.getObject(request, new File("example-resize.jpg")); // 裁剪 style = "image/crop,w_100,h_100,x_100,y_100,r_1"; request = new GetObjectRequest(bucketName, objectName); request.setProcess(style); ossClient.getObject(request, new File("example-crop.jpg")); // 旋转 style = "image/rotate,90"; request = new GetObjectRequest(bucketName, objectName); request.setProcess(style); ossClient.getObject(request, new File("example-rotate.jpg")); // 锐化 style = "image/sharpen,100"; request = new GetObjectRequest(bucketName, objectName); request.setProcess(style); ossClient.getObject(request, new File("example-sharpen.jpg")); // 水印 style = "image/watermark,text_SGVsbG8g5Zu-54mH5pyN5YqhIQ"; request = new GetObjectRequest(bucketName, objectName); request.setProcess(style); ossClient.getObject(request, new File("example-watermark.jpg")); // 格式转换 style = "image/format,png"; request = new GetObjectRequest(bucketName, objectName); request.setProcess(style); ossClient.getObject(request, new File("example-format.png")); // 获取图片信息 style = "image/info"; request = new GetObjectRequest(bucketName, objectName); request.setProcess(style); ossClient.getObject(request, new File("example-info.txt")); // 关闭OSSClient。 ossClient.shutdown();
- 自定义样式
以下代码用于自定义图片样式:
// Endpoint以杭州为例,其它Region请按实际情况填写。 String endpoint = "http://oss-cn-hangzhou.aliyuncs.com"; // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。 String accessKeyId = "<yourAccessKeyId>"; String accessKeySecret = "<yourAccessKeySecret>"; String bucketName = "<yourBucketName>"; String objectName = "<yourObjectName>"; // 创建OSSClient实例。 OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); // 自定义样式。 String style = "style/<yourCustomStyleName>"; GetObjectRequest request = new GetObjectRequest(bucketName, objectName); request.setProcess(style); ossClient.getObject(request, new File("example-new.jpg")); // 关闭OSSClient。 ossClient.shutdown();
- 级联处理
以下代码用于级联处理图片:
// Endpoint以杭州为例,其它Region请按实际情况填写。 String endpoint = "http://oss-cn-hangzhou.aliyuncs.com"; // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。 String accessKeyId = "<yourAccessKeyId>"; String accessKeySecret = "<yourAccessKeySecret>"; String bucketName = "<yourBucketName>"; String objectName = "<yourObjectName>"; // 创建OSSClient实例。 OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); // 级联处理。 String style = "image/resize,m_fixed,w_100,h_100/rotate,90"; GetObjectRequest request = new GetObjectRequest(bucketName, objectName); request.setProcess(style); ossClient.getObject(request, new File("example-new.jpg")); // 关闭OSSClient。 ossClient.shutdown();
- 基础操作
图片处理持久化
以下代码用于图片处理持久化:
// Endpoint以杭州为例,其它Region请按实际情况填写。
String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录
// https://ram.console.aliyun.com 创建RAM账号。
String accessKeyId = "<yourAccessKeyId>";
String accessKeySecret = "<yourAccessKeySecret>";
String bucketName = "<yourBucketName>";
String sourceImage = "<yourSourceImageName>";
try {
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
// 图片处理持久化 : 缩放
StringBuilder sbStyle = new StringBuilder();
Formatter styleFormatter = new Formatter(sbStyle);
String styleType = "image/resize,m_fixed,w_100,h_100";
String targetImage = "example-resize.png";
styleFormatter.format("%s|sys/saveas,o_%s,b_%s", styleType,
BinaryUtil.toBase64String(targetImage.getBytes()),
BinaryUtil.toBase64String(bucketName.getBytes()));
System.out.println(sbStyle.toString());
ProcessObjectRequest request = new ProcessObjectRequest(bucketName, sourceImage, sbStyle.toString());
GenericResult processResult = ossClient.processObject(request);
String json = IOUtils.readStreamAsString(processResult.getResponse().getContent(), "UTF-8");
processResult.getResponse().getContent().close();
System.out.println(json);
// 图片处理持久化 : 裁剪
sbStyle.delete(0, sbStyle.length());
styleType = "image/crop,w_100,h_100,x_100,y_100,r_1";
targetImage = "example-crop.png";
styleFormatter.format("%s|sys/saveas,o_%s,b_%s", styleType,
BinaryUtil.toBase64String(targetImage.getBytes()),
BinaryUtil.toBase64String(bucketName.getBytes()));
System.out.println(sbStyle.toString());
request = new ProcessObjectRequest(bucketName, sourceImage, sbStyle.toString());
processResult = ossClient.processObject(request);
json = IOUtils.readStreamAsString(processResult.getResponse().getContent(), "UTF-8");
processResult.getResponse().getContent().close();
System.out.println(json);
// 图片处理持久化 : 旋转
sbStyle.delete(0, sbStyle.length());
styleType = "image/rotate,90";
targetImage = "example-rotate.png";
styleFormatter.format("%s|sys/saveas,o_%s,b_%s", styleType,
BinaryUtil.toBase64String(targetImage.getBytes()),
BinaryUtil.toBase64String(bucketName.getBytes()));
request = new ProcessObjectRequest(bucketName, sourceImage, sbStyle.toString());
processResult = ossClient.processObject(request);
json = IOUtils.readStreamAsString(processResult.getResponse().getContent(), "UTF-8");
processResult.getResponse().getContent().close();
System.out.println(json);
// 图片处理持久化 : 锐化
sbStyle.delete(0, sbStyle.length());
styleType = "image/sharpen,100";
targetImage = "example-sharpen.png";
styleFormatter.format("%s|sys/saveas,o_%s,b_%s", styleType,
BinaryUtil.toBase64String(targetImage.getBytes()),
BinaryUtil.toBase64String(bucketName.getBytes()));
request = new ProcessObjectRequest(bucketName, sourceImage, sbStyle.toString());
processResult = ossClient.processObject(request);
json = IOUtils.readStreamAsString(processResult.getResponse().getContent(), "UTF-8");
processResult.getResponse().getContent().close();
System.out.println(json);
// 图片处理持久化 : 水印
sbStyle.delete(0, sbStyle.length());
styleType = "image/watermark,text_SGVsbG8g5Zu-54mH5pyN5YqhIQ";
targetImage = "example-watermark.png";
styleFormatter.format("%s|sys/saveas,o_%s,b_%s", styleType,
BinaryUtil.toBase64String(targetImage.getBytes()),
BinaryUtil.toBase64String(bucketName.getBytes()));
request = new ProcessObjectRequest(bucketName, sourceImage, sbStyle.toString());
processResult = ossClient.processObject(request);
json = IOUtils.readStreamAsString(processResult.getResponse().getContent(), "UTF-8");
processResult.getResponse().getContent().close();
System.out.println(json);
// 图片处理持久化 : 格式转换
sbStyle.delete(0, sbStyle.length());
styleType = "image/format,jpg";
targetImage = "example-formatconvert.jpg";
styleFormatter.format("%s|sys/saveas,o_%s,b_%s", styleType,
BinaryUtil.toBase64String(targetImage.getBytes()),
BinaryUtil.toBase64String(bucketName.getBytes()));
request = new ProcessObjectRequest(bucketName, sourceImage, sbStyle.toString());
processResult = ossClient.processObject(request);
json = IOUtils.readStreamAsString(processResult.getResponse().getContent(), "UTF-8");
processResult.getResponse().getContent().close();
System.out.println(json);
} catch (Exception e) {
e.printStackTrace();
}
图片处理工具
您可以通过可视化图片处理工具ImageStyleViewer直观地看到OSS图片处理结果。
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。
评论