无法在Django视图函数中使用PIL

2024-05-15 11:13:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图使一个功能,使缩略图的图像,但我无法打开图像文件。你知道吗

def create_thumbnail(request):
    slug = 'yftguhjkn'
    post = get_object_or_404(Post, slug=slug)
    if post:
        markdownify = import_string(MARKDOWNX_MARKDOWNIFY_FUNCTION)
        content = BeautifulSoup(markdownify(post.content), "html5lib")
        try:
            img_link = content.findAll('img')[0].get('src')
            print(img_link)
            filename = img_link.split('/')[-1]
            filename = filename.split('.')[0]
            file_path = settings.MEDIA_URL + settings.DRACEDITOR_UPLOAD_PATH + post.author.username + '/' + filename + '.jpg'
            print (file_path)
            #im = Image.open(img_link)
            im = Image.open(file_path)
            print (im.size)
        except:
            img_link = 'http://howtorecordpodcasts.com/wp-content/uploads/2012/10/YouTube-Background-Pop-4.jpg'
        return HttpResponse(img_link)

但这将是一个例外。有人能告诉我怎么修吗。你知道吗

def create_thumbnail(request):
    slug = 'yftguhjkn'
    post = get_object_or_404(Post, slug=slug)
    if post:
        markdownify = import_string(MARKDOWNX_MARKDOWNIFY_FUNCTION)
        content = BeautifulSoup(markdownify(post.content), "html5lib")
        #try:
        img_link = content.findAll('img')[0].get('src')
        print(img_link)
        filename = img_link.split('/')[-1]
        filename = filename.split('.')[0]
        file_path = settings.MEDIA_URL + settings.DRACEDITOR_UPLOAD_PATH + post.author.username + '/' + filename + '.jpg'
        print (file_path)
        im = Image.open(file_path)
        print (im.size)
        #except:
            #img_link = 'http://howtorecordpodcasts.com/wp-content/uploads/2012/10/YouTube-Background-Pop-4.jpg'
        return HttpResponse(file_path)

Tags: pathimggetsettingslinkcontentfilenamepost
1条回答
网友
1楼 · 发布于 2024-05-15 11:13:03

我认为枕头需要一个正确的路径来打开。你知道吗

im = Image.open(file_path)

settings.MEDIA_URL的公共输出是/media/对吗? 因此,您需要file_path是完整路径,例如:

/home/myuser/myenv/myproject/media/images/uploads/2017/05/29/foobar.png

如果你的settings.MEDIA_ROOT是:

/home/myuser/myenv/myproject/media

您可以使用:

os.path.join(settings.MEDIA_ROOT, settings.DRACEDITOR_UPLOAD_PATH, image_name)
# example:
'/home/myuser/myenv/myproject/media' + 'images/uploads/2017/05/29/' + 'foobar.png'

也可以使用BASE_DIR作为绝对目录。你知道吗

相关问题 更多 >