我正在使用simplehtmldom类来获取网站上的所有图片,
我正在尝试获取simplehtmldom返回的图像的宽度和高度,
我想在这里完成的是,如果图像宽度小于50像素,我不希望显示图像。
我尝试了getimagesize(),但是由于图像数量的原因,我认为它常常会超时。
有什么想法吗?
感谢。
答案 0 :(得分:1)
使用getimagesize()
非常慢,特别是如果您正在抓取网站并获得许多图片。 PHP必须先下载每个图像的全部内容,然后才能将数据传递给getimagesize()
,因此,如果您正在处理(例如)大型照片库,则每个图像可能会下载许多兆字节。
您可以采取一些措施来加快这一进程:
检查<img>
标记的高度/宽度属性,只捕获大于50的图像。由于网页创建者可能会拉伸或缩小图像,因此可能不一定准确。但它可以帮助您免于下载精确尺寸的小图像。
不是直接使用getimagesize()
获取图像,而是可以尝试仅获取每个图像的前几百个字节,其中包含图像标题信息。对于GIF / JPEG图像,高度/宽度将非常接近文件的开头,因此您可以节省文件传输开销。
增加脚本的执行时间。获取所有图像自然会是一个相当缓慢的过程,你最有可能遇到PHP的max_execution_time
评论后续:
好吧,如果没有高度/宽度,那么你可以直接跳到图像(或图像的第一位)并直接提取高度/宽度。检查标签中的高度/宽度只是为了省去必须首先获取图像的麻烦。
至于从HTML中提取高度/宽度,只需在使用SimpleHTMLDOM找到->getAttribute('width')
标记后使用->getAttribute('height')
和<img>
调用即可。像这样:
$dom = file_get_html('http://example.com/somepage.html');
$images = $dom->find('img');
foreach($images as $img) {
$h = $img->getAttribute('height');
$w = $img->getAttribute('width');
if (isnull($h) || (isnull($w)) {
// height and/or width not available in tag, so fetch image and get size that way
$h = ...
$w = ...
}
if (($h >= 50) && ($w >= 50)) {
// image is bigger than 50x50, so display it...
}
}
如果你剪切/粘贴它,这可能是行不通的,只是做了我的头脑,但它应该足以让你开始。
答案 1 :(得分:0)
由于您没有发布正在使用的任何源代码,因此很难帮助您。
您应该知道高度和宽度属性不一定在HTML中,因此simplehtmldom对您没用。你需要为此使用别的东西。您与getimagesize()
走在了正确的轨道上。如果您尝试访问的主机无法访问,此功能可能会超时。您需要使用set_time_limit()正确处理此问题。当getimagesize()返回0时,你也应该抓住。