SmartImage php

  • Creatore Discussione Creatore Discussione rober23
  • Data di inizio Data di inizio

rober23

Utente Attivo
4 Ott 2013
32
0
0
Ciao a tutti, uso da parecchi mesi la classe SmartImage per php per l'upload di immagini. mi accorgo che con immagini di grandi dimensioni non le carica. controllando all'interno della classe, mi accorgo che all'inizio c'è questo codice:

Codice:
public function SmartImage($src, $bigImageSize=false) {
    // In case of very big images (more than 1Mb)
    if ($bigImageSize)
      $this->setMemoryForBigImage($src);
    
	// set data
	$this->src = $src;
	$this->info = getimagesize($src);
	
    // open file
	if ( $this->info[2] == 2 )		$this->gdID = imagecreatefromjpeg($this->src);
	elseif ( $this->info[2] == 1 )	$this->gdID = imagecreatefromgif($this->src);
	elseif ( $this->info[2] == 3 ) 	$this->gdID = imagecreatefrompng($this->src);
	
	}
  
  /**
   * Set memory in case of very big images (more than 1Mb)
   * new SmartImage($src, true) to activate this function
   * Works with (PHP 4 >= 4.3.2, PHP 5) if compiled with --enable-memory-limit
   *   or PHP>=5.2.1
   * Thanks to Andrvm and to Bascunan for this feature
   */
	private function setMemoryForBigImage($filename) {
    $imageInfo    = getimagesize($filename);
	  $memoryNeeded = round(($imageInfo[0] * $imageInfo[1] * $imageInfo['bits'] * $imageInfo['channels'] / 8 + Pow(2, 16)) * 1.65);
	   
	  $memoryLimit = (int) ini_get('memory_limit')*10048576;
	
	  if ((memory_get_usage() + $memoryNeeded) > $memoryLimit) {
		 ini_set('memory_limit', ceil((memory_get_usage() + $memoryNeeded + $memoryLimit)/10048576).'M');
		 return (true);
    }
	  else return(false);
	}

dove immagino si calcola la dimensione dell'immagine. mentre il codice che uso quando richiamo la classe è:

Codice:
include("SmartImage089/SmartImage.class.php"); //importo la classe di smartimage
						$upload_dir="../images"; //cartella dove salvare le immagini
						
						//tolgo dal nome file i caratteri non consentiti
						$arr=array();
						$arr[]="'";
						$arr[]="\\";
						$file_name=str_replace($arr, "", $_FILES['img']['name']);
						$file_name=str_replace(".jpg", "", $file_name);
						
						//Ridimensionare un'immagine mantenendo le proporzioni e ottimizzando la risoluzione all'85%
						$num = rand();
						$img=new SmartImage($_FILES["img"]["tmp_name"]);
						$img->resize(250, 200);
						$img->saveImage($upload_dir."/".$file_name."-".$num.".jpg");
						$nomeimg = $file_name."-".$num.".jpg";

quindi se ho file di dimensioni in kilobyte, me le carica, superati i 10 mega non me li carica. come posso ovviare a tale problema?
 
o contatti il fornitore di hosting, o dal php.ini.

Credo che riesci anche a vederlo dalla funzione phpinfo();
ma non ne sono sicuro all 100%
 
Ciao a tutti,
Anche io ho lo stesso problema, anzi, simile e mi spiego meglio:
Io carico delle immagini con php, con la funzione move_uploaded_file la carico in una cartella, quindi carico l'immagine originale e tutto funziona, subito dopo con SmartImage prendo la stessa foto dalla variabile globale $_FILES['foto']['tmp_name'] e la ridimensiono per un thumbnail con la funzione resize di SmartImage, poi la salvo.
Mi reco nella cartella dedicata ai thumbnails e l'immagine non c'è. Ciò significa che SmartImage quell'immagine non la prende, anche se tutte le altre si.
Non capisco se il problema è relativo alle risoluzioni, ma credo di si perchè:
1: La dimensione dell'immagine è di soli 300KB
2: La risoluzione dell'immagine è 800x1600.
Credo che il problema sta nel fatto che quando si provano a caricare immagini con altezza superiore alla larghezza SmartImage non le prende in considerazione.
Questo è quello che mi pare di aver capito a furia di smanettarci, perchè altrimenti quale può essere il problema?

Fatemelo sapere grazie!
 

Discussioni simili