11月 22

python 获取阿里OSS存储图片,在内存中处理图片

  申请了阿里的云存储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。