unable to use PIL in django view function

时间:2021-03-14 19:32:50

I am trying to make a function that makes thumbnail of an image but I am unable to open the image file.

我正在尝试制作一个制作图像缩略图的功能,但我无法打开图像文件。

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)

But it is going to except statement. Can someone please tell me how to fix it.

但除了声明之外,它将会发生。有人可以告诉我如何解决它。

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)

1 个解决方案

#1


0  

I think the Pillow need a correct path (full path) from the image to open.

我认为枕头需要从图像中打开正确的路径(完整路径)。

im = Image.open(file_path)

the commond output of settings.MEDIA_URL is /media/ right? so, you need to file_path is the full path, eg:

设置的commond输出.MEDIA_URL是/ media /对吗?所以,你需要file_path是完整的路径,例如:

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

If your settings.MEDIA_ROOT is:

如果你的settings.MEDIA_ROOT是:

/home/myuser/myenv/myproject/media

You can doing with:

你可以这样做:

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'

you can also using BASE_DIR for absolute dir.

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

#1


0  

I think the Pillow need a correct path (full path) from the image to open.

我认为枕头需要从图像中打开正确的路径(完整路径)。

im = Image.open(file_path)

the commond output of settings.MEDIA_URL is /media/ right? so, you need to file_path is the full path, eg:

设置的commond输出.MEDIA_URL是/ media /对吗?所以,你需要file_path是完整的路径,例如:

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

If your settings.MEDIA_ROOT is:

如果你的settings.MEDIA_ROOT是:

/home/myuser/myenv/myproject/media

You can doing with:

你可以这样做:

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'

you can also using BASE_DIR for absolute dir.

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