PHP getimagesize () dosya türlerinin ne tür çıkmıyor?

6 Cevap php

Herkes PHP'nin getimagesize () işlevinden dönen 3 değer için tüm olası sonuçlarını biliyor mu? Örnek Aşağıda bu kod dönecektir:

  • $imageinfo['2'] = 2; a jpg görüntü için,
  • $imageinfo['2'] = 3; a png görüntü için,
  • $imageinfo['2'] = 0; a gif görüntü için.

Yukarıdaki sayılar doğru olmayabilir ama fikir olsun.

Ben php.net veya başka bir yerde 3 değer için tüm olası sonuçları listesinde bulamıyorum.

$imageinfo = getimagesize($imageurl);
$image_type  = $imageinfo['2'];

6 Cevap

Bu yürütün:

print_r(get_defined_constants());

Ve sonra IMAGETYPE_ öneki sabitler arayın. Benim PHP 5.3 yüklemesinde ben bu değerleri aldım:

[IMAGETYPE_GIF] => 1
[IMAGETYPE_JPEG] => 2
[IMAGETYPE_PNG] => 3
[IMAGETYPE_SWF] => 4
[IMAGETYPE_PSD] => 5
[IMAGETYPE_BMP] => 6
[IMAGETYPE_TIFF_II] => 7
[IMAGETYPE_TIFF_MM] => 8
[IMAGETYPE_JPC] => 9
[IMAGETYPE_JP2] => 10
[IMAGETYPE_JPX] => 11
[IMAGETYPE_JB2] => 12
[IMAGETYPE_SWC] => 13
[IMAGETYPE_IFF] => 14
[IMAGETYPE_WBMP] => 15
[IMAGETYPE_JPEG2000] => 9
[IMAGETYPE_XBM] => 16
[IMAGETYPE_ICO] => 17
[IMAGETYPE_UNKNOWN] => 0
[IMAGETYPE_COUNT] => 18

Gördüğünüz gibi Flash SWF görüntüler dikkate ve aslında getimagesize() bir SWF nesnesi genişliğini ve yüksekliğini okuyabilecek vardır. Ben ilk onu keşfetti bana burada da sözü, bu yüzden bir merak gibi görünüyordu.

Bu indeks PHP'nin birinin değerini içerir IMAGETYPE_XXX constants. Bunların bütün bir liste dibe doğru, bu sayfada bulabilirsiniz. Bu sayfa, her biri gerçek INT değeri vermez ama değerleri gerekli almak için birkaç yazdırmak gerekir. Belirli bir arıyorsanız da bir karşılaştırma kontrol yapabilirdi:

if ($imageinfo[2] == IMAGETYPE_IFF) {
  // Code here
}

Alıntı the manual:

Index 2 is one of the IMAGETYPE_XXX constants indicating the type of the image.

Ve sen GD tarafından tanımlanan diğer arasında, this page OSB Bu sabitleri bulabilirsiniz

getimagesize returns a value of one of the following IMAGETYPE_* sabit .

Eğer dönen convert değerine istiyorsanız getimagesize() endeksi olarak 2 daha fazla insan tarafından okunabilir bir şey, bu gibi bir işlevi kullanarak düşünebilirsiniz:

$imageTypeArray = array
(
    0=>'UNKNOWN',
    1=>'GIF',
    2=>'JPEG',
    3=>'PNG',
    4=>'SWF',
    5=>'PSD',
    6=>'BMP',
    7=>'TIFF_II',
    8=>'TIFF_MM',
    9=>'JPC',
    10=>'JP2',
    11=>'JPX',
    12=>'JB2',
    13=>'SWC',
    14=>'IFF',
    15=>'WBMP',
    16=>'XBM',
    17=>'ICO',
    18=>'COUNT'  
);

$size = getimagesize($filename);

$size[2] = $imageTypeArray[$size[2]];

Ya da benzer bir şey.

Yukarıda sadece integers görüntü sabit depolanmaz görüntü sabit names, vermek görüntü sabitler sayfaları anılacaktır. Yukarıdaki komut tamsayılar veririm, ama http://www.php.net/manual/en/function.exif-imagetype.php resmi bir PHP kılavuzu sayfada tamsayılar bir liste bulundu