Immagine ridimensionata troppo piccola.

Ciao

Dopo aver risolto la rogna del ridimensionamento delle immagini png, mi sono accorto di un altro problema.

In pratica nella funzione che uso per ridimensionare le immagini ho settato le dimensioni massime che le immagini ridimensionate devono avere.

il codice è lo stesso di questa discussione:

http://www.phpnews.it/forum/programmazione-php/ridimensionamento-immagini-png-non-va!/new/#new

Ho notato però che se un utente tenta di inviare un' immagine con una risoluzione troppo bassa (meno di 500px e anche meno di 300) l'operazione non viene effettuata e mi ritrovo nella galleria con un puntino (o un messaggio di errore tipo "Cannot find image photos/pino/1289929535_Bostonmtaf.jpg + altri problemi dovute alla caratteristica della galleria scritta in javascript) .

Avevo pensato quindi di aggiungere alle immagini troppo piccole uno sfondo nero delle dimensioni minime per essere caricate e far funzionare il tutto, con aggiunta centrata allo sfondo nero l'immagine caricata dall'utente.

Vorrei capire:

1) se è possibile farlo

2) volendo mantenere le proporzioni delle immagini mi conviene creare un'immagine con le dimensione massime consentite con sfondo nero e incollare poi al centro (come?) l'immagine dell'utente oppure mi conviene in qualche modo comunque ridimensionare...

Mi aiutate?

Grazie

inviato 6 anni fa
frankphp
X 0 X

ragazzi, quindi non è possibile ridimensionare un'immagine e poi incollarla su un altra?

risposto 6 anni fa
frankphp
X 0 X

Non conosco bene le librerie GD, usi quelle vero? Comunque immagino di si.

Ma ho una domanda: che senso ha rimpicciolire un'immagine già di per se piccola? Non fai prima a fare un controllo sulla dimensione dell'immagine e se super i tuoi limiti la ridimensioni e se no la lasci così?

risposto 6 anni fa
Mario Santagiuliana
X 0 X

Non conosco bene le librerie GD, usi quelle vero? Comunque immagino di si.

Ma ho una domanda: che senso ha rimpicciolire un'immagine già di per se piccola? Non fai prima a fare un controllo sulla dimensione dell'immagine e se super i tuoi limiti la ridimensioni e se no la lasci così?

Si uso le GD.

In effetti il codice che hai modo di vedere nella mia precedente discussione ridimensiona solo le immagini che superano una certa grandezza. Io, però non posso escludere che l'utente possa postare un'immagine molto più piccola. Ok?

Beh mi sono accorto che se l'immagine è troppo piccola non viene visualizzata bene dalla galleria in javascript che ho adottato (forse sai di cosa parlo ce ne sono molte in giro già pronte) e che ho integrato nel mio codice per renderla dinamica.

L'immagine non può essere inferiore in lunghezza di tot pixel (posso variare la grandezza minima della galleria originale ma il discorso non cambia) così avevo pensato di incollare l'immagine così ottenuta dal codice di ridimensionamento, se necessario, (la devo non rimpicciolire come dici tu ma ridimensionare perchè devo considerare anche il caso che l'utente faccia l'upload di un'immagine molto larga ma troppo poco alta per le mie esigenze di output ma che deve comunque rispettare le proporzioni originali..sbaglio?), su un'altra con sfondo nero che abbia lunghezza fissa minima per non avere problemi con la galleria.

In questo caso avrò un'immagine anche se piccolissima centrata (spero che il codice me lo possa permettere) su uno sfondo nero.

Spero di essere stato chiaro.

Grazie

ps: in questi giorni ero riuscito ad ottenere un risultato discreto (l'immagine non era centrata però ero sulla buona strada) ma il codice non mi convinceva troppo (possibili bug ) e ho cancellato il tutto per ottenere un codice più pulito.

Ho postato il problema anche su altri forum a dire il vero ma ancora nessuno è riuscito a propormi qualcosa di utile.

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

Non ho il tempo di studiare le GD library nel fine settimana.

Vuoi intanto darci il link alle discussioni che hai aperto negli altri forum? Così raccogliamo il tutto.

Ciao

risposto 6 anni fa
Mario Santagiuliana
X 0 X

Non ho il tempo di studiare le GD library nel fine settimana.

Vuoi intanto darci il link alle discussioni che hai aperto negli altri forum? Così raccogliamo il tutto.

Ciao

Certo.

L'ho postato in 3 forum il problema (prima di tutti il forum di altervista, lo spazio web dove risiedono i miei lavori), ma ho ottenuto una risposta praticamente solo qui:

http://www.phpfreaks.com/forums/php-coding-help/resize-image-and-paste-it-to-another/

...con annesso mio inglese maccheronico ;D

Ciao e grazie

risposto 6 anni fa
frankphp
X 0 X

ho iniziato a fare delle modifiche:

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);
  $image_file = "sfondo01.jpg";

  // Verifico che l'immagine originale sia più grande delle dimensioni massime 100*100pxl

    // 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);
    
    $photo = imagecreatefromjpeg($image_file);
    $fotoW = imagesx($photo);
    $fotoH = imagesy($photo);
    $photoFrame = imagecreatetruecolor($fotoW,$fotoH);
    imagecopy($photoFrame, $thumb, 30, 30, 0, 0, 300, $fotoH);  
    if ($t == 'image/jpeg'){@imagejpeg($photoFrame,"$dir/".$n, 100);}
    elseif ($t == 'image/gif'){@imagegif($photoFrame,"$dir/".$n, 100);}
    elseif ($t == 'image/png'){@imagepng($photoFrame,"$dir/".$n, 8);}     

 

}  
  ?>

In pratica incolla l'immagine ridimensionata sullo sfondo nero (sfondo01.jpg) che ho creato a parte.

Il codice ovviamente così com'è non va bene perchè tratta indistintamente tutte le immagini e le ridimensiona aggiungendo lo sfondo nero.

Invece deve attivarsi solo con le immagini che hanno un'altezza minore  di 300px (posso anche variare questo valore utile per la galleria come dicevo ma il discorso non cambia..adesso sto facendo solo delle prove).

Mi sto un po' incasinando con le condizioni if; non ho ancora ottenuto quello che desideravo.

Un'altra cosa nel file uploader.php che richiama la funzione di cui sopra ho dovuto invertire la chiamata delle 2 funzioni che hanno parametri di ridimensionamento differenti (una crea il thumbnail e l'altra l'immagine per la galleria):

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

prima  chiamavo makeresize() e poi makethumb, ma così mi creava lo sfondo nero anche per la thumb..boh?

Grazie

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