immagine ridimensionata in php che sgrana

helpdesk

Utente Attivo
30 Set 2009
726
0
16
Pesaro
salve ragazzi ho un problema con uno script php ridimensiona l'immagine però la sgrana e non si sa perchè ho calcolato di farla scalare dividendo il suo valore per 5 quindi da 800x600 a 160x120.
Ma la matematica sembra essere in questo caso un opinione poichè sgrana la foto e non riesco proprio a capire perchè :(

PHP:
<?php 
   
if(isset($_POST['invia'])){
    $dbhost = 'localhost'; 
    $dbuser = 'dbuser'; 
    $dbpass = 'pass'; 
    $dbname = 'name'; 
    $connessione = mysql_connect("localhost", "aaaa", "aaa");
    mysql_select_db(creaocom_db, $connessione) ;
    
	$query = mysql_query("SELECT path FROM ric");
    $riga = mysql_fetch_assoc($query);
    $dir = $riga['path']; 
	$Allert="";
	$percorso =$dir;
    $nome_file=basename( $_FILES['Filedata']['name'] );
    if($nome_file !=""){
        $uploadfile = $percorso.$nome_file;
        $sposta=move_uploaded_file( $_FILES['Filedata']['tmp_name'] ,$uploadfile );
        $thumbComp = 100;
		list($width, $height, $type, $attr) = getimagesize($uploadfile);
        $max_w=160;
        $max_h=120;
        $ratio = @min($max_w/$width,$max_h/$height);
		$Allert="ATTENEDERE CARICAMENTO FILE";
        header("Location:http://www.sito.php");
        if ($ratio < 1){
            $thumb = imagecreatetruecolor($max_w,$max_h);
            $source = imagecreatefromjpeg($uploadfile);
            imagecopyresized($thumb, $source, 0, 0, 0, 0,$max_w,$max_h,$width,$height);
            $dir=$percorso."1.jpg";
            imagejpeg($thumb,$dir,$thumbComp)or die("Impossibile salvare la miniatura");
            unlink($uploadfile);
		}else{
            $Allert="CARICAMENTO FILE COMPLETATO!";
			$renome = $percorso."1.jpg";
            //cancello le vacchia 1.jpg
            unlink($renome);
            //e carico la nuova
            $sposta=rename( $uploadfile ,$renome);
			header("Location:http://www.sito.php");
        }
    }else{
        header("Location:http://www.sito.php");
    }
 }
?>
 
Ragazzi l'ho modificato cosi' è corretto?

PHP:
<?php 
   
if(isset($_POST['invia'])){
    include "SmartImage/SmartImage.class.php";
    $dbhost = 'localhost'; 
    $dbuser = 'user'; 
    $dbpass = 'pass'; 
    $dbname = 'name'; 
    $connessione = mysql_connect("localhost", "user", "pass");
    mysql_select_db(name, $connessione) ;
    
	$query = mysql_query("SELECT path FROM ric");
    $riga = mysql_fetch_assoc($query);
    $dir = $riga['path']; 
	$Allert="";
	$percorso =$dir;
    $nome_file=basename( $_FILES['Filedata']['name'] );
    if($nome_file !=""){
        $uploadfile = $percorso.$nome_file;
        $sposta=move_uploaded_file( $_FILES['Filedata']['tmp_name'] ,$uploadfile );
        $thumbComp = 150;
		$ratio = @min($max_w/$width,$max_h/$height);
		$Allert="ATTENEDERE CARICAMENTO FILE";
        header("Location:http://www.sito.php");
        if ($ratio < 1){
          // qui ho modificato lo script 
		  $dir=$percorso."1.jpg";
		  $img = new SmartImage($dir);
          $img->resize(150, 113);
          $img->saveImage($dir);
         }else{
            $Allert="CARICAMENTO FILE COMPLETATO!";
			$renome = $percorso."1.jpg";
            //cancello le vacchia 1.jpg
            unlink($renome);
            //e carico la nuova
            $sposta=rename( $uploadfile ,$renome);
			header("Location:http://www.sito.php");
        }
    }else{
        header("Location:http://www.sito.php");
    }
 }
?>
 
Ragazzi ora l'ho modificato semplicemente cosi' e dovrebbe funzionare secondo quel tutorial online utilizzando quella classe.
Invece nulla mi da un sacco di errori, errori che riporterò subito dopo il codice in questo post.
Help me please guys :(

PHP:
<?php 
   
if(isset($_POST['invia'])){
    include "SmartImage.class.php";
    $dbhost = 'localhost'; 
    $dbuser = 'dbuser'; 
    $dbpass = 'pass'; 
    $dbname = 'name'; 
    $connessione = mysql_connect("localhost", "user", "pass");
    mysql_select_db(name, $connessione) ;
    $query = mysql_query("SELECT path FROM ric");
    $riga = mysql_fetch_assoc($query);
    $dir = $riga['path']; 
	$Allert="";
	$percorso =$dir;
    $Allert="ATTENEDERE CARICAMENTO FILE";
   $file = $_FILES["foto"];
    $img = new SmartImage($file["tmp_name"]);
    $img->resize(150, 113, true);
    $img->saveImage("$percorso/1.jpg");
    header("Location:http://www.sito.php");
    }else{
        echo "ERRORE CARICAMENTO";
    
}
		
?>

ERRORI:
Warning: getimagesize() [function.getimagesize]: Filename cannot be empty in /home/dir/domains/sito.com/dir/Vemacar/php/SmartImage.class.php on line 42

Warning: imagesx() expects parameter 1 to be resource, null given in / on /home/dir/domains/sito.com/dir/Vemacar/php/SmartImage.class.php on line 305

Warning: imagesy() expects parameter 1 to be resource, null given in /home/dir/domains/sito.com/dir/Vemacar/php/SmartImage.class.php on line 306

Warning: imagejpeg() expects parameter 1 to be resource, null given in on /home/dir/domains/sito.com/dir/Vemacar/php/SmartImage.class.php line 241

Warning: Cannot modify header information - headers already sent by (output started at /home/dir/domains/sito.com/public_html/Vemacar/php/SmartImage.class.php:42) in /home/creaocom/domains/sito.com/public_html/dir/php/Upload1.php on line 21
 
Ultima modifica:
ciao
non conosco quella classe, comunque nel primo script che hai postato in
imagejpeg prova a dargli il valore di qualità 100 (non avendolo messo la compressione è 75)
comunque anche rimpicciolendo le immagini si sgranano sempre un po' (come nell'ingrandimento)
 
Ciao mitico borgo, grazie per la risposta, sempre disponibile :)
il primo script infatti funziona benissimo solo che me la fa sgranare
il metodo getImagesize non dovrebbe ridimensionare l'immagine tenendo le proporzioni? bhoo
Comunque scusa non ho capito quale parametro devo cambiare? ti riposto lo script così me lo indichi da qua.
PHP:
<?php 
   
