欢迎访问宙启技术站
智能推送

使用Python的UploadedFile()实现图片上传和缩略图生成

发布时间:2023-12-17 05:30:05

在Python中,可以使用Django框架提供的UploadedFile()类来实现图片上传和生成缩略图的功能。

首先,我们需要在Django项目的settings.py文件中配置上传文件保存的路径。可以使用MEDIA_ROOT和MEDIA_URL两个配置项来设置上传文件的保存路径和可访问的URL。

# settings.py

MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'

接下来,在Django的views.py文件中编写处理图片上传和生成缩略图的视图函数。我们需要使用Django提供的FileUploadHandler类来处理上传文件,并使用Pillow库来生成缩略图。

# views.py

from django.core.files.uploadedfile import UploadedFile
from django.shortcuts import render
from PIL import Image
import os

def upload(request):
    if request.method == 'POST':
        img_file = request.FILES.get('image')
        
        # 保存原始图片
        handle_uploaded_file(img_file)
        
        # 生成缩略图
        generate_thumbnail(img_file)
    
    return render(request, 'upload.html')

def handle_uploaded_file(file):
    destination = open(os.path.join('media', file.name), 'wb+')
    for chunk in file.chunks():
        destination.write(chunk)
    destination.close()

def generate_thumbnail(file):
    img = Image.open(file)
    img.thumbnail((200, 200))
    thumb_path = os.path.join('media', 'thumbnails', file.name)
    img.save(thumb_path)

在上述代码中,首先在upload函数中获取POST请求中的图片文件对象。然后,调用handle_uploaded_file函数将图片文件保存到指定路径下的media文件夹中。

接着,调用generate_thumbnail函数来生成缩略图。首先,使用Pillow库的Image.open()函数打开上传的图片文件,并调用thumbnail()方法生成缩略图。最后,使用save()方法将缩略图保存到指定路径下的media/thumbnails文件夹中。

最后,在Django的模板文件upload.html中,编写文件上传的表单。

<!-- upload.html -->
<form method="POST" enctype="multipart/form-data" action="{% url 'upload' %}">
    {% csrf_token %}
    <input type="file" name="image">
    <input type="submit" value="Upload">
</form>

这样,当用户选择一张图片文件并点击上传按钮时,上传的图片文件将被保存到media文件夹中,同时会生成一张缩略图保存到media/thumbnails文件夹中。

需要注意的是,在Django的urls.py文件中需要配置对应的URL路由,将upload视图函数映射到正确的URL。

# urls.py

from django.urls import path
from . import views

urlpatterns = [
    path('upload/', views.upload, name='upload'),
]

以上就是使用Python的UploadedFile()实现图片上传和缩略图生成的示例,通过Django框架和Pillow库的结合,可以实现方便的图片上传和生成缩略图的功能。