使用 domcrawler (Goutte) 获取抓取图像的大小
Get size of scraped image with domcrawler (Goutte)
对于我的网站,用户可以提交 links。
我想要的是当一个link被提交时,它解析正在link编辑的页面的DOM,找到最大的图像(最大的是总宽度+总高度),并保存该页面上最大图像的缩略图。
这样一来,缩略图就可以放在 link 旁边。
为了实现这一点,我将 Goutte 包和图像干预包与 Laravel 一起使用。
这是我到目前为止所做的:
$goutteClient = new Client();
$guzzleClient = new GuzzleClient(array(
'timeout' => 15,
));
$goutteClient->setClient($guzzleClient);
$crawler = $goutteClient->request('GET', 'https://www.reddit.com');
$result = $crawler
->filterXpath('//img')
->extract(array('src'));
foreach ($result as $image) {
//get the width and height of each $image
}
//$file = image with the biggest width + height
$thumbnail = Image::make($file);
$large->resize(900, 900, function ($constraint) {
$constraint->aspectRatio();
$constraint->upsize();
});
注释掉的部分是我正在努力解决的问题。
foreach
会return图片的src
,但是不知道怎么查看图片的属性
最好的方法是什么?保存页面上的所有图像然后查看它们 width/height 对我来说不是一个选择。
我相信你可以使用,
getimagesize()
https://www.php.net/manual/en/function.getimagesize.php
它将 return 您要查找的属性的数组。包括高度和宽度。它要求在您的服务器配置中将 allow_url_fopen 设置为 true。假设图像是远程的。
你的情况也是如此。它可能看起来像...
$files = [];
// maybe pass this by reference as &$image and store the totals in the same array, otherwise
foreach ($images as $image) {
$attributes = getimagesize($image);
$height = $attributes[0];
$width = $attributes[1];
$total = $height + $width;
// bind the total as the id of the array, if there are multiple matching totals, it will always be the last
// image that matches that is selected.
$files[$total] = $image;
}
// then you can use any standard logic to extract the data from the new array.
对于我的网站,用户可以提交 links。
我想要的是当一个link被提交时,它解析正在link编辑的页面的DOM,找到最大的图像(最大的是总宽度+总高度),并保存该页面上最大图像的缩略图。
这样一来,缩略图就可以放在 link 旁边。
为了实现这一点,我将 Goutte 包和图像干预包与 Laravel 一起使用。
这是我到目前为止所做的:
$goutteClient = new Client();
$guzzleClient = new GuzzleClient(array(
'timeout' => 15,
));
$goutteClient->setClient($guzzleClient);
$crawler = $goutteClient->request('GET', 'https://www.reddit.com');
$result = $crawler
->filterXpath('//img')
->extract(array('src'));
foreach ($result as $image) {
//get the width and height of each $image
}
//$file = image with the biggest width + height
$thumbnail = Image::make($file);
$large->resize(900, 900, function ($constraint) {
$constraint->aspectRatio();
$constraint->upsize();
});
注释掉的部分是我正在努力解决的问题。
foreach
会return图片的src
,但是不知道怎么查看图片的属性
最好的方法是什么?保存页面上的所有图像然后查看它们 width/height 对我来说不是一个选择。
我相信你可以使用,
getimagesize()
https://www.php.net/manual/en/function.getimagesize.php
它将 return 您要查找的属性的数组。包括高度和宽度。它要求在您的服务器配置中将 allow_url_fopen 设置为 true。假设图像是远程的。
你的情况也是如此。它可能看起来像...
$files = [];
// maybe pass this by reference as &$image and store the totals in the same array, otherwise
foreach ($images as $image) {
$attributes = getimagesize($image);
$height = $attributes[0];
$width = $attributes[1];
$total = $height + $width;
// bind the total as the id of the array, if there are multiple matching totals, it will always be the last
// image that matches that is selected.
$files[$total] = $image;
}
// then you can use any standard logic to extract the data from the new array.