Php 解析外部HTML并返回图像

Php 解析外部HTML并返回图像,php,javascript,jquery,image-processing,Php,Javascript,Jquery,Image Processing,我正在建立一个依赖bookmarklet的网站。这些bookmarklet提取URL和一些其他元素。但是,我需要从用户书签页面中选择1个图像。目前我正在尝试使用PHP简单HTML DOM解析器 它按预期提取HTML,并按预期返回标记。然而,我想更进一步,只返回最小宽度为40px的图像。我知道函数getimagesize,但据我所知,这是一个资源密集型函数。有没有更好的方法来预处理图像并获得我想要的结果 谢谢 首先检查图像HTML标记是否具有宽度属性。如果超过40,跳过它。正如Matthew所提到

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

它按预期提取HTML,并按预期返回标记。然而,我想更进一步,只返回最小宽度为40px的图像。我知道函数getimagesize,但据我所知,这是一个资源密集型函数。有没有更好的方法来预处理图像并获得我想要的结果


谢谢

首先检查图像HTML标记是否具有宽度属性。如果超过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标记的挑剔程度来调整过程,通常更高的精度需要更多的时间,反之亦然。

显然,如果图像是远程的,getimagesize必须下载图像。除此之外,我不知道有任何性能问题。你在哪里读到的?你可以先检查img标签是否设置了宽度,然后再使用getimagesize。此外,标题信息包含大小。。您可以忽略任何大于某个大小的图像。即使您不知道尺寸,也可以假设100kb的图像不知道尺寸40x800@matthew,下载所有图像是性能问题。如果不需要的话,我不想浪费带宽。@thilo,你有没有从标题信息中检索大小的例子?你说的是文件大小,对吗?谢谢。@Thilo,这并没有告诉你图像的尺寸,甚至比例。您可以使用img标记将其缩放到您想要的任何位置。只有当某个特定站点习惯于在标签中添加实际尺寸时,它才会有用。谢谢!这有助于加快速度。现在我只需要弄清楚如何加快PHP简单HTML DOM解析器的速度:根据需要刮取的内容,正则表达式可能比解析DOM更快