أسرع طريقة لتحديد دقة الصورة و نوع الملفات في PHP أو Unix سطر الأوامر ؟

StackOverflow https://stackoverflow.com/questions/90758

سؤال

أنا حاليا باستخدام يماغيماغيك لتحديد حجم الصور التي يتم تحميلها إلى الموقع.من خلال الدعوة يماغيماغيك في "التعرف" على سطر الأوامر يستغرق حوالي 0.42 ثانية لتحديد 1MB JPEG أبعاد جنبا إلى جنب مع حقيقة أن الحياة السياسية في فرنسا.أجد أنه بطيء بعض الشيء.

باستخدام Imagick PHP المكتبة حتى أبطأ كما يحاولوا الحمل كله 1MB في الذاكرة قبل القيام بأي معالجة الصورة (في هذه الحالة ، ببساطة تحديد حجم و نوع).

هل هناك أي حلول لتسريع هذه العملية من تحديد نوع الملف الذي الأبعاد التعسفي صورة الملف ؟ أنا يمكن أن يعيش معها فقط دعم JPEG و PNG.من المهم لي أن نوع الملف يتم تحديدها من خلال النظر في الملف رؤوس وليس مجرد تمديد.

تحرير:الحل يمكن أن يكون أداة سطر الأوامر يونكس يسمى PHP, كما أنا باستخدام يماغيماغيك في هذه اللحظة

هل كانت مفيدة؟

المحلول

آسف لا يمكنني أن أضيف هذا التعليق إلى الإجابة السابقة ولكن ليس لدي مندوب.القيام ببعض سريعة وقذرة الاختبار كما أنني وجدت أن exec("تحديد بينغ...حوالي 20 مرات أسرع من دون بينغ.ولكن getimagesize() ويبدو أن حوالي 200 مرة أسرع يزال.

لذا أود أن أقول getimagesize() هو أسرع طريقة.أنا فقط اختبار على jpg وليس على بابوا غينيا الجديدة.

الاختبار هو فقط

$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);
}

نصائح أخرى

إذا كنت تستخدم PHP مع دعم GD, يمكنك أن تجرب getimagesize().

هل حاولت

identify -ping filename.png

?

من المهم لي أن نوع الملف يتم تحديدها من خلال النظر في الملف رؤوس وليس مجرد تمديد.

لذلك يمكنك استخدام ملف الأوامر يونكس (orsome وظيفة php التي تطبق نفس الوظائف).

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

في الواقع, استخدام getimagesize () ، هل لا تحتاج إلى أن يكون GD جمعت في.

يمكنك أيضا استخدام mime_content_type() للحصول على نوع MIME.

exif_imagetype() هو أسرع من getimagesize().

$filename = "somefile";
$data = exif_imagetype($filename);
صدى "<PRE>";
print_r($data);
صدى "</PRE>";

الإخراج:

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 أقترح استخدام Imagick المكتبة بدلا من الدعوة exec().ميزة كنت تبحث عن Imagick::pingImage().

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top