DOMANDA Ridimensionare immagine in php

Pubblicità

alemian95

Utente Attivo
Messaggi
1,199
Reazioni
374
Punteggio
72
Buongiorno a tutti, nel sito che sto costruendo ho la necessità di ridimensionare delle immagini in maniera tale da favorire il caricamento da parte degli utenti, non rendendo necessario il caricamento dell'immagine originale ma di una scalata.

Questo è il codice:
PHP:
<?
list($width, $height, $type, $attr) = getimagesize($img_path);
$thumb = imagecreatetruecolor(50, 50 * $height / $width);
if($type == 2) $source = imagecreatefromjpeg($img_path);
if($type == 3) $source = imagecreatefrompng($img_path);
imagecopyresized($thumb, $source, 0, 0, 0, 0, 50, 50 * $height / $width, $width, $height);
?>
<img src="<?= $thumb; ?>" alt=""/>

Ma visualizzando la pagina in questione l'immagine non appare, come posso procedere per risolvere? Grazie a tutti.
 
Ciao,
con il codice che hai indicato stai inserendo nella proprietà "src" del tag "img" il valore della variabile risorsa ($thumb) dell'immagine..
Devi prima salvare il file da qualche parte, per esempio in una cartella cache, con il comando
imagejpeg($thumb, $path);
quindi dare in output qualcosa del tipo:
<img src="<?= $path; ?>" alt=""/>

In alternativa puoi specificare come "src" un file php che esegua la funzione di resize e in più mandi in output un'immagine al posto di un html.
Per esempio un file /immagine.php
PHP:
<?
$img_path=$_REQUEST['img'];

//CODICE ORIGINALE BEGIN
list($width, $height, $type, $attr) = getimagesize($img_path);
$thumb = imagecreatetruecolor(50, 50 * $height / $width);
if($type == 2) $source = imagecreatefromjpeg($img_path);
if($type == 3) $source = imagecreatefrompng($img_path);
imagecopyresized($thumb, $source, 0, 0, 0, 0, 50, 50 * $height / $width, $width, $height);
//CODICE ORIGINALE END

//Da implementare anche per jpg in modo analogo
header("Content-Type: image/png");
imagepng($thumb);
imagedestroy($thumb);

?>

e il tuo tag html diventerebbe solamente:
<img src="/immagine.php?img=foto.png">

non ho testato il codice, ma spero di essermi spiegato lo stesso abbastanza bene, oppure di averti dato qualche spunto giusto!
:)

Ciao!
 
Diciamo che il concetto che volevo esprimere è proprio quello, fare in modo di mandare in output un immagine ridimensionata senza necessariamente doverla salvare sul server (dato che ho poco spazio), ho già testato codici e librerie già implementate per questa funzione ma purtroppo nessuna di esse è funzionante per cui ormai mi sono rassegnato e seguendo i consigli trovati nel web ho preferito creare una serie di immagini già scalate al momento dell'upload dell'immagine. Grazie lo stesso per la risposta.
 
Per completezza, ecco l'esempio funzionante:

https://www.mercuriocloud.it/pagina.php [EDIT: pagina rimossa]

- pagina.php
- immagine.php
- test.jpg

immagine.php
PHP:
<?php
    function output_resized_image($img_path)
    {
        list($width, $height, $type, $attr) = getimagesize($img_path);
        $thumb = imagecreatetruecolor(50, 50 * $height / $width);
        if($type == 2) $source = imagecreatefromjpeg($img_path);
        elseif($type == 3) $source = imagecreatefrompng($img_path);
        imagecopyresized($thumb, $source, 0, 0, 0, 0, 50, 50 * $height / $width, $width, $height);
        if($type == 2)
        {
            header("Content-Type: image/jpg");
            $source = imagejpeg($thumb);
        }
        elseif($type == 3)
        {
            header("Content-Type: image/png");
            $source = imagepng($thumb);
        }
        imagedestroy($thumb);
    }
 
    output_resized_image($_REQUEST['img']);
?>

pagina.php
PHP:
<?php
    echo '<img src="immagine.php?img=test.jpg"><br/><img src="test.jpg">';
?>
 
Ultima modifica:
Grazie mille, questo codice paradossalmente funziona quando altri molto più completi di questo (gestivano altri tipi di immagine, la qualità di quella scalata, gestivano possibili errori) non visualizzavano niente. Comunque leggendo domande simili alla mia in forum stranieri, persone molto più esperte di me, sconsigliano fortemente questa tecnica chiamata "resize on fly" per una questione di carico di lavoro da parte del server che elabora la richiesta. Tutti consigliano di prepararsi le immagini già scalate e considerano questo metodo molto più efficace anche se si va ad occupare più spazio nel server. Terrò in ogni caso in considerazione questo codice per ogni evenienza. Grazie mille ancora, mi sei stato di grande aiuto.
 
Pubblicità
Pubblicità
Indietro
Top