Newsgroup: it.lavoro.professioni.webmaster
Titolo: Creare thubnails con php.

Ciao a tutti, qualcuno sa e mi può spiegare come fare a creare un thubnail
da un'immagine di cui faccio l'upload tramite una pagina php?
Mettiamo che dalla pagina upload.php faccia l'upload di una immagine gif o
jpg chiamata pippo.jpg ad esempio, vorrei creare automaticamente un'altra
immagine ridimensionata chiamata pippo_thumb.jpg ad esempio. So che devo
usare delle librerie apposite, Image Magik? Non so ho visto qualcosa a giro,
ma ho ancora le idee un po' confuse.
Grazie a tutti, ciao!


BURP
Buon 2004 ;-)
-- 
Neo & Rotella (CBR 600 F Rosso Blu) da Campi Bisenzio
/************************************************
ICQ #42292922
Webmaster di:
www.thezion.net
 (now PHP Powered)
Registered Linux User #277621 - 
http://counter.li.org
************************************************/

 Buon 2004 ;-)
Altrettanto!


 ha scritto nel messaggio
news:bt1q43$d3g$1...@lacerta.tiscalinet.it...

Vabbè visto che nessuno rispondeva io ho continuato a cercare su Internet e
ho smontato un po' di phpnuke per cercare di capire come funzionava lì la
cosa.
Ho trovato che le librerie grafiche GD sono incluse nella versione 2 in PHP
4 credo e che in queste librerie ci sono delle funzioni per fare un po' di
tutto, anche creare copiare un'immagine facendone il resize. Altrimenti si
può eseguire un programma esterno che è Image Magick, che va però istallato
anch'esso sul server. Credo che quest'ultimo possa essere istallato sia su
server windows che su server linux. Ad ogni modo se si può credo sia meglio
evitare ed usare le funzioni presenti sotto le gd2 già incluse nel php
istallato sul server. Anche perchè se il server non è nostro magari non si
può istallare Image Magick. Ad ogni modo da una versione in poi delle
librerie gd non si può trattare le immagini di tipo gif perchè l'algoritmo
di compressione è diventato a pagamento. Non so se dico bene, se qualcuno mi
correggerà ne sarò felice. Comunque creare un thmbnail con le librerie gd2
sotto php è piuttosto facile e vi riporto sotto una funzione scritta da me
prendendo ad esempio quella che usa la galleria fotografica automatica
Coppermine.
<?php
function makethumbnail($src_file, $dest_dir, $destWidth, $destHeight)
{
    $imginfo = getimagesize($src_file);
    $file_name = basename($src_file);
    $srcWidth = $imginfo[0];
    $srcHeight = $imginfo[1];
    $src_img = imagecreatefromjpeg($src_file);
    $dst_img = imagecreatetruecolor($destWidth, $destHeight);
    imagecopyresampled($dst_img, $src_img, 0, 0, 0, 0, $destWidth,
(int)$destHeight, $srcWidth, $srcHeight);
    imagejpeg($dst_img,$dest_dir."t_".$file_name,100);
    imagedestroy($src_img);
    imagedestroy($dst_img);
}
makethumbnail("prova.jpg", "", 100, 100);
?>
<img src="prova.jpg">
<br>
<img src="t_prova.jpg">
Io non ne sono capace (ma studiando spero un giorno di esserlo), ma se
potessi farei una funzione sotto le gd che faccia quello che fa la funzione
che ho sopra scritto, così si risparmia anche di scrivere questa.

 da un'immagine di cui faccio l'upload tramite una pagina php?
Funge con GD 2.0 (precompilato in tutte le versioni recenti di PHP)
<?
$img = imagecreatefromjpeg("path-alla-img");
# carica in $img la foto da resizare
$dx = imagesx($img); # estrae larghezza immagine
$dy = imagesy($img); # estrae altezza immagine
$ndx = $dx/2.5; # nuova larghezza immagine
$ndy = $dy/2.5; # nuova altezza immagine
$img_tc = imagecreatetruecolor ($ndx,$ndy);
# crea un contenitore truecolor per l'immagine resizata
imagecopyresampled($img_tc,$img,0,0,0,0,$ndx,$ndy,$dx,$dy);
# resize dell'immagine di partenza e copia nel contenitore appena creato
imagejpeg($img_tc, "prova_img_resampled.jpg", 89);
# comprime in jpeg con qualita' 89% l'immagine resizata e la salva in prova_img_resized.jpg
?>
A questo punto avrai nella root del tuo sito (o in una cartella che vorrai)
un serie di thumbnail che potrai caricare da HTML.
Naturalmente puoi anche far genereare on the fly le thumb e spedirle al
browser senza salvarle sul server, cambiano solo poche righe di codice.
Saluti.
Fabrizio.