Ciao, sto cercando di capire come poter creare delle thumbnails dalle loro img "grandi" tramite questo script in classi che mi hanno passato...
purtroppo io è la prima volta che uso le classi, per cui sono un bel pesce fuor d'acqua... però qualcosa sono riuscito a capire....
solo che continuo ad avere questo errore
Fatal error: Call to undefined function: imagecreatefromstring() in c:\program files\easyphp1-8\www\image.php on line 32
qua sotto vi metto la pgina di prova che sto facendo...
Codice PHP:
<?php
/*
ridimensiona una immagine per creare una full (=immagine grande) ridimesionata oppure una thumbnail
@param $b_full booleano true / false per settare se creare una full ridimensionata o una thumb
@return true
*/
class new_image{
var $w_orig;
var $h_orig;
var $w_resized;
var $h_resized;
var $orig_string;
/*function new_image(){
}*/
function new_image($w_orig, $h_orig, $w_resized, $h_resized, $orig_string){
$this->w_orig = $w_orig;
$this->h_orig = $h_orig;
$this->w_resizes = $w_resized;
$this->h_resized = $h_resized;
$this->orig_string = $orig_string;
}
function resize($b_full = false){//$w_orig, $h_orig
//calcola le dimensioni dell'immagine finale in base al fatto che sia una full ridimensionata o una thumb
list($w_orig, $h_orig, $w_resized, $h_resized) = $this->get_resized($b_full);//$w_orig, $h_orig
//list($w, $h, $w_resized, $h_resized) = $this->get_resized($b_full);
//echo $w_orig;
//creo l'immagine su cui lavorare a partire dal codice binario dell'immagine uploadata che ho salvato in precedenza in $this->orig_string
//$img_orig = "./nuovo_logo.jpg";
//$this->orig_string = "./nuovo_logo.jpg";
$img_orig = imagecreatefromstring($this->orig_string);
//$img_orig = imagecreatefromstring(ob_get_contents("./nuovo_logo.jpg"));
//se l'immagine ha gi… la dimensione giusta non ho bisogno di ridimensionare
if($w_orig == $w_resized){
$img_for_string = $img_orig;
//altrimenti ridimensiona...
}else{
//creo una immagine vuota con le misure ridimensionate
$img_resized = imagecreatetruecolor($w_resized,$h_resized);
//copio l'immagine originale ridimensionata nella nuova immagine
imagecopyresampled($img_resized, $img_orig, 100, 100, 80, 80, $w_resized, $h_resized, $w_orig, $h_orig);
$img_for_string = $img_resized;
}
//utilizzo le funzioni ob_ per 'catturare' il binario dell'immagine e saslvarlo
ob_start();
//a seconda del tipo dell'immagine utilizzo la funzione appropriata per 'buttare fuori' il binario in modo che ob_ possa catturarlo
switch($this->type){
case "image/jpeg":
imagejpeg($img_for_string,'',95);
break;
case "image/pjpeg":
imagejpeg($img_for_string,'',100);
break;
//la gif ha problemi di copyright quindi ormai Š poco supportata
case "image/gif":
if (function_exists("imagegif")){
imagegif($img_for_string);
}else{
echo $this->o_util->js_alert("attenzione: la versione corrente di PHP non supporta il formato gif");
return false;
}
break;
case "image/png":
imagepng($img_for_string);
break;
}
/*salvo il contenuto del buffer ob_ nella variabile appropriata (full o thumb)
da questa stringa puoi salvare l'immagine in un campo blob del db o salvarla come file
*/
// ********************************************
if($b_full) $this->full_string = ob_get_contents();
else $this->thumb_string = ob_get_contents();
//pulisco il buffer
ob_end_clean();
//distruggo le immagini
// imagedestroy($img_orig);
if($img_resized) imagedestroy($img_resized);
return true;
}
/*
calcola le dimensioni che deve avere una immagine, sia essa un full ridimensionata in base alle impostazioni del sito
o una thumbnail
@param $b_full booleano true / false per settare se creare una full ridimensionata o una thumb
@return a_resized array con le dimensioni dell'immagine
array(
0 => larghezza originale,
1 => altezza originale,
2 => larghezza ridimensionata,
3 => altezza ridimensionata,
)
*/
function get_resized($b_full = true){
/*questi sono parametri impostati nella classe:
$this->w_full_max,$this->h_full_max dimensioni massime di una full (che quindi potr… essere ridimensionata)
$this->w_thumb_max,$this->h_thumb_max dimensioni massime di una thumb
*/
if($b_full){
$w_max = $this->w_full_max;
$h_max = $this->h_full_max;
}else{
$w_max = $this->w_thumb_max;
$h_max = $this->h_thumb_max;
}
$a_resized = array();
//piglio le dimensioni dell'immagine uploadata (che ho precedentemente memorizzato in $this->tmp_name)
list($w_orig, $h_orig) = getimagesize($this->tmp_name);
$a_resized[0] = $w_orig;
$a_resized[1] = $h_orig;
//un po' di calcoli per stabilire se l'immagine sia rettangolare in verticale o in orizzonatale
if($w_orig > $h_orig){
if($w_orig>$w_max){
$a_resized[2] = $w_max;
$a_resized[3] = $h_orig * $w_max / $w_orig;
}else{
$a_resized[2] = $w_orig;
$a_resized[3] = $h_orig;
}
}else{
if($h_orig>$h_max){
$a_resized[3] = $h_max;
$a_resized[2] = $w_orig * $h_max / $h_orig;
}else{
$a_resized[2] = $w_orig;
$a_resized[3] = $h_orig;
}
}
return $a_resized;
}
}
?>
<html>
<body>
<?php
$o_new_image = new new_image($w_orig, $h_orig, "80", "80", "./nuovo_logo.jpg");
$o_new_image->resize();
$img = "./nuovo_logo.jpg";
$a_img = getimagesize ($img);
$w_orig = $a_img[0];
$h_orig = $a_img[1];
echo $w_orig."
".$h_orig."
";
echo "<img src=\"".$img."\">";
?>
</body>
</html>
Qualcuno riesce a spiegarmi cosa c'è che non va???
ripeto che, purtroppo, sono un novello delle classi, per cui può anche essere (anzi sicuro) che sbaglio qualcosa...
Grazie!