解析外部HTML并返回图像


Parse external HTML and return images

我正在建立一个依赖bookmarklet的网站。这些bookmarklet提取URL和其他一些元素。但是,我需要从用户书签的页面中选择1个图像。目前我试图使用PHP简单的HTML DOM解析器http://simplehtmldom.sourceforge.net/

按预期提取HTML,并按预期返回标记。然而,我想更进一步,只返回最小宽度为40px的图像。我知道函数getimagesize(),但据我所知,这是资源沉重。是否有更好的方法可以预处理图像并达到我正在寻找的结果?

谢谢!

首先检查图像HTML标签是否有width属性。如果超过40,跳过它。正如Matthew提到的,当人们将大图像缩小到40px宽时,它会得到误报,但这没什么大不了的;这一步的重点是快速清除前十几个明显太大的图像。

一旦脚本捕捉到一个图像说它的宽度在40px以下,检查标题信息,根据文件的大小推断出一个一般的宽度。这比getimagesize快,因为你不需要下载图像来获取信息。

function get_image_kb($path) {
    $headers = get_headers($path);
    $len = explode(" ",$headers[6]);
    return $len[1];
}

$imageKb = get_image_kb('test1.jpg');
// I'm going to gander 40x80 is about 2000kb
$cutoffSize = 2000;
if ($imageKb < $cutoffSize) {
    // this is the one!
}
else {
    // it was a phoney, keep scraping
}

将其设置为2000kb也会让100x30的图像通过,这不是很好。

然而,在这一点上,您已经清除了大多数巨大的800kb文件,这些文件会真正减慢您的速度,因为我们知道它小于2kb,所以使用getimagesize()测试这个文件以获得准确的宽度并不太费力。

你可以根据你对40px标记的挑剔程度来调整这个过程,通常更高的精度需要更多的时间,反之亦然。