申请了阿里的云存储OSS来存储图片。需要的时候直根据图片名,到阿里OSS中获得图片,然后切割成需要尺寸,最后返回给客户。获取后的切割操为内存操作,这样就不用占硬盘的IO了。
Image使用的是PIL。阿里的SDK。SDK在python2.6调试报错。SDK比较古老,如报MD5的错误可以将oss_util.py开始的“import md5”修改为“from hashlib import md5”
部分代码如下:
#!/bin/env python # -*- coding:utf-8 -*- # --------------------------------------------- # Filename: test.py # Revision: # Date: 2012-11-19 # Author: simonzhang # Email: simon-zzm@163.com # Web: www.simonzhang.net # --------------------------------------------- from oss import oss_api import Image from StringIO import StringIO #### 阿里云OSS的基础信息 HOST="oss.aliyuncs.com" ACCESS_ID = "xxxxxxxxx" SECRET_ACCESS_KEY = "xxxxxxxxxxxxx=" bucketName = "_photo" #### 从阿里云存储获取图片 def get_image(_image_name): my_store = oss_api.OssAPI(HOST, ACCESS_ID, SECRET_ACCESS_KEY) res = my_store.get_object(bucketName, _image_name).read() #### 开始切图 _cut_image = cut_image(res) return _cut_image #### 切图部分 def cut_image(_image_data): _get_image = Image.open(_image_data) #### 切成300X300的尺寸 tmp_image = _get_data.resize((300,300),Image.ANTIALIAS) #### 在内存中转换图片为string _tmp_file = StringIO("") tmp_image.save(_tmp_file, 'JPEG', quality=75) _tmp_file.seek(0) _tmp_image = _tmp_file.read() return _tmp_image
测试效果还可以,一个一核的CPU,512M内存,1M带宽跑满CPU使用率10%。买台最便宜的阿里主机,直接从OSS里获取就不用再收费了。框架用的是tornado。
发表评论