在Python中从URL获取图像尺寸

3

我想获取网站访问者看到的图片尺寸。

我正在使用beautiful soup,我获取到的图片链接类似于这样:

links = soup.findAll('img', {"src":True})

我获取图像尺寸的方法是使用:

link.has_key('height')
height = link['height']

同样地,宽度也可以使用类似的方法。然而,有些链接只有这些属性中的一个。我尝试过PIL库,但是如果直接下载,它给出的是实际图片尺寸。

是否有其他方法可以找到在网站上看到的图片尺寸?

1个回答

15

你的主要问题在于你正在搜索HTML源代码中有关高度和宽度的引用。在大多数情况下(当做得好时),图像在HTML中没有指定高度和宽度,此时它们将以图像文件本身的高度和宽度呈现。

要获取图像文件的高度和宽度,你需要实际查询并加载该文件,然后使用图像处理来检查其高度和宽度。如果这是你想要的,请告诉我,我将帮助你完成这个过程。

import urllib, cStringIO
from PIL import Image

# given an object called 'link'

SITE_URL = "http://www.targetsite.com"
URL = SITE_URL + link['src']
# Here's a sample url that works for demo purposes
# URL = "http://therealtomrose.therealrosefamily.com/wp-content/uploads/2012/08/headshot_tight.png"
file = cStringIO.StringIO(urllib.urlopen(URL).read())
im=Image.open(file)
width, height = im.size
if link.has_key('height'):
    height = link['height']  # set height if site modifies it
if link.has_key('width'):
    width = link['width']  # set width if site modifies it

需求: 此方法需要PIL库用于图像处理。

# from command line in a virtual environment
pip install PIL

我假设这将给我实际的图像尺寸。实际上,我正在寻找从网站上看起来像的图像,你知道我该怎么做吗?谢谢! - lost9123193
当然,我刚刚添加了对手动修改尺寸的网站的处理。我已经针对大多数图像尺寸未指定的网站优化了这个脚本,这也是大多数网站的情况。 - Tom Rose
谢谢!这正是我在我的代码中所做的。然而,我遇到了一个问题,即修改后的图像只有一个密钥存在。你知道另一种解决方法吗?谢谢! - lost9123193
这会下载图片吗? - Gocht
在检查HTML是否指定图像高度或宽度的部分,如果发生这种情况,难道不需要重新调整另一个维度吗?例如,如果我有一张600x600的图片,并在HTML中放置width=300,它将显示为300x300。 - sudo
@Gocht 是的,它会将其下载到 RAM 中,但不会保存文件。 - sudo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接