Ridimensionamento immagini PNG non va!

Ciao

Ho questa funzione che viene richiamata per ridimensionare le immagini:

<?php

function makeresize($dir,$pic,$n,$t){

  @list($width, $height, $type, $attr) = @getimagesize($pic);

  $max_w = 500;

  $max_h = 300;

  $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

    @imagecopyresampled($thumb,$temp,0,0,0,0,$w,$h,$width,$height);

    if ($t == 'image/jpeg'){@imagejpeg($thumb,"$dir/".$n, 100);}

    elseif ($t == 'image/gif'){@imagegif($thumb,"$dir/".$n, 100);}

    elseif ($t == 'image/png'){@imagepng($thumb,"$dir/".$n, 100);}

  }

}

?>

il codice della pagina che la richiama è questo:

.....

  // Creo una array con i formati accettati

  $tipi_consentiti = array("image/gif","image/jpeg","image/png","image/pjpeg");

    // recupero i dati dal form

    $titolo = @addslashes($_POST['titolo']);

    $descrizione = @addslashes($_POST['descrizione']);

    $nome = @addslashes($_FILES['imagefile']['name']);

    $path = $carfoto_user . stripslashes($nome);

    $tipo = @addslashes($_FILES['imagefile']['type']);   

............

  // verifico che il formato del file sia tra quelli accettati

  if ((@in_array($_FILES['imagefile']['type'], $tipi_consentiti))&& ($_FILES["imagefile"]["size"] < 2200000)){ 

    // copio il file nella cartella delle immagini

    @copy ($_FILES['imagefile']['tmp_name'], $carfoto_user . $nome);

  $nomenew = $t."_".$nome;

   

     // creo ridimensionamento

   @makeresize($carfoto_user,$path,$nomenew,$tipo); 

    // creo la miniatura

    @makeThumb($carthumb_user,$path,$nomenew,$tipo);

    

    unlink($carfoto_user.$nome);

makeresize e makeThumb sono in pratica la stessa funzione; sono solo modificate le impostazioni di

ridimensionamento.

le funzioni e il codice di cui sopra fanno il loro lavoro senza problemi con le immagini gif e jpg ma

c'è un problema che non capisco con le immagini png.

L'immagine originale viene caricata sul server ma poi non viene ridimensionata,

nella cartella di destinazione trovo quindi l'immagine originale png (che avrebbe dovuto essere in un secondo momento eliminata con unlink()) e il nome dell'immagini ridimensionata che invece non c'è.

Ripeto. Il problema esiste solo con le  png.

Perchè? Il codice di ridimensionamento non va bene per questo tipo di immagini?

Potete aiutarmi?

Grazie come sempre.

inviato 6 anni fa
frankphp
X 0 X

hai provato a verificare se lo script torna qualche errore?

risposto 6 anni fa
civre
X 0 X
hai provato a verificare se lo script torna qualche errore?

No. Cosa devo fare esattamente?

risposto 6 anni fa
frankphp
X 0 X

per visualizzare gli eventuali errori devi togliere l'operatore @

e metti error_reporting (E_ALL);

risposto 6 anni fa
civre
X 0 X
error_reporting (E_ALL);

ma al posto della @

o in una riga a parte?

grazie

risposto 6 anni fa
frankphp
modificato 6 anni fa
X 0 X

all'inizio dello script, ti garantisce che vengano visualizzati tutti gli errori se non già settato in php.ini

da mettere solo per lo sviluppo

risposto 6 anni fa
civre
X 0 X

all'inizio dello script, ti garantisce che vengano visualizzati tutti gli errori se non già settato in php.ini

da mettere solo per lo sviluppo

ho provato ma non mi da nessun errore relativo alla conversione o caricamento delle png.

Niente non ho capito cosa può essere.

Ciao

risposto 6 anni fa
frankphp
X 0 X

non saprei, imho ti conviene fare delle stampe delle variabili per capire dov'è il problema...

risposto 6 anni fa
civre
X 0 X

E' importante avere un server in fase di sviluppo che "vomiti" tutti i messaggi possibili di php (avvisi, messaggi ed errori), così si può velocemente vedere se ci sono errori del codice.

Anche il codice deve essere scritto in modo tale da permettere la visualizzazione di tutti questi messaggi utili al debug.

In ambito di produzione il server poi basterà riconfigurarlo in modo che non presenti questi avvisi/messaggi/errori.

Non ho modo di testare da me, ora, lo script. Se funziona con gli altri formati dovrebbe funzionare con tutti. Se no potresti utilizzare imagemagick invece delle librerie GD, dipende dal tuo server.

Ciao

risposto 6 anni fa
Mario Santagiuliana
X 0 X

E' importante avere un server in fase di sviluppo che "vomiti" tutti i messaggi possibili di php (avvisi, messaggi ed errori), così si può velocemente vedere se ci sono errori del codice.

Anche il codice deve essere scritto in modo tale da permettere la visualizzazione di tutti questi messaggi utili al debug.

In ambito di produzione il server poi basterà riconfigurarlo in modo che non presenti questi avvisi/messaggi/errori.

Non ho modo di testare da me, ora, lo script. Se funziona con gli altri formati dovrebbe funzionare con tutti. Se no potresti utilizzare imagemagick invece delle librerie GD, dipende dal tuo server.

Ciao

Non funziona nemmeno sui server di altervista e non mi da messaggi di errore...accidenti.

Strano proprio.

grazie.

risposto 6 anni fa
frankphp
X 0 X

Ho risolto!  ;) ;D

Il problema era il terzo parametro, quello della qualità che per le immagini PNG non deve essere espresso da 0 a 100

ma da 0 a 9.

Grazie e ciao

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