marcus ha scritto: BLUE DOG HA DETTO: le immagini in miniatura rispondono ad un ridimensionamento (virtuale) predefinito...
Cosa intendi per virtuale?
Speravo fosse chiaro...
allora dobbiamo partire da un po' piu' indietro da una oscommerce liscia. Dalla scheda prodotto carichiamo una immagine (esempio una immagine da 1280 x 1024 pixel), quando andiamo nella parte cliente vediamo l'immagine molto piu' piccola 80x60 pixel circa. In realtà l'immagine è virtualmente di quelle dimensioni, se facciamo una prova pratica, possiamo fare sulla miniatura tasto dx->proprietà e vedere il peso in kilobyte, poi apriamo la pop-up in cui mostra l'immagine grande e riguardiamo i kilobyte. Vedremo che il "peso" della immagine è sempre lo stesso. In parole povere la miniatura è forzata a quelle dimensioni, ovvero carica l'immagine come se la vedessimo a 1280x1024! Qualcuno dira' embe'? l'effetto indesiderato è che con un paio d'immagini cosi' la pagina si carica un minuto anziche' un secondo.
La soluzione: esistono per il php delle librerie aggiuntive (dalla versione del php 4.3.x sono integrate allo stesso) chiamate librerie grafice GD che permettono di creare delle miniature reali, cioè l'immagine realmente sarà di 80x60 con peso ultraridotto, che servono a salvare il sito dalla gogna del caricamento.
A completezza del discorso bisogna dire che le librerie GD non sono le uniche, esistono anche altri sistemi simili, questo pero' fa sorgere il problema per chi ha l'hosting, infatti si tratta di un'opzione che deve essere predisposta dal fornitore altrimenti ciccia.
Secondo problema: ovviamente non basta avere la libreria, ma tocca dare comandi specifici e cambiare sostanzialmente l'impianto "di pescaggio" delle immagini (infatti con le miniature le immagini sono due e non una, ovvero devo riuscire a leggere la miniatura e nella pop-up l'immagine reale). Nella repository di Oscommerce contrib ce ne sono un paio che sfruttano appunto le librerie gd, addirittura sono in grado, se l'immagine è troppo sballata per rientrare in multipli di 80x60 (al fine di avere un buon lavoro sarebbe necessario indicare immagini che siano multipli, o che si avvicinino, di 80x60), per esempio carichiamo una immagine di 500x1024 risulterebbe "stirata". Orquindi ci sono funzioni che evitano lo stiramento accollandogli intorno all'immagine un background attraverso una procedura complessa che non saprei neanche come spiegare.
Infine come sapere se il proprio server ha le librerie GD installate? usate questo codice da salvare come pagina php
Codice: Seleziona tutto
<?php
$code = 'function gd_info() {
$array = Array(
"GD Version" => "",
"FreeType Support" => 0,
"FreeType Support" => 0,
"FreeType Linkage" => "",
"T1Lib Support" => 0,
"GIF Read Support" => 0,
"GIF Create Support" => 0,
"JPG Support" => 0,
"PNG Support" => 0,
"WBMP Support" => 0,
"XBM Support" => 0
);
$gif_support = 0;
ob_start();
eval("phpinfo();");
$info = ob_get_contents();
ob_end_clean();
foreach(explode("\n", $info) as $line) {
if(strpos($line, "GD Version")!==false)
$array["GD Version"] = trim(str_replace("GD Version", "", strip_tags($line)));
if(strpos($line, "FreeType Support")!==false)
$array["FreeType Support"] = trim(str_replace("FreeType Support", "", strip_tags($line)));
if(strpos($line, "FreeType Linkage")!==false)
$array["FreeType Linkage"] = trim(str_replace("FreeType Linkage", "", strip_tags($line)));
if(strpos($line, "T1Lib Support")!==false)
$array["T1Lib Support"] = trim(str_replace("T1Lib Support", "", strip_tags($line)));
if(strpos($line, "GIF Read Support")!==false)
$array["GIF Read Support"] = trim(str_replace("GIF Read Support", "", strip_tags($line)));
if(strpos($line, "GIF Create Support")!==false)
$array["GIF Create Support"] = trim(str_replace("GIF Create Support", "", strip_tags($line)));
if(strpos($line, "GIF Support")!==false)
$gif_support = trim(str_replace("GIF Support", "", strip_tags($line)));
if(strpos($line, "JPG Support")!==false)
$array["JPG Support"] = trim(str_replace("JPG Support", "", strip_tags($line)));
if(strpos($line, "PNG Support")!==false)
$array["PNG Support"] = trim(str_replace("PNG Support", "", strip_tags($line)));
if(strpos($line, "WBMP Support")!==false)
$array["WBMP Support"] = trim(str_replace("WBMP Support", "", strip_tags($line)));
if(strpos($line, "XBM Support")!==false)
$array["XBM Support"] = trim(str_replace("XBM Support", "", strip_tags($line)));
}
if($gif_support==="enabled") {
$array["GIF Read Support"] = 1;
$array["GIF Create Support"] = 1;
}
if($array["FreeType Support"]==="enabled"){
$array["FreeType Support"] = 1; }
if($array["T1Lib Support"]==="enabled")
$array["T1Lib Support"] = 1;
if($array["GIF Read Support"]==="enabled"){
$array["GIF Read Support"] = 1; }
if($array["GIF Create Support"]==="enabled")
$array["GIF Create Support"] = 1;
if($array["JPG Support"]==="enabled")
$array["JPG Support"] = 1;
if($array["PNG Support"]==="enabled")
$array["PNG Support"] = 1;
if($array["WBMP Support"]==="enabled")
$array["WBMP Support"] = 1;
if($array["XBM Support"]==="enabled")
$array["XBM Support"] = 1;
return $array;
}';
if(!function_exists("gd_info")) eval($code);
?>