网站中上传大尺寸图片,一般需要进行尺寸修改,格式转换等操作。
Python中可以使用Pillow进行处理。
views.py中处理上传图片(不做处理):
def upload(request):
image = request.FILES['image']
category = Service.objects.get(user=request.user)
albumImage = AlbumImage()
albumImage.image.save(image.name, image, save=False)
albumImage.save()
PIL处理后照样保存在storage中
(PIL修改图片过程省略,可参考官方文档http://pillow.readthedocs.org/en/latest/reference/Image.html#PIL.Image.format)
# -*- coding: utf-8 -*-
import os
import time
import random
IMAGE_FORMAT = "JPEG"
def random_file_name(name, format=None):
#ext = os.path.splitext(name)[1]
#new_name = time.strftime("%Y%m%d%H%M%S")
#new_name = new_name + "_%d"%(random.randint(100,999))
#name = new_name + ext
if format == IMAGE_FORMAT:
ext = ".jpg"
else:
ext = os.path.splitext(name)[1]
name = "%s_%d%s"%(time.strftime("%Y%m%d%H%M%S"), random.randint(100,999), ext)
return name
from PIL import Image
from django.core.files.base import ContentFile
from io import BytesIO
def resize_image_fit(imageField, file, image_w=None, image_h=None):
'''
resize the image file
:type imageField: ImageField
:type file: UploadedFile
:param: the upload file from request.FILE['xx']
:type image_w/image_h: int
:param: the resize width/height of the file
'''
image = Image.open(file)
w, h = image.size
#png to jpeg
if image.mode == "RGBA":
bg = Image.new("RGB", image.size)
bg.paste(image, image)
image = bg
#...处理部分省略...
file_buffer = BytesIO()
image.save(file_buffer, IMAGE_FORMAT)
content = ContentFile(file_buffer.getvalue())
name = random_file_name(file.name, IMAGE_FORMAT)#这是我对文件名的修改
imageField.save(name, content, save=False)
大功告成,放到CentOS服务器,发现无法运行:
decoder jpeg not available
encoder jpeg not available
jpeg图片处理没配置。安装如下:
yum install libjpeg
yum install libjpeg-devel
yum install freetype
yum install freetype-devel
*注意,Pillow需要在以上配置后安装才行,已经安装,则先卸载。
pip uninstall Pillow
pip install Pillow