PHP Resim yeniden boyutlandırma / Relocate - Bunu hızlandırmak

3 Cevap php

Ben bir url alır ve görüntüyü yeniden boyutlandırmak ve ancak script klasörü oluşturmak için gerektiğinde çalıştırmak için yaklaşık .85 saniye alıyor ve yeniden boyutlandırma üzerinde 0,64 saniyedir benim yerel üzerinde saklamak için küçük bir fonksiyon yazdım. Aşağıda görüldüğü gibi şu anda JPEG ve PNG desteklemiştir.

Ben bu i benim için kabul edilemez olan var şu zamanlarda olduğu gibi, uzun sürüyor yapıyorum hızlı bir yöntem ya da bir şey olup olmadığını merak ediyorum, gerçekten bu hızlı yürütmek için almak istiyorum.

Herhangi bir düşünce / fikir büyük takdir edilmektedir.

Teşekkür ederiz!

  function getTime() {
      $timer = explode( ' ', microtime() );
      $timer = $timer[1] + $timer[0];
      return $timer;
  }

  function createThumb($thumb, $ids){
    $start = getTime();

    // File and new size
    $filename = $thumb;

    // Get new dimensions
    $img1 = getimagesize($filename);

    if ($img1[0] > $img1[1]) {
    	$percentage = ('72' / $img1[0]);
    } else {
    	$percentage = ('72' / $img1[1]);
    }
    $new_width = $img1[0] * $percentage;
    $new_height = $img1[1] * $percentage;

    // Resample
    $image_p = imagecreatetruecolor($new_width, $new_height);
    if($img1['mime']=='image/png'){
    	$image = imagecreatefrompng($filename);
    	imagealphablending($image_p, false);
    	imagesavealpha($image_p,true);
    	$transparent = imagecolorallocatealpha($image_p, 255, 255, 255, 127);
    	imagefilledrectangle($image_p, 0, 0, $new_width, $new_height, $transparent);
    	imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $img1[0], $img1[1]);
    }
    else {
    	$image = imagecreatefromjpeg($filename);
    }
    imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $img1[0], $img1[1]);



    $imgPath = '/foo/bar/location/'.$ids;
    $imgName ='';
    //category, product, support
    if(!is_dir($imgPath)) {
    	 mkdir($imgPath, 0777); 
    	 chmod($imgPath, 0777); 
    }

    if(!is_file($imgPath."/index.html")){
    		$ourFileName = $imgPath."/index.html";
    		$ourFileHandle = fopen($ourFileName, 'w') or die("can't open file");
    		fwrite($ourFileHandle,'<html><body>401</body></html>');
    		fclose($ourFileHandle);		
    }

    // Output
    if($img1['mime']=='image/png'){
    	$name = rand(1, 156406571337);
    	$imgName = date("y_m_d_h_m_s").$name.'.png';
    	imagepng($image_p, $imgPath.'/'.$imgName);

    } else {
    	$name = rand(1, 156406571337);
    	$imgName = date("y_m_d_h_m_s").$name.'.jpg';
    	imagejpeg($image_p, $imgPath.'/'.$imgName, 100);
    }
    $end = getTime();
    echo  '<strong>createImage</strong>: '.round($end - $start,4).' seconden<br />';
    exit;
    return $imgName;

  }

3 Cevap

Frederico, yea GD kütüphanesi sadece düz yavaş. : - \ Ben PHP ImageMagick kütüphanesi kullanarak öneririm. Sözdizimi süper braindead basittir:

$image = new Imagick('image.jpg');
$image->thumbnailImage(100,0); // 100px wide, 0 = preserve aspect ratio

Ben bu sizin için bir seçenek olduğunu umuyoruz.

Sonuçta, görüntü manipülasyonu bir CPU ve zaman yoğun eylemdir. 0.64 saniye herhangi bir yolla bir hoşgörüyle boyutlu görüntüde çirkin değildir. ImageMagick, yukarıda ifade edildiği gibi, biraz daha hızlı olması muhtemeldir, ama yine de çok uzun metin bir demet çıkış daha almaya gidiyor.

Belirtildiği hobodave olarak Imagick sınıf 5.1.3 öncesi PHP kurulumlarında mevcut değildir ve en azından ImageMagick 6.2.4 gerektiğini unutmayın.

Eğer geriye doğru uyumlu olacak şekilde uygulama gerekiyorsa, komut satırı üzerinden ImageMagick yürütme düşünmelisiniz.

Eğer backticks operator kullanabilirsiniz komut satırı çalıştırılabilir dosyaları çalıştırmak için.