全部产品
存储与CDN 数据库 安全 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网
对象存储 OSS

图片处理访问规则

更新时间:2017-11-07 10:54:33

图片服务都是使用标准的HTTP的GET请求来访问的,所有的处理参数也在URL的QueryString中。

通过处理参数来请求缩略图

如果用户对原图进行一定的处理再返回,可有两种形式:

  • 通过URL的形式

    通过三级域名访问: http://bucket.<endpoint>/object?x-oss-process=image/action,parame_value

    • Bucket:用户的IMG频道。

    • endpoint:用户的Bucket所在数据中心的访问域名。

    • Object:在IMG中,用户操作图片的基本数据单元是Object。即OSS对应的Object,单个Object(即每张图片)允许的最大大小是20MB。

    • action:用户对图片做的操作。

    • parame:用户对图片做的操作所对应的参数。

  • 多个action之间组合形式

    多个action之间效果顺序执行,例如:image/resize,w_200/rotate,90表示图片先进行宽为200的缩放,再进行90度的旋转。

示例

假如请求Bucket是image-demo,该Bucket区域在华东1,对应的域名是oss-cn-hangzhou.aliyuncs.com,请求图片是example.jpg,对图片进行按目标宽度200进行缩略。

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

如果是https方式,访问形式如下:

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

通过用户自定义域名访问链接如下

  1. http://userdomain/object?x-oss-process=image/action,parame_value

通过样式来请求缩略图

Style(样式)

图片处理可将用户的图片处理操作和参数保存成一个别名,即样式。利用样式功能后,原本一系列操作,只需要用一个很短的URL就能实现相同的效果。

  • 一个Channel下面有多个样式,目前一个Channel允许最多有50个样式。
  • 样式适应于Channel下面的Object图像变化操作。假如在A Channel下面有样式,名称为abc,样式内容是100w.jpg(按宽缩略成100,保存成jpg格式)那么A Channel下面所有的Object都能使用样式abc,实现缩略成100w.jpg的效果。
  • 样式的作用范围只在一个Channel下,即A Channel不能使用B Channel的样式。

Style命名规范

  • 长度为1-63个字符。
  • 只能包含数字、大小写字母、下划线(_)、短横线(-)以及小数点(.)。

Channel (频道)

开通的数据中心及域名见访问域名。Channel是IMG上的命名空间,也是计费、权限控制、日志记录等高级功能的管理实体。IMG名称在整个图片处理服务中具有全局唯一性,且不能修改。一个用户最多可创建10个Channel,但每个Channel中存放的Object的数量没有限制。

图片服务的数据中心和OSS的数据中心相对应。用户在OSS的某个数据中心上创建一个Bucket,再选择开通图片服务,对应的Channel也属于该数据中心。目前Channel跟OSS的Bucket相对应,即用户只能创建与自己在OSS上Bucket同名的Channel。

Channel命名规范

  • 只能包括小写字母,数字,短横线(-)。
  • 必须以小写字母或者数字开头和结尾。
  • 长度必须在 3-63 字节之间。

为简化使用,用户可以将特定的处理方法保存为样式,这样以后调用同样的处理方法只需指定某个样式即可。使用样式来进行图片处理的URL形式如下:

http://userdomain/object?x-oss-process=style/name

示例

可以将上述处理参数保存成样式style-example。假如请求Bucket为image-demo,该Bucket区域在华东1,对应的域名是oss-cn-hangzhou.aliyuncs.com,请求图片是example.jpg,访问图片的样式是style-example,那么访问形式如下:

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

如果是https方式,访问形式如下:

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

使用SDK方式

除了public bucket可以直接通过url方式进访问,对于private的文件,我们一般采用SDK的方式来访问。因为图片处理服务都是 GET 操作,所以在Get Object基础上面添加process参数即可。

以Python SDK为例:

  1. bucket = oss2.Bucket(oss2.Auth(access_key_id, access_key_secret), endpoint, bucket_name)
  2. key = 'example.jpg'
  3. new_pic = 'new-example.jpg'
  4. process = "image/resize,m_fixed,w_100,h_100" //对于图片进行强制缩略
  5. bucket.get_object_to_file(key, new_pic, process=process)

OSS SDK使用图片服务,请参看SDK文档中的图片服务。部分SDK图片处理的链接见下表:

SDK 图片处理文档  使用示例
Java SDK 图片处理 ImageSample.java
Python SDK 图片处理 image.py
C# SDK 图片处理 ImageProcessSample.cs
PHP SDK 图片处理 Image.php
JS SDK 图片处理 object.test.js
C SDK 图片处理 oss_image_sample.c
iOS SDK 图片处理 AliyunOSSiOSTests.m testGetImage
Android SDK 图片处理 OSSGetObjectTest.testAsyncGetImageWithXOssProcess

图片处理限制

  • 图片处理支持的格式有:jpg、png、bmp、gif、webp、tiff。

  • 指定缩略图宽度或者高度时,在等比缩放的情况下,都会默认进行单边的缩放。在固定宽高的模式下,会默认在宽高一样的情况下进行缩放。

  • 对缩略后的图片大小有限制,目标缩略图的宽与高的乘积不能超过4096 x 4096, 且单边的长度不能超过4096 x 4。

  • 调用resize,默认不允许放大。如果请求图片比原图大,那么返回的仍然是原图。如果想得到放大的图片,需要增加参数调用limit,0

本文导读目录