migliore qualità in ridimensionamento immagini

Ciao

ho trovato uno script che ridimensiona le immagini questo:

<?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"]["size"] < 4000000))
   {
  
      // some settings
      $max_upload_width = 600;
      $max_upload_height = 400;

      // 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 = "image_files/".$_FILES["image_upload_box"]["name"];
      imagejpeg($image_source,$remote_file,100);
      chmod($remote_file,0644);
   
   

      // get width and height of original image
      list($image_width, $image_height) = getimagesize($remote_file);
   
      if($image_width>$max_upload_width || $image_height >$max_upload_height){
         $proportions = $image_width/$image_height;
         
         if($image_width>$image_height){
            $new_width = $max_upload_width;
            $new_height = round($max_upload_width/$proportions);
         }      
         else{
            $new_height = $max_upload_height;
            $new_width = round($max_upload_height*$proportions);
         }      
         
         
         $new_image = imagecreatetruecolor($new_width , $new_height);
         $image_source = imagecreatefromjpeg($remote_file);
         
         imagecopyresampled($new_image, $image_source, 0, 0, 0, 0, $new_width, $new_height, $image_width, $image_height);
         imagejpeg($new_image,$remote_file,100);
         
         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" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<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">Submit an image</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>Image file, maximum 4MB. it can be 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 />
   <input name="submitted_form" type="hidden" id="submitted_form" value="image_upload_form" />
          </form>
</body>
</html>

Ho notato, usando questo codice, che il ridimensionamento risulta qualitativamente migliore rispetto a quello che ottengo usando questo codice che è integrato in un mio piccolo progetto:

<?php
function makeresize($dir,$pic,$n,$t){
  @list($width, $height, $type, $attr) = @getimagesize($pic);
  $max_w = 600;
  $max_h = 600;
  $ratio = @min($max_w/$width,$max_h/$height);

  // Verifico che l'immagine originale sia più grande delle dimensioni massime 100*100pxl
  if ($ratio < 1){
    // Individuo le nuove dimensioni da assegnare all'immagine
    $w = @floor($ratio*$width);
    $h = @floor($ratio*$height);

    // creo una nuova immagine con le dimensioni appena calcolate
    $thumb = @imagecreatetruecolor($w,$h);
    if ($t == 'image/jpeg'){$temp = @imagecreatefromjpeg($pic);}
    elseif ($t == 'image/gif'){$temp = @imagecreatefromgif($pic);}
    elseif ($t == 'image/png'){$temp = @imagecreatefrompng($pic);}

    // ridimensiono l'originale e salvo nella cartella di destinazione
    @imagecopyresized($thumb,$temp,0,0,0,0,$w,$h,$width,$height);
    if ($t == 'image/jpeg'){@imagejpeg($thumb,"$dir/".$n, 75);}
    elseif ($t == 'image/gif'){@imagegif($thumb,"$dir/tb_".$n, 75);}
    elseif ($t == 'image/png'){@imagepng($thumb,"$dir/tb_".$n, 75);}
  }
}
?>

è una funzione al quale sono inviati i dati da un'altra pagina php il cui codice che ci interessa è

più o meno questo :

......

 // recupero i dati dal form
    $titolo = @addslashes($_POST['titolo']);
    $descrizione = @addslashes($_POST['descrizione']);
    $nome = @addslashes($_FILES['imagefile']['name']);
    $path = $path_img . stripslashes($nome);
    $tipo = @addslashes($_FILES['imagefile']['type']);

     // creo ridimensionamento
   @makeresize($path_img,$path,$nome,$tipo); 

......

Come mai con il codice dl primo script ottengo immagini migliori ma con la stessa grandezza?

Considerato che il mio codice è già integrato in un progetto come posso cambiarlo integrando quello dl primo script?

Ci sto provando ma per ora almeno faccio solo errori :-[

Grazie

inviato 7 anni fa
frankphp
X 0 X

mi sa che ci sono riuscito ;D

Però non ho capito (almeno teoricamente) questa differenza.

Ciao

risposto 7 anni fa
frankphp
X 0 X

La differenza sta tutta nelle funzioni imagecopyresampled e imagecopyresized, perché nonostante facciano la stessa cosa (cambiare le dimensioni di una immagine) la prima offre una qualità migliore.

 :bye:

risposto 7 anni fa
Gianni Tomasicchio
X 0 X

La differenza sta tutta nelle funzioni imagecopyresampled e imagecopyresized, perché nonostante facciano la stessa cosa (cambiare le dimensioni di una immagine) la prima offre una qualità migliore.

 :bye:

quindi bastava sostituire

@imagecopyresized

con

imagecopyresampled

..e io che mi sono smazzato per riscrivere tutto :-[ :P :P :P

grazie

risposto 7 anni fa
frankphp
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda