Carica e Ridimensiona immagini al volo! Upload / Resize image

SPIEGAZIONE RAPIDA

Copia/Incolla il codice lungo qui sotto nel tuo file di destinazione file.
Usa la funzione (qui spiegata):

 uploadImage(
    "tagNameFile",
    "cartellaUploadScrivibile/",
    dimensioneMassimaInByte_1000=1mb,
    array('estensioni','permesse'),
    massimaDimensioneRidimensionamento,
    riscriviSeEsiste
 );

ESEMPIO:

 echo uploadImage("immagine","upload/",2000,array('jpg','png','gif'),500,false);

Verrà caricata immagine da form con name=”immagine” nella cartella scrivibile “upload”,
dimensione massima 2mb, estensioni permesse in array e una dimensione in pixel massima
di 500pixel, altrimenti viene ridimensionata in automatico e NON riscrive
eventuali immagini con lo stesso nome ma ne cambia il nome,
così da non avere problemi in caso di Avatar o similari.

FINE SPIEGAZIONE RAPIDA

QUANTE VOLTE! abbiamo avuto la necessità di caricare delle immagini in una cartella dopo averle inviate da un form?
Non penso ci sia un numero preciso ma sarà alto.

Beh con questo codice sarà tutto MOLTO più semplice, quanto una sola riga!

IMPORTANTE! E’ necessario avere la libreria grafica GD installata (oramai tutti gli hosting ce l’hanno quindi..)

E’ scritta mezza in inglese perché l’ho creata durante un progetto fatto con stranieri, ma tanto ci serve solo sapere una riga che vi spiego DOPO il codice.

function
/* Upload a file named 1arg in directory 2arg (with / at the end!) max filesize in byte (so 1000=1mb) with extensions in array, resizeSize max width-height, not resize if false and $rewriteIfExists if true add numbers at the end of the file, no rewrite */
uploadImage($imageFieldName,$directory="upload/",$maxFileSize=3500,$extensions=array('jpg','png','gif'),$resizeSize=500,$rewriteIfExists=false){
	
	
	 if(isset($_FILES[$imageFieldName]))
       {
           $file = $_FILES[$imageFieldName];
           if($file['error'] == UPLOAD_ERR_OK && is_uploaded_file($file['tmp_name']))
           {
	           
	           
	        	if($_FILES[$imageFieldName]['size'] > ($maxFileSize * 1000)){
				    return 'File troppo grande! Massimo '.($maxFileSize/1000).'MB';
				}
		    	$name = pathinfo($directory.$_FILES[$imageFieldName]['name'], PATHINFO_FILENAME);
				$extension = pathinfo($directory.$_FILES[$imageFieldName]['name'], PATHINFO_EXTENSION);
				
				
				# ====================================== #
				# ==== CHECK EXTENSION OF THE IMAGE ==== #
				# ====================================== #

				if(!in_array($extension, $extensions)){
					return "Formato non corretto ($extension). Accettati: .png.jpg.jpeg";
				}
				
				$increment = ''; //start with no suffix
				
				if(!$rewriteIfExists){
					while(file_exists($directory.$name . $increment . '.' . $extension)) {
					    $increment++;
					}
				}
				
				$basename = $name . $increment . '.' . $extension;
	           
	           
				move_uploaded_file($file['tmp_name'], $directory.$basename);
				
				if($resizeSize!=false&&$resizeSize!="") compressImage($directory.$basename,$directory.$basename,90,$resizeSize);
				
           }
       }
}


function
/* Comprime un immagine passata, sovrascrive quindi niente doppioni! */
compressImage($source, $destination="", $quality=90, $resizeSize = 800) {

	if($destination=="") $destination = $source;

	$info = getimagesize($source);

	if ($info['mime'] == 'image/jpeg') 
		$image = imagecreatefromjpeg($source);

	elseif ($info['mime'] == 'image/gif') 
		$image = imagecreatefromgif($source);

	elseif ($info['mime'] == 'image/png') 
		$image = imagecreatefrompng($source);


	//RESIZE PART
	$width = $resizeSize;
	$height = $resizeSize;

	list($width_orig, $height_orig) = $info;

	$ratio_orig = $width_orig/$height_orig;
	if ($width/$height > $ratio_orig) {
		$width = $height*$ratio_orig;
	} else {
		$height = $width/$ratio_orig;
	}
	
	$image_p = imagecreatetruecolor($width, $height);
	imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig);
	

	imagejpeg($image_p, $destination, $quality);
}
?>

Questo codice può anche non essere letto, a noi interessa solo una cosa ed è:

uploadImage();

Di cosa si tratta? Partiamo dall’HTML.

Dal nostro FORM di caricamento avremo ovviamente l’input file, che serve per scegliere il file.
Quel campo dovrà avere un name=”immagine” O se ne vogliamo usare un altro va bene, ricordiamocelo però perché andrà inserito!

Una volta inviato, nella pagina (es. action=”salva.php”) che riceverà il form copiamo e incolliamo il LUNGO codice scritto sopra.

Ora la magia. Inseriamo questa riga, che prenderà magicamente la nostra immagine e la salverà in una cartella, facendo attenzione ad un limite di peso, estensione e dimensione in pixel, si perché se vorremo un massimo di 1000px per larghezza o altezza basterà inserire 1000 nel campo apposito! Per ultimo possiamo decidere se sovrascrivere o meno un immagine con lo stesso nome già presente nella cartella di upload.

Ecco il codice:

uploadImage("immagine","upload/",2500,array('jpg','png','gif'),1000,false);

Ecco fatto, questa semplice riga farà tutto il “lavoro sporco” per noi.

Se hai domande o non riesci a farlo funzionare chiedi tranquillamente nei commenti (anche i complimenti sono ben accetti!)

Buon coding!

Annunci

, , , , , , , , , , , , ,

  1. #1 di Antonio il 15/10/2015 - 11:41

    ciao….articolo interessante…ed è quello che serve a me.
    Sono poco pratico: dove inserisco uploadImage(“immagine”,”upload/”,2500,array(‘jpg’,’png’,’gif’),1000,false);

    grazie
    antonio

  1. Caricare file da un qualsiasi elemento e inviarlo una volta scelto? SI PUO’! (trick) | Il Blog di Portapipe

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

%d blogger hanno fatto clic su Mi Piace per questo: