首先,我对 PHP 比较陌生。我正在使用以下 PHP 表达式从给定的 url 获取所有图像。
@preg_match_all("<img.+?src=[\"'](.+?)[\"'].+?>", $homepage, $matches, PREG_SET_ORDER);
但是这个表达式也会获取所有带有 gif 图像和 1KB 大小的图像的图像。
我想获取最小宽度为 100 像素的图像,扩展名应为 .png/.jpg
如果有人有,请给我一个解决方案。
谢谢
首先,我对 PHP 比较陌生。我正在使用以下 PHP 表达式从给定的 url 获取所有图像。
@preg_match_all("<img.+?src=[\"'](.+?)[\"'].+?>", $homepage, $matches, PREG_SET_ORDER);
但是这个表达式也会获取所有带有 gif 图像和 1KB 大小的图像的图像。
我想获取最小宽度为 100 像素的图像,扩展名应为 .png/.jpg
如果有人有,请给我一个解决方案。
谢谢
未经测试使用array_map和getimagesize:
// 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);
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];