Ben aşağıdaki rutin JPG, GIF, PNG ve sadece görüntü yükseklikleri almak, ya da 404 veya diğer görüntü türü üzerinde === FALSE surette iade düşünüyorum. File_get_contents () rota () Dosyayı indirmek getimagesize yok gibi aslında, hatta ilave bayt kısıtlama ile dosya indirmek için görünür, çünkü rutin da az sunucu kaynağı ile yapar. Bu oranla performans isabet görebilirsiniz.
Bu rutin işleri yolu dosyadan sadece 300 bayt indirir olmasıdır. Ne yazık ki JPEG, GIF ya da PNG aksine bir dosya oldukça uzaklarda yüksekliği değerini iter ve böylece ben uzaklarda bayt dosyayı okumak zorunda kaldım. Sonra, bu bayt ile, bize bu hangi dosya türü bildirmek için bu başlığa JFIF, PNG, GIF ya da tarar. Biz var, biz o başlığı ayrıştırmak için her benzersiz rutinleri kullanın. JPEG ilk H * ile unpack () kullanın ve sonra ffc2 veya ffc0 ve süreç için tarama gerektiğini unutmayın. GIF, ancak, ilk h * (orada büyük bir fark) () ile açmak gerekir.
Bu fonksiyon, deneme yanılma ile bana göre oluşturulan ve yanlış olabilir. Ben birkaç görüntü üzerinde koştu ve iyi çalışması için görünür. Bunu bir hata bulursanız, bana bildirerek düşünün.
Her neyse, bu sistem bana bir görüntü yüksekliğini belirler ve görüntüyü atar ve çok uzun boylu, başka bulsun olacaktır. Ben bulmak rastgele olursa olsun görüntü, ben HTML IMG etiketinin genişliğini ayarlamak ve otomatik yüksekliği boyutlandırır - ama görüntü belli bir yüksekliğe altında sadece iyi görünüyor. Yanı sıra, benim için başka bir sunucu tarafından döndürülen görüntü artık yok ya da cross-site bağlanmasını yasaklayan bir görüntü için değil, görmek için bir 404 denetimi yapar. Ve ben manuel olarak sabit bir genişliğe görüntüleri kuruyorum beri, ben görüntü genişliği okumak için umurumda değil. Bu adaptasyon fonksiyonu ve genellikle bunu yapmak istesin görüntü genişlikleri bulmak için sadece birkaç küçük bayt ileri bakabilirsiniz.
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;
}