gpt4 book ai didi

php - 如何改进图像抓取(使用 PHP 和 JS)以模仿 Facebook 预览器

转载 作者:行者123 更新时间:2023-12-02 05:11:35 25 4
gpt4 key购买 nike

我在 PHP+JS 中开发了一个图像抓取机制,它允许用户共享 URL 并获得呈现的预览(非常类似于共享链接时 Facebook 的预览器)。然而,整个过程有时会变慢或有时会获取错误的图像,所以总的来说,我想知道如何改进它,尤其是它的速度和准确性。诸如更快地解析 DOM 或更快地获取图像大小之类的东西。这是我正在使用的过程,对于那些想了解更多信息的人:

一个。使用 PHP 获取页面的 HTML(我实际上使用了 CakePHP's classes 之一,它又使用 fwritefread 来获取 HTML。我想知道 cURL 是否会是明显更好)。

B.使用 DOMDocument 解析 HTML获取 img 标签,同时过滤掉任何不是 png、jpg 或 gif 的“图像”(您知道,有时人们会在 img 标签内放置跟踪脚本)。

$DOM = new DOMDocument();  
@$DOM->loadHTML($html); //$html here is a string returned from step A
$images = $DOM->getElementsByTagName('img');
$imagesSRCs = array();
foreach ($images as $image) {
$src = trim($image->getAttribute('src'));
if (!preg_match('/\.(jpeg|jpg|png|gif)/', $src)) {
continue;
}
$src = urldecode($src);
$src = url_to_absolute($url, $src); //custom function; $url is the link shared
$imagesSRCs[] = $src;
}
$imagesSRCs = array_unique($imagesSRCs); // eliminates copies of a same image

C.将包含所有这些图像标签的数组发送到使用 Javascript(特别是 JQuery)处理的页面。此处理主要包括丢弃小于 80 像素的图像(因此我不会得到空白 gif、数百个小图标等)。因为它必须计算每个图像的大小,所以我决定使用 JS 而不是 PHP 的 getimagesize(),因为它非常慢。因此,当浏览器加载图像时,它会执行以下操作:

$('.fetchedThumb').load(function() {  
$smallestDim = Math.min(this.width, this.height);
if ($smallestDim < 80) {
$(this).parent().parent().remove(); //removes container divs and below
}
});

最佳答案

与其像这样下载内容,不如创建一个使用 wkhtmltoimage 或 PhantomJS 之类的服务器端组件来呈现页面图像,然后将图像缩小到预览大小。

关于php - 如何改进图像抓取(使用 PHP 和 JS)以模仿 Facebook 预览器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5303944/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com