Я думаю, что следующая процедура извлечет только высоты изображения для JPG, GIF и PNG или вернет условие === FALSE для 404 или другого типа изображения. Подпрограмма также делает это с наименьшими ресурсами сервера, потому что маршрут file_get_contents (), по-видимому, фактически загружает файл даже с добавленным ограничением байтов, как и getimagesize () загружает файл. Вы можете увидеть снижение производительности по сравнению с этим.
Эта процедура работает так, что она загружает из файла всего 300 байт. К сожалению, JPEG выталкивает свое значение высоты довольно далеко в файле, в отличие от GIF или PNG, и поэтому мне пришлось читать этот файл в байтах. Затем, с этими байтами, он ищет JFIF, PNG или GIF в этом заголовке, чтобы сообщить нам, какой это тип файла. Получив это, мы используем уникальные подпрограммы для каждого из них, чтобы проанализировать заголовок. Обратите внимание, что JPEG должен сначала использовать unpack () с H *, а затем сканировать для ffc2 или ffc0 и обрабатывать. GIF, однако, должен сначала распаковать () с h * (большая разница там).
Эта функция была создана мной методом проб и ошибок и может быть неправильной. Я запустил его на нескольких изображениях, и он, кажется, работает хорошо. Если вы найдете в этом ошибку, рассмотрите возможность сообщить мне.
В любом случае, эта система позволит мне определить высоту изображения, сбросить изображение и найти другое, если оно слишком высокое. Для любого случайного изображения, которое я нахожу, я устанавливаю ширину в теге IMG HTML, и оно автоматически изменяет высоту, но выглядит хорошо, только если изображение находится под определенной высотой. Кроме того, он проверяет 404, чтобы увидеть, не было ли изображение, которое мне вернул другой сервер, не для изображения, которое больше не существует или которое запрещает межсайтовую связь. И так как я вручную устанавливаю изображения на фиксированную ширину, мне не важно читать ширину изображения. Вы можете адаптировать эту функцию и, как правило, смотреть на несколько маленьких байт вперед, чтобы найти ширину изображения.
function getImageHeight($sURL) {
try {
$hSock = @ fopen($sURL, 'rb');
if ($hSock) {
while(!feof($hSock)) {
$vData = fread($hSock, 300);
break;
}
fclose($hSock);
if (strpos(' ' . $vData, 'JFIF')>0) {
$vData = substr($vData, 0, 300);
$asResult = unpack('H*',$vData);
$sBytes = $asResult[1];
if (strstr($sBytes, 'ffc2')) {
$sBytes = substr($sBytes, strpos($sBytes, 'ffc2') + 10, 4);
} else {
$sBytes = substr($sBytes, strpos($sBytes, 'ffc0') + 10, 4);
}
return hexdec($sBytes);
} elseif (strpos(' ' . $vData, 'GIF')>0) {
$vData = substr($vData, 0, 300);
$asResult = unpack('h*',$vData);
$sBytes = $asResult[1];
$sBytes = substr($sBytes, 16, 4);
$sBytes = strrev($sBytes);
return hexdec($sBytes);
} elseif (strpos(' ' . $vData, 'PNG')>0) {
$vData = substr($vData, 22, 4);
$asResult = unpack('n',$vData);
$nHeight = $asResult[1];
return $nHeight;
}
}
} catch (Exception $e) {}
return FALSE;
}