PHP veya Unix komut satırında görüntü çözünürlüğü ve dosya türünü belirlemek için hızlı yolu?

7 Cevap php

Şu anda web sitesine yüklenen görüntülerin boyutunu belirlemek için ImageMagick kullanıyorum. O bir JPEG olduğunu gerçeği ile birlikte bir 1MB JPEG boyutlarını belirlemek için yaklaşık 0.42 saniye sürer komut satırında ImageMagick en "tespit" arayarak. Ben biraz yavaş buluyorum.

(Bu durumda, sadece kendi boyutunu ve türünü belirleme) görüntüye herhangi bir tedavi yapmadan önce bellekteki tüm 1MB yüklemek çalışılacaktır olarak Imagick PHP kütüphanesini kullanarak bile yavaş.

Hangi dosya türünü ve hangi keyfi bir resim dosyası var ölçüleri belirleme sürecini hızlandırmak için herhangi bir çözüm var mı? Ben sadece JPEG ve PNG destekleyen yaşayabilir. Bu dosya türü dosyanın başlıkları ve basitçe uzantısına bakarak belirlenir benim için önemli.

Edit: The solution can be a command-line tool UNIX called by PHP, much like the way I'm using ImageMagick at the moment

7 Cevap

Üzgünüm bir önceki cevaba bir yorum olarak bu ekleyemezsiniz ama temsilcisi yok. Bazı hızlı ve kirli test yapıyor ben de exec ("belirlemek-ping ... yaklaşık 20 kat daha hızlı-ping olmadan daha. Fakat getimagesize () yaklaşık 200 kat daha hızlı hala görünüyor bulundu.

Yani getimagesize () daha hızlı bir yöntem olduğunu söyleyebilirim. Ben sadece jpg ve png değil, test.

Test sadece bir

$files = array('2819547919_db7466149b_o_d.jpg', 'GP1-green2.jpg', 'aegeri-lake-switzerland.JPG');
foreach($files as $file){
  $size2 = array();
  $size3 = array();
  $time1 = microtime();
  $size = getimagesize($file);
  $time1 = microtime() - $time1;
  print "$time1 \n";
  $time2 = microtime();
  exec("identify -ping $file", $size2);
  $time2 = microtime() - $time2;
  print $time2/$time1 . "\n";
  $time2 = microtime();
  exec("identify $file", $size3);
  $time2 = microtime() - $time2;
  print $time2/$time1 . "\n";
  print_r($size);
  print_r($size2);
  print_r($size3);
}

Eğer GD desteği ile PHP kullanarak ediyorsanız deneyebilirsiniz getimagesize().

Denedin

identify -ping filename.png

?

Bu dosya türü dosyanın başlıkları ve basitçe uzantısına bakarak belirlenir benim için önemli.

Bunun için 'dosya' unix komutu (aynı özelliğe uygulayan orsome php fonksiyonu) kullanabilirsiniz.

/tmp$ file stackoverflow-logo-250.png
stackoverflow-logo-250.png: PNG image data, 250 x 70, 8-bit colormap, non-interlaced

Aslında, (getimagesize kullanmak için), size NOT GD içeri derlenmiş olması gerekiyor

Ayrıca MIME türü almak için mime_content_type () kullanabilirsiniz.

exif_imagetype () getimagesize daha hızlıdır ().

$filename = "somefile";
$data = exif_imagetype($filename);
echo "<PRE>";
print_r($data);
echo "</PRE>";

output:

Array (
        [FileName] => somefile
        [FileDateTime] => 1234895396
        [FileSize] => 15427
        [FileType] => 2
        [MimeType] => image/jpeg
        [SectionsFound] => 
        [COMPUTED] => Array
            (
                [html] => width="229" height="300"
                [Height] => 300
                [Width] => 229
                [IsColor] => 1
    	)
)

PHP kullanarak eğer ben Imagick kütüphane kullanarak yerine exec() çağırarak öneririm. Aradığınız özelliği Imagick::pingImage().