Функция preg_match_all для получения изображений (с определенным выходом и шириной-высотой) из URL-адреса

Во-первых, я более свежий для PHP. Я использую следующее выражение PHP для получения всех изображений с заданного URL-адреса.

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

но это выражение также извлекает все изображения с изображениями gif и изображениями размером 1 КБ.

Я хочу получить изображения с минимальной шириной 100 пикселей и расширением должно быть .png/.jpg

Пожалуйста, дайте мне решение, если у кого-то есть.

Спасибо


person user1309589    schedule 10.04.2012    source источник
comment
Есть ли в HTML намек на размер изображения?   -  person deceze♦    schedule 10.04.2012
comment
Указанный URL или веб-страница?   -  person Tamer Shlash    schedule 10.04.2012
comment
Нет намека на размер..$homepage = @file_get_contents($_POST['url']);   -  person user1309589    schedule 10.04.2012
comment
Таким образом, очевидно, вам нужно получить все URL-адреса изображений и использовать getimagesize(), передав ему URL-адрес изображения на удаленном сервере, чтобы получить его размер. Возможно, было бы эффективнее загрузить все файлы изображений и проанализировать их локально...   -  person Yaniro    schedule 10.04.2012


Ответы (2)


не проверено с использованием 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);
person scessor    schedule 10.04.2012

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];
person Mohammer    schedule 10.04.2012