if(isset($_POST['invia'])){
    $dbhost = 'localhost'; 
    $dbuser = 'caaa'; 
    $dbpass = 'maaa'; 
    $dbname = 'craaab'; 
    $connessione = mysql_connect("localhost", "craaa", "aaaa");
    mysql_select_db(aaaaa, $connessione) ;
    
	$query = mysql_query("SELECT path FROM ric");
    $riga = mysql_fetch_assoc($query);
    $dir = $riga['path']; 
	$Allert="";
	$percorso =$dir;
    $nome_file=basename( $_FILES['Filedata']['name'] );
    if($nome_file !=""){
        $uploadfile = $percorso.$nome_file;
        $sposta=move_uploaded_file( $_FILES['Filedata']['tmp_name'] ,$uploadfile );
        $thumbComp = 100;
		$max_w=150;
        $max_h=113;
		list($width, $height, $type, $attr) = getimagesize($uploadfile);
        $ratio = @min($max_w/$width,$max_h/$height);
		$Allert="ATTENEDERE CARICAMENTO FILE";
        header("Location:http://www.sito.php");
        if ($ratio < 1){
            $thumb = imagecreatetruecolor($max_w,$max_h);
            $source = imagecreatefromjpeg($uploadfile);
            imagecopyresized($thumb, $source, 0, 0, 0, 0,$max_w,$max_h,$width,$height);
            $dir=$percorso."1.jpg";
            imagejpeg($thumb,$dir,$thumbComp)or die("Impossibile salvare la miniatura");
            unlink($uploadfile);
		}else{
            $Allert="CARICAMENTO FILE COMPLETATO!";
			$renome = $percorso."1.jpg";
            //cancello le vacchia 1.jpg
            unlink($renome);
            //e carico la nuova
            $sposta=rename( $uploadfile ,$renome);
			header("Location:http://www.sito.php");
        }
    }else{
        header("Location:http://www.sito.php");
    }
 }
?>
 
ho capito no non funziona prende il valore da: $thumbComp = 100; e la compressione dovrebbe essere 100 ma sgrana comunque :(
 
Grazie, si ho letto se ho ben capito nella guida dichiara qua il valore poichè come mi dicevi tu di default è 75
imagejpeg($im, NULL, 75);

nel codice che ho io invece lo prende con la variabile thumbComp che è a 100 quindi la compressione è massima.
Ma si vede sempre sgranata ed è stranissimo :O
 
ciao
non so se dipenda da php, ma l'unica è provare.
con gimp o photosh perova a ridurre una tua immagine con le proporzioni che vuoi e la guardi.
se viene sgranata non è colpa di php ma come ti ho detto della riduzione.
 
Si l'ho pensato anche io ho provato e con photoshop viene bene e se arico quella riompicciolita in photoshop me la carica anche nitida quindi purtroppo è php proprio e non capisco perchè :(
non c'è un modo per ridimensionarla in proporzione come con actionscript? esempio del 20%?
 
ciao
certo che puoi ridurla con percentuale
PHP:
<?php
//.....
$percento_rid=0.2;// 20/100
list($width, $height, $type, $attr) = getimagesize($uploadfile);
        $max_w=(int)($width*$percento_rid);
        $max_h=(int)($height*$percento_rid);
        //$ratio = @min($max_w/$width,$max_h/$height);
        $Allert="ATTENEDERE CARICAMENTO FILE";
//....
?>

p.s.
in un post precedente hai detto
....il metodo getImagesize non dovrebbe ridimensionare....
no, legge i dati dell'immagine tra cui la larghezza e l'altezza in px
 
grazie mille anche per la spiegazione, funziona, ridimensiona in percentuale la sgrana meno ma la sgrana ugualmente che disdetta :(
 
io per ridimensionare le immagini da servere con php uso questo

PHP:
copy($_FILES['foto']['tmp_name'], $foto);
list($width, $height, $type, $attr) = getimagesize($foto); // Ottengo le informazioni sull'immagine originale
$a=150/($width/$height); //creo il rapporto di proporzione dell'immagine originale 150 pixel width (cambiala come vuoi)
		
// Creo la versione 150 width con altezza in proporzione thumb=miniatura
$thumb = imagecreatetruecolor(150, $a);
$source = imagecreatefromjpeg($foto);
imagecopyresized($thumb, $source, 0, 0, 0, 0, 150, $a, $width, $height);
imagejpeg($thumb, $foto, 95);// Salvo l'immagine ridimensionata con 95 qualità compressione

ha sempre funzionato senza sgranare
 

Discussioni simili