resim boyutlandırma php bellek kullanımını azaltmak

0 Cevap php

Şu anda kullanıcılar, daha sonra makul bir boyutu aşağı resized gerek görüntüleri, upload edebilmek için gereken bir PHP web sitesi oluşturma. Benim php yapılandırma 50mb bir hafıza limiti ayarlanır.

Sorun 5mb civarında görüntüleri üzerinden yüklerken, php (nedeniyle çok bellek kullanımı için) görüntüyü yeniden boyutlandırmak mümkün değildir olmasıdır. Bir yeniden boyutlandırma görüntüleri bellek kullanımını optimize etmek zaten var diye merak edildi. İşte şu anda kullanmak ne:

class Image {


  var $uploaddir;
  var $quality = 80;
  var $ext;
  var $dst_r;
  var $img_r;
  var $img_w;
  var $img_h;
  var $output;
  var $data;
  var $datathumb;

  function setFile($src = null) {
   $this->ext = strtoupper(pathinfo($src, PATHINFO_EXTENSION));
   if(is_file($src) && ($this->ext == "JPG" OR $this->ext == "JPEG")) {
    $this->img_r = ImageCreateFromJPEG($src);
   } elseif(is_file($src) && $this->ext == "PNG") {
    $this->img_r = ImageCreateFromPNG($src);      
   } elseif(is_file($src) && $this->ext == "GIF") {
    $this->img_r = ImageCreateFromGIF($src);
   }
   $this->img_w = imagesx($this->img_r);
   $this->img_h = imagesy($this->img_r);
  }

  function resize($largestSide = 100) {
    $width = imagesx($this->img_r);
    $height = imagesy($this->img_r);
    $newWidth = 0;
    $newHeight = 0;

    if($width > $height){
      $newWidth = $largestSide;
      $newHeight = $height * ($newWidth / $width);
    }else{
      $newHeight = $largestSide;
      $newWidth = $width * ($newHeight / $height);
    }

   $this->dst_r = ImageCreateTrueColor($newWidth, $newHeight);
   imagecopyresampled($this->dst_r, $this->img_r, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height);
   $this->img_r = $this->dst_r;
   $this->img_h = $newHeight;
   $this->img_w = $newWidth;
  }

  function createFile($output_filename = null) {
   if($this->ext == "JPG" OR $this->ext == "JPEG" OR $this->ext == "PNG" OR $this->ext == "GIF") {
    imageJPEG($this->dst_r, $this->uploaddir.$output_filename.'.'."jpg", $this->quality);
   } /*elseif($this->ext == "PNG") {
    imagePNG($this->dst_r, $this->uploaddir.$output_filename.'.'.$this->ext);
   } elseif($this->ext == "GIF") {
    imageGIF($this->dst_r, $this->uploaddir.$output_filename.'.'.$this->ext);
   }*/
   $this->output = $this->uploaddir.$output_filename.'.'.$this->ext;
  }

  function setUploadDir($dirname) {
   $this->uploaddir = $dirname;
  }

  function flush() {
   $tempFile = $_FILES['Filedata']['tmp_name'];
   $targetPath = $_SERVER['DOCUMENT_ROOT'] . $_REQUEST['folder'] . '/';
   $targetFile = str_replace('//','/',$targetPath) . $_FILES['Filedata']['name'];

   imagedestroy($this->dst_r);
   unlink($targetFile);
   imagedestroy($this->img_r);

  }

Ve sonra yeniden boyutlandırma için yapmam:

  $tempFile = $_FILES['Filedata']['tmp_name'];
  $targetPath = $_SERVER['DOCUMENT_ROOT'] . $_REQUEST['folder'] . '/';
  $targetFile =  str_replace('//','/',$targetPath) . $_FILES['Filedata']['name'];

  move_uploaded_file ($tempFile, $targetFile);

  $image = new Image();
  $image->setFile($targetFile);
  $image->setUploadDir($targetPath);
  $image->resize(200);
  $image->createFile(md5($id));
  $image->flush();

Ben Uploadify kullanarak mevcut değilim, ama bu yükleme / komut dosyası yeniden boyutlandırma kullanır. Daha az bellek kullanır, böylece bu kodu optimize etmek için yine de var mı?

Teşekkürler :)

0 Cevap