1

首先,我对 PHP 比较陌生。我正在使用以下 PHP 表达式从给定的 url 获取所有图像。

@preg_match_all("<img.+?src=[\"'](.+?)[\"'].+?>", $homepage, $matches, PREG_SET_ORDER);

但是这个表达式也会获取所有带有 gif 图像和 1KB 大小的图像的图像。

我想获取最小宽度为 100 像素的图像,扩展名应为 .png/.jpg

如果有人有,请给我一个解决方案。

谢谢

4

2 回答 2

2

未经测试使用array_mapgetimagesize

// the domain is needed to get the width of the image
define('DOMAIN', 'http://test.com');

function checkSize($imagename) {
    $info = getimagesize(DOMAIN . $imagename[1]);
    if ($info[0] >= 100000) {
        return $imagename;
    }
}

$homepage = '<img src="test1.png"><img src="test2.gif"><img src="test3.jpg">';
// get all img-tags ending with "jpg" or "png"
preg_match_all("<img.+?src=[\"']([^\"]*\.(jpg|png))[\"'].+?>", $homepage, $matches, PREG_SET_ORDER);
// filter only images with width greater or equal 100k
$images = array_map('checkSize', $matches);
于 2012-04-10T06:55:06.470 回答
1
preg_match_all('~<img(.*?)((src=("|\')(.*?)(jpg|png)("|\'))(.*?)(width=("|\')[0-9]{3,}("|\'))|(width=("|\')[0-9]{3,}("|\'))(.*?)(src=("|\')(.*?)(jpg|png)("|\')))(.*?)>~i',trim($string),$matches);

$yourImagesArray = $matches[0];

我认为这应该有效=)至少它适用于我用于测试的每个img标签,这些标签在宽度属性中都有一个数字作为值。

/编辑:这是更好的阅读:

$src = '(src=("|\')(.*?)(jpg|png)("|\'))';
$width = '(width=("|\')[0-9]{3,}("|\'))';

preg_match_all('~<img(.*?)('.$src.'(.*?)'.$width.'|'.$width.'(.*?)'.$src.')(.*?)>~i',trim($string),$matches);

$yourImagesArray = $matches[0];
于 2012-04-10T07:14:33.967 回答