为了账号安全,请及时绑定邮箱和手机立即绑定

使用 domcrawler (Goutte) 获取抓取图像的大小

使用 domcrawler (Goutte) 获取抓取图像的大小

PHP
梦里花落0921 2021-11-26 16:27:28
对于我的网站,用户可以提交链接。我想要的是,当一个链接被提交时,它会解析被链接页面的 DOM,找到最大的图像(最大的是总宽度 + 总高度),并保存该页面上最大图像的缩略图。这样可以在链接旁边放一个缩略图。为了实现这一点,我在 Laravel 中使用了 Goutte 包和 Image Intervention 包。这是我到目前为止所做的:$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将返回src的形象,但我不知道如何查看图像的属性。做这个的最好方式是什么?保存页面上的所有图像然后查看它们的宽度/高度对我来说不是一个选择。
查看完整描述

1 回答

?
潇湘沐

TA贡献1816条经验 获得超6个赞

我相信你可以使用,


getimagesize()


https://www.php.net/manual/en/function.getimagesize.php


它将返回您正在寻找的属性数组。包括高度和宽度。它要求在您的服务器配置中将 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.


查看完整回答
反对 回复 2021-11-26
  • 1 回答
  • 0 关注
  • 122 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信