开发者社区> 问答> 正文

如何实现图片处理访问规则?

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

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


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


  • 通过URL的形式
    通过三级域名访问: http://bucket.<endpoint>/object?x-oss-process=image/action,parame_value
    [backcolor=transparent]Bucket:用户的IMG频道。

  • [backcolor=transparent]endpoint:用户的Bucket所在数据中心的访问域名。

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

  • [backcolor=transparent]action:用户对图片做的操作。

  • [backcolor=transparent]parame:用户对图片做的操作所对应的参数。

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

示例


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

如果是https方式,访问形式如下: https://image-demo.oss-cn-hangzhou.aliyuncs.com/example.jpg?x-oss-process=image/resize,w_200

通过用户自定义域名访问链接如下 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的样式。

[backcolor=transparent]Style命名规范:
  • 长度为1-63个字符。
  • 只能包含数字、大小写字母、下划线(_)、短横线(-)以及小数点(.)。


Channel (频道)


开通的数据中心及域名见 访问域名。Channel是IMG上的命名空间,也是计费、权限控制、日志记录等高级功能的管理实体。IMG名称在整个图片处理服务中具有全局唯一性,且不能修改。一个用户最多可创建10个Channel,但每个Channel中存放的Object的数量没有限制。
图片服务的数据中心和OSS的数据中心相对应。用户在OSS的某个数据中心上创建一个Bucket,再选择开通图片服务,对应的Channel也属于该数据中心。[backcolor=transparent]目前Channel跟OSS的Bucket相对应,即用户只能创建与自己在OSS上Bucket同名的Channel。
[backcolor=transparent]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 http://image-demo.oss-cn-hangzhou.aliyuncs.com/example.jpg?x-oss-process=style/style-example

如果是https方式,访问形式如下: 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为例: bucket = oss2.Bucket(oss2.Auth(access_key_id, access_key_secret), endpoint, bucket_name)
key = 'example.jpg'
new_pic = 'new-example.jpg'
process = "image/resize,m_fixed,w_100,h_100" //对于图片进行强制缩略
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
[tr=rgb(239, 251, 255)][td]Android SDK 图片处理OSSGetObjectTest.testAsyncGetImageWithXOssProcess

图片处理限制


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

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

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

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

展开
收起
青衫无名 2017-10-23 10:39:57 2166 0
0 条回答
写回答
取消 提交回答
问答排行榜
最热
最新

相关电子书

更多
“静态调用链路发现”应用场景分析及实践探索 立即下载
动态、高效,蚂蚁动态卡片的内核逻辑 立即下载
白山直播CDN流传递链路优化实践 立即下载