根据尺寸过滤网页图片

时间:2012-08-08 14:01:27

标签: php

我想列出来自任何特定网页的所有图片,但是只想列出尺寸大于10kb的图像。我正在使用此代码列出列出该特定页面的所有图像的图像,但我不想列出尺寸小于10 kb的图像

$url="http://example.com";

$html = file_get_contents($url);

$doc = new DOMDocument();
@$doc->loadHTML($html);

$tags = $doc->getElementsByTagName('img');

foreach ($tags as $tag) {
   echo $tag->getAttribute('src');
}

2 个答案:

答案 0 :(得分:2)

PHP有一个filesize()函数,它返回bytes中的大小,并且可以这样使用:

echo "The file size in KB is ".(filesize('image.png')/1024);

唯一的问题是它不适用于远程文件。

所以,你可以:

  1. 将每个图像保存到临时目录
  2. 浏览它们并检查文件大小
  3. 如果尺寸<10,则将其删除
  4. 列出剩余的图片
  5. 修改

    正如Blowski指出的那样,从PHP 5.0开始,它将与一些URL包装器一起使用,所以你应该没问题。

    编辑2

    一些示例代码:

    foreach ($tags as $tag) {
       if (file_exists($tag->getAttribute('src')) && filesize($tag->getAttribute('src')) >= 10240)
         echo $src;
       }
    }
    

    编辑3

    我做了更多研究,发现HTTP(S)协议不支持stat。因此,必须将文件保存到您自己的服务器才能生效。

    编辑4

    使用get_headers()方法代替filesize()的解决方案。

    foreach ($tags as $tag) {
       $data = get_headers($tag->getAttribute('src'));
       if(($data["Content-Length"]/1024)>=10){
         echo $src;
       }
    }
    

答案 1 :(得分:2)

试试这个: -

$img = get_headers("http://static.adzerk.net/Advertisers/2564.jpg", 1);
$imgbit = $img["Content-Length"]/1024;

echo "The file size in KB is ".$imgbit;