- Home
- Categorie
- Coding e Sistemistica
- Coding
- Upload e ridimensionamento immagini
-
Upload e ridimensionamento immagini
Qualcuno mi può aiutare ha modificare questo codice per l'upload delle immagini.
Attualmente funziona in questo modo:
Viene ritagliato un quadrato con lato uguale alla lunghezza del lato più corto della foto caricata:
Dopodiché il quadrato viene ridotto a 120x120 pixel e poi salvato nella cartella "foto".E qui mi sono bloccato...
Adesso vorrei far si che oltre a salvare la miniatura da 120x120, mi salvasse anche un altra miniatura da 200x200 e poi una copia dell'immagine originale.
ES:
L'utente carica una foto con nome: foto.jpgnella cartella foto ritrovo:
foto.jpg (dimensioni originali)
foto_med.jpg (240x240)
foto_sma.jpg (120x120)Potete aiutarmi... Grazie
Questo è il codice:
"... se volete provarlo il codice è completo, quindi salvandolo in un file .php e avviandolo da php fuziona"[php]
<?php ini_set("memory_limit", "200000000"); // for large images so that we do not get "Allowed memory exhausted"?>
<?php
// upload the file
if ((isset($_POST["submitted_form"])) && ($_POST["submitted_form"] == "image_upload_form")) {
// file needs to be jpg,gif,bmp,x-png and 4 MB max
if (($_FILES["image_upload_box"]["type"] == "image/jpeg" || $_FILES["image_upload_box"]["type"] == "image/pjpeg" || $_FILES["image_upload_box"]["type"] == "image/gif" || $_FILES["image_upload_box"]["type"] == "image/x-png") && ($_FILES["image_upload_box"] < 4000000))
{
// if uploaded image was JPG/JPEG
if($_FILES["image_upload_box"]["type"] == "image/jpeg" || $_FILES["image_upload_box"]["type"] == "image/pjpeg"){
$image_source = imagecreatefromjpeg($_FILES["image_upload_box"]["tmp_name"]);
}
// if uploaded image was GIF
if($_FILES["image_upload_box"]["type"] == "image/gif"){
$image_source = imagecreatefromgif($_FILES["image_upload_box"]["tmp_name"]);
}
// BMP doesn't seem to be supported so remove it form above image type test (reject bmps)
// if uploaded image was BMP
if($_FILES["image_upload_box"]["type"] == "image/bmp"){
$image_source = imagecreatefromwbmp($_FILES["image_upload_box"]["tmp_name"]);
}
// if uploaded image was PNG
if($_FILES["image_upload_box"]["type"] == "image/x-png"){
$image_source = imagecreatefrompng($_FILES["image_upload_box"]["tmp_name"]);
}
$remote_file = "foto/".$_FILES["image_upload_box"]["name"];
imagejpeg($image_source,$remote_file,80);
chmod($remote_file,0644);
$new_w = 120;
$new_h = 120;
$orig_w = imagesx($image_source);
$orig_h = imagesy($image_source);$w_ratio = ($new_w / $orig_w);
$h_ratio = ($new_h / $orig_h);
// PAESAGGIO
if ($orig_w > $orig_h ) {
$crop_w = round($orig_w * $h_ratio);
$crop_h = $new_h;
$x = ($orig_w - $orig_h) / 2;// RITRATTO
} elseif ($orig_w < $orig_h ) {
$crop_h = round($orig_h * $w_ratio);
$crop_w = $new_w;
$y = ($orig_h - $orig_w) /2;
// QUADRATO
} else {
$crop_w = $new_w;
$crop_h = $new_h;
}
$new_image = imagecreatetruecolor($new_w,$new_h);
$image_source = imagecreatefromjpeg($remote_file);
imagecopyresampled($new_image, $image_source, 0, 0, $x, $y, $crop_w, $crop_h, $orig_w, $orig_h);
imagejpeg($new_image,$remote_file,80);
imagedestroy($new_image);
imagedestroy($image_source);header("Location: submit.php?upload_message=image uploaded&upload_message_type=success&show_image=".$_FILES["image_upload_box"]["name"]);
exit;
}
else{
header("Location: submit.php?upload_message=make sure the file is jpg, gif or png and that is smaller than 4MB&upload_message_type=error");
exit;
}
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "***************************************">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Image Upload with resize</title>
<style type="text/css">
<!--
body,td,th {
font-family: Arial, Helvetica, sans-serif;
color: #333333;
font-size: 12px;
}
.upload_message_success {
padding:4px;
background-color:#009900;
border:1px solid #006600;
color:#FFFFFF;
margin-top:10px;
margin-bottom:10px;
}
.upload_message_error {
padding:4px;
background-color:#CE0000;
border:1px solid #990000;
color:#FFFFFF;
margin-top:10px;
margin-bottom:10px;
}
-->
</style></head>
<body>
<h1 style="margin-bottom: 0px">INSERIMENTO IMMAGINE</h1><?php if(isset($REQUEST['upload_message'])){?>
<div class="upload_message<?php echo $_REQUEST['upload_message_type'];?>">
<?php echo htmlentities($_REQUEST['upload_message']);?>
</div>
<?php }?><form action="submit.php" method="post" enctype="multipart/form-data" name="image_upload_form" id="image_upload_form" style="margin-bottom:0px;">
<label>- Dimensione massima: 4MB - Estensioni possibili: jpg, gif, png.</label><br />
<input name="image_upload_box" type="file" id="image_upload_box" size="40" />
<input type="submit" name="submit" value="Upload image" />
<br />
<br /><input name="submitted_form" type="hidden" id="submitted_form" value="image_upload_form" />
</form><?php if(isset($_REQUEST['show_image']) and $_REQUEST['show_image']!=''){?>
<p>
<img src="foto/<?php echo $_REQUEST['show_image'];?>" />
</p>
<?php }?></body>
</html>
[/php]
-
Nessuno?
-
C'è nessuno che può darmi una mano, sono completamente bloccato...
-
Ciao
ti allego solo parte php, è una soluzione diversa a quello che hai tu nel codice.
Questo ti salva la foto in originale, ti crea 2 resize, uno da 120 e uno da 240 come hai specificato.P.S. non ho testato il codice che ti allego.
<?php ini_set("memory_limit", "200000000"); // for large images so that we do not get "Allowed memory exhausted"?> <?php // upload the file if ((isset($_POST["submitted_form"])) && ($_POST["submitted_form"] == "image_upload_form")) { // file needs to be jpg,gif,bmp,x-png and 4 MB max if (($_FILES["image_upload_box"]["type"] == "image/jpeg" || $_FILES["image_upload_box"]["type"] == "image/pjpeg" || $_FILES["image_upload_box"]["type"] == "image/gif" || $_FILES["image_upload_box"]["type"] == "image/x-png") && ($_FILES["image_upload_box"] < 4000000)) { $remote_file = "foto/".$_FILES["image_upload_box"]["name"]; chmod($remote_file,0644); // carico la foto originale move_uploaded_file($_FILES['image_upload_box']['tmp_name'], $remote_file); // procedo a ridimensionare la foto per 240 e per 120 include("include/class.image-resize.php"); $obj = new img_opt(); $obj->max_width(240); $obj->max_height(240); $obj->image_path($remote_file); $obj->image_resize(); $obj2 = new img_opt(); $obj2->max_width(120); $obj2->max_width(120); $obj2->image_path($remote_file); $obj2->image_resize(); header("Location: submit.php?upload_message=image uploaded&upload_message_type=success&show_image=".$_FILES["image_upload_box"]["name"]); exit; } else{ header("Location: submit.php?upload_message=make sure the file is jpg, gif or png and that is smaller than 4MB&upload_message_type=error"); exit; } } ?>
questa è la classe utilizzata per il resize (class.image-resize.php).
<?PHP class img_opt { var $max_width; var $max_height; var $path; var $img; var $new_width; var $new_height; var $mime; var $image; var $width; var $height; function max_width($width) { $this->max_width = $width; } function max_height($height) { $this->max_height = $height; } function image_path($path) { $this->path = $path; } function get_mime() { $img_data = getimagesize($this->path); $this->mime = $img_data['mime']; } function create_image() { switch($this->mime) { case 'image/jpeg': $this->image = imagecreatefromjpeg($this->path); break; case 'image/gif': $this->image = imagecreatefromgif($this->path); break; case 'image/png': $this->image = imagecreatefrompng($this->path); break; } } function image_resize() { set_time_limit(120); $this->get_mime(); $this->create_image(); $this->width = imagesx($this->image); $this->height = imagesy($this->image); $this->set_dimension(); $image_resized = imagecreatetruecolor($this->new_width,$this->new_height); imagecopyresampled($image_resized, $this->image, 0, 0, 0, 0, $this->new_width, $this->new_height,$this->width, $this->height); imagejpeg($image_resized,$this->path); } //######### FUNCTION FOR RESETTING DEMENSIONS OF IMAGE ########### function set_dimension() { if($this->width==$this->height) { $case = 'first'; } elseif($this->width > $this->height) { $case = 'second'; } else { $case = 'third'; } if($this->width>$this->max_width && $this->height>$this->max_height) { $cond = 'first'; } elseif($this->width>$this->max_width && $this->height<=$this->max_height) { $cond = 'first'; } else { $cond = 'third'; } switch($case) { case 'first': $this->new_width = $this->max_width; $this->new_height = $this->max_height; break; case 'second': $ratio = $this->width/$this->height; $amount = $this->width - $this->max_width; $this->new_width = $this->width - $amount; $this->new_height = $this->height - ($amount/$ratio); break; case 'third': $ratio = $this->height/$this->width; $amount = $this->height - $this->max_height; $this->new_height = $this->height - $amount; $this->new_width = $this->width - ($amount/$ratio); break; } } } ?>
ciao
-
Grazie per l'aiuto, l'ho provato però mi restituisce questi errori e non capisco il motivo:
**```
**
Warning: chmod() [...]: No such file or directory in C:\Program Files (x86)\EasyPHP-5.3.1\www\submit.php on line 11Warning: include(include/class.image-resize.php) [...]: failed to open stream: No such file or directory in C:\Program Files (x86)\EasyPHP-5.3.1\www\submit.php on line 19
Warning: include() [...]: Failed opening 'include/class.image-resize.php' for inclusion (include_path='.;C:\php5\pear') in C:\Program Files (x86)\EasyPHP-5.3.1\www\submit.php on line 19
Fatal error: Class 'img_opt' not found in C:\Program Files (x86)\EasyPHP-5.3.1\www\submit.php on line 20
**
-
Ciao
si hai ragione, macava qualche cosa.
provalo così, io non l'ho provato, attendo alle riche dove vengono definiti i nomi dei 3 file, devi creare le cartelle dove andranno le foto interessate.
<?php ini_set("memory_limit", "200000000"); // for large images so that we do not get "Allowed memory exhausted"?> <?php // upload the file if ((isset($_POST["submitted_form"])) && ($_POST["submitted_form"] == "image_upload_form")) { // file needs to be jpg,gif,bmp,x-png and 4 MB max if (($_FILES["image_upload_box"]["type"] == "image/jpeg" || $_FILES["image_upload_box"]["type"] == "image/pjpeg" || $_FILES["image_upload_box"]["type"] == "image/gif" || $_FILES["image_upload_box"]["type"] == "image/x-png") && ($_FILES["image_upload_box"] < 4000000)) { $remote_file_full = "foto/full/".$_FILES["image_upload_box"]["name"]; $remote_file_240 = "foto/resize_240/".$_FILES["image_upload_box"]["name"]; $remote_file_120 = "foto/resize_120/".$_FILES["image_upload_box"]["name"]; chmod($remote_file_full,0644); chmod($remote_file_240,0644); chmod($remote_file_120,0644); // carico la foto originale move_uploaded_file($_FILES['image_upload_box']['tmp_name'], $remote_file_full); copy($remote_file_full,$remote_file_240); copy($remote_file_full,$remote_file_120); // procedo a ridimensionare la foto per 240 e per 120 include("include/class.image-resize.php"); $obj = new img_opt(); $obj->max_width(240); $obj->max_height(240); $obj->image_path($remote_file_240); $obj->image_resize(); $obj2 = new img_opt(); $obj2->max_width(120); $obj2->max_width(120); $obj2->image_path($remote_file_120); $obj2->image_resize(); header("Location: submit.php?upload_message=image uploaded&upload_message_type=success&show_image=".$_FILES["image_upload_box"]["name"]); exit; } else{ header("Location: submit.php?upload_message=make sure the file is jpg, gif or png and that is smaller than 4MB&upload_message_type=error"); exit; } } ?>
fammi sapere
ciao
-
Ho creato le cartelle in questo modo, nella cartella "www" di easyphp ho creato le cartelle:
foto/full
foto/resize_240
foto/resize_120però mi da comunque errore:
**Warning**: chmod() [---]: No such file or directory in **C:\Program Files (x86)\EasyPHP-5.3.1\www\submit.php** on line **15** **Warning**: chmod() [---]: No such file or directory in **C:\Program Files (x86)\EasyPHP-5.3.1\www\submit.php** on line **16** **Warning**: chmod() [---]: No such file or directory in **C:\Program Files (x86)\EasyPHP-5.3.1\www\submit.php** on line **17** **Warning**: include(include/class.image-resize.php) [---]: failed to open stream: No such file or directory in **C:\Program Files (x86)\EasyPHP-5.3.1\www\submit.php** on line **27** **Warning**: include() [---]: Failed opening 'include/class.image-resize.php' for inclusion (include_path='.;C:\php5\pear') in **C:\Program Files (x86)\EasyPHP-5.3.1\www\submit.php** on line **27** **Fatal error**: Class 'img_opt' not found in **C:\Program Files (x86)\EasyPHP-5.3.1\www\submit.php** on line **28**
Andando a controllare le cartelle, al loro interno c'è l'immagine che ho caricato, però non ridimensionata.
-
attenzione che la riga 27 ti dice che non trova il file class.image-resize.php quindi controlla bene il percorso se è corretto.
poi togli le righe 15, 16 e 17
Ciao
-
Rieccomi, mi scuso se rispondo solo ora ma avevo accantonato l'upload delle immagini per dare riorità ad altre parti del progetto...Ho ripreso in mano tutte le prove e i problemi persistono, anche con le ultime modifiche non riesco a risolvere il problema; fino al resize della singola immagine tutto ok, mentre i 2 file che mi hai passato non riesco a farli funzionare.
Ti chiedo gentilmente se quando hai tempo puoi fare un test e vedere se capisci dov'è il problema, io non so più dove sbattere la testa.Grazie
-
Edit