[英]simplehtmldom class and image
我正在使用simplehtmldom类从网站获取所有图像,
我试图获取由simplehtmldom返回的图像的宽度和高度,
我要在这里完成的是,如果图像宽度小于50px,我不希望显示图像。
我尝试了getimagesize(),但是由于图像数量的原因,它经常保持超时。
任何想法?
谢谢。
使用getimagesize()
的速度非常慢,尤其是当您正在抓取网站并获取许多图像时。 PHP必须先下载每个图像的全部内容,然后才能将数据传递给getimagesize()
,因此,如果您正在(例如)大型照相馆,则每个图像可以下载许多兆字节。
您可以采取一些措施来加快这一过程:
检查<img>
标记的height / width属性,仅获取大于50的图像。由于网页创建者可能会拉伸或缩小图像,它们不一定是准确的,但可以避免准确下载尺寸的小图像。
与其直接使用getimagesize()
直接获取图像,您可以尝试仅获取每个图像的前几百个字节,其中将包含图像头信息。 对于GIF / JPEG图像,高度/宽度将非常靠近文件的开头,因此您可以节省文件传输的开销。
增加脚本的执行时间。 自然地,获取所有图像将是一个相当缓慢的过程,并且您很可能会遇到PHP的max_execution_time
评论跟进:
好吧,如果没有高度/宽度,那么您可以直接跳到获取图像(或图像的第一位)并直接提取高度/宽度。 检查标签中的高度/宽度仅是为了节省您首先要获取图像的麻烦。
至于从HTML中提取高度/宽度,只要在SimpleHTMLDOM中找到<img>
标签,就可以使用->getAttribute('width')
和->getAttribute('height')
调用。 像这样:
$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...
}
}
如果仅剪切掉我的脑袋,这可能就行不通了,但这足以使您入门。
这是很难帮助你,因为你没有张贴您使用任何源代码。
您应该知道height和width属性不一定在HTML中,因此simplehtmldom对您没有用。 您将需要使用其他方式。 使用getimagesize()
使您处在正确的轨道上。 如果您尝试访问的主机无法访问,则此功能可能会超时。 您需要使用set_time_limit()适当地处理它。 当getimagesize()返回0时,您也应该捕获。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.