Pillow似乎不能在函数内部工作,但在解释器上工作正常

时间:2016-09-17 01:33:22

标签: python pillow

下面的函数,一个更大的类的一部分在除了这个之外的所有图像上都能正常工作 - > http://www.worldbank.org/content/dam/wbr/About/Pres/jyk-hs-offical.png

def _fetch_image_size(self, image_url):
    size = None
    if '.svg' not in image_url:
        response = requests.get(image_url, headers=self._headers)
        if response.status_code == 200:
            response.raw.decode_content = True
            try:
                image = Image.open(io.BytesIO(response.content))
                size = image.size
            except (IOError, OSError) as error:
                print error
                print image_url
        response.close()
    return size

当上述函数作为类对象的一部分被调用时,它会引发我这个错误。

  

无法识别图像文件< _io.BytesIO对象位于0x1062e1b30>

但是在命令行解释器上,当我这样做时

import io, requests
from PIL import Image

response = requests.get('http://www.worldbank.org/content/dam/wbr/About/Pres/jyk-hs-offical.png')
response.raw.decode_content = True
image = Image.open(io.BytesIO(response.content))
print image.size

输出是,

(220, 220)

我无法弄清楚为什么会这样?

1 个答案:

答案 0 :(得分:0)

抱歉打扰你们。看来我需要在课堂上清理我的网址并寻找空白。 PIL在这里没有错。

如果有人感兴趣,这就是我如何指出错误的代码。

谢谢你的回复。我已经诊断出了这个问题。在这里粘贴我班上有问题的代码。

def _extract_image_urls(self, soup):
    """
    extracts all the <img src=''> tags

    Args:
        soup (obj): the BeautifulSoup object

    Returns:
        url (str): string for url
    """
    for img in soup.findAll("img", src=True):
        yield urlparse.urljoin(self._url, img["src"])

```

以上代码获取了我需要传递给_fetch_image_size()函数的所有网址。

我修改了我的_fetch_image_size功能以获得此功能

.....
response = requests.get(image_url, headers=self._headers)
print 'Request URL: {url}'.format(url=image_url)
print 'Response URL: {url}'.format(url=response.url)
.....

这是回复。

  

s = LinkScraper(&#39; http://www.worldbank.org/en/about/president/about-the-office/bio&#39;)   请求网址:http://www.worldbank.org/content/dam/wbr/img/mobile-menu-lines.png   回复网址:http://www.worldbank.org/content/dam/wbr/img/mobile-menu-lines.png

     

请求网址:http://www.worldbank.org/etc/designs/wbr/clientlibs/img/icon-search-black.png   回复网址:http://www.worldbank.org/etc/designs/wbr/clientlibs/img/icon-search-black.png

     

请求网址:http://www.worldbank.org/content/dam/wbr/About/Pres/jyk-hs-offical.png   回复网址:http://www.worldbank.org/404_response.htm   错误:无法识别图像文件&lt; _io.BytesIO对象位于0x112414830&gt;

传递给PIL.Image函数的响应是一个http响应,而不是一个图像! PIL在这里没有错。我需要清理我的网址,以便在这里寻找空白。

感谢@martineau抽出时间。非常感谢。

//鼠标。