Ciao a tutti,
Ho un piccolo problema con la libreria GD, e questa è la porzione di codice in questione. In pratica questa porzione di funzione in base al tipo di un immagine dopo gli opportuni accorgimenti la ridimensiona e salva una versione "media" in DIR_IMMAGINI definita in un file esterno e debitamente configurata per funzionare anche qui. Inoltre miniaturizza ulteriormente la stessa immagine e la salva in DIR_MIN sempre definita esternamente. Chiaramente la versione per intero tiene conto anche delle immagini png e gif con opportune funzioni come imagepng o imagecreatefromgif ecc.
function creaMiniatura($nome,$tipo){
switch($tipo){
case 'image/jpeg':
$srcimg=ImageCreateFromjpeg(DIR_IMMAGINI."/".$nome) or die("Problemi nell'aprire l'immagine jpg");
if(isBigger($srcimg)){
$width=ImageSX($srcimg)*0.3;
$height=ImageSY($srcimg)*0.3;
}else{
$width=ImageSX($srcimg);
$height=ImageSY($srcimg);
}
is_orizontal($width, $height);
$destimg=ImageCreatetruecolor($width,$height) or die("Problemi nelle creazioni dell'immagine");
ImageCopyResized($destimg,$srcimg,0,0,0,0,$width,$height,ImageSX($srcimg),ImageSY($srcimg)) or die("Problemi nel ridimensionamento");
Imagejpeg($destimg,DIR_IMMAGINI."/".$nome,100) or die("Problemi nel salvataggio");
$destimg=ImageCreatetruecolor($width*0.2,$height*0.2) or die("Problemi nelle creazioni dell'immagine");
ImageCopyResized($destimg,$srcimg,0,0,0,0,$width*0.2,$height*0.2,ImageSX($srcimg),ImageSY($srcimg)) or die("Problemi nel ridimensionamento");
Imagejpeg($destimg,DIR_IMMAGINI.DIR_MIN."/".$nome,100) or die("Problemi nel salvataggio");
break;
Questo meccanismo funziona perfettamente per le immagini jpeg, mentre per gif e png salva la versione "media" dell'immagine ma non quella miniaturizza in DIR_MIN
i permesssi sono i seguenti:
//function.php è il file dove è presente la funzione creaMinitura
-rwxrwxrwx 1 root root 8489 2009-10-29 09:20 function.php
drwxrwxrwx 3 root root 4096 2009-10-29 09:21 DIR_IMMAGINI
//mentre questo è l'interno della cartella DIR_IMMAGINI dove sono le immagini "medie", come si può vedere al suo interno c'è anche la directory DIR_MIN
-rw-r--r-- 1 www-data www-data 231692 2009-10-27 20:37 DSC00941.JPG
drwxrwxrwx 2 root root 4096 2009-10-29 09:21 DIR_MIN
Utilizzo PHP Version 5.2.6-3ubuntu4.2 .Ho provato di tutto e nei forum non ho trovato molto, qualcuno mi aiuta a capire perchè il tutto non funziona con gif e png?
function creaMiniatura($nome,$tipo){
switch($tipo){
case 'image/jpeg':
$srcimg=ImageCreateFromjpeg(DIR_IMMAGINI."/".$nome) or die("Problemi nell'aprire l'immagine jpg");
if(isBigger($srcimg)){
$width=ImageSX($srcimg)*0.3;
$height=ImageSY($srcimg)*0.3;
}else{
$width=ImageSX($srcimg);
$height=ImageSY($srcimg);
}
is_orizontal($width, $height);
$destimg=ImageCreatetruecolor($width,$height) or die("Problemi nelle creazioni dell'immagine");
ImageCopyResized($destimg,$srcimg,0,0,0,0,$width,$height,ImageSX($srcimg),ImageSY($srcimg)) or die("Problemi nel ridimensionamento");
Imagejpeg($destimg,DIR_IMMAGINI."/".$nome,100) or die("Problemi nel salvataggio");
$destimg=ImageCreatetruecolor($width*0.2,$height*0.2) or die("Problemi nelle creazioni dell'immagine");
ImageCopyResized($destimg,$srcimg,0,0,0,0,$width*0.2,$height*0.2,ImageSX($srcimg),ImageSY($srcimg)) or die("Problemi nel ridimensionamento");
Imagejpeg($destimg,DIR_IMMAGINI.DIR_MIN."/".$nome,100) or die("Problemi nel salvataggio");
break;
case 'image/JPEG':
$srcimg=ImageCreateFromJPEG(DIR_IMMAGINI."/".$nome) or die("Problemi nell'aprire l'immagine JPG");break;
if(isBigger($srcimg)){
$width=ImageSX($srcimg)*0.3;
$height=ImageSY($srcimg)*0.3;
}else{
$width=ImageSX($srcimg);
$height=ImageSY($srcimg);
}
is_orizontal($width, $height);
$destimg=ImageCreatetruecolor($width,$height) or die("Problemi nelle creazioni dell'immagine");
ImageCopyResized($destimg,$srcimg,0,0,0,0,$width,$height,ImageSX($srcimg),ImageSY($srcimg)) or die("Problemi nel ridimensionamento");
ImageJPEG($destimg,DIR_IMMAGINI."/".$nome,100) or die("Problemi nel salvataggio");
$destimg=ImageCreatetruecolor($width*0.2,$height*0.2) or die("Problemi nelle creazioni dell'immagine");
ImageCopyResized($destimg,$srcimg,0,0,0,0,$width*0.2,$height*0.2,ImageSX($srcimg),ImageSY($srcimg)) or die("Problemi nel ridimensionamento");
ImageJPEG($destimg,DIR_IMMAGINI.DIR_MIN."/".$nome,100) or die("Problemi nel salvataggio");
break;
case 'image/gif':
$srcimg=ImageCreateFromgif(DIR_IMMAGINI."/".$nome) or die("Problemi nell'aprire l'immagine gif");break;
if(isBigger($srcimg)){
$width=ImageSX($srcimg)*0.3;
$height=ImageSY($srcimg)*0.3;
}else{
$width=ImageSX($srcimg);
$height=ImageSY($srcimg);
}
is_orizontal($width, $height);
$destimg=ImageCreatetruecolor($width,$height) or die("Problemi nelle creazione dell'immagine");
ImageCopyResized($destimg,$srcimg,0,0,0,0,$width,$height,ImageSX($srcimg),ImageSY($srcimg)) or die("Problemi nel ridimensionamento");
Imagegif($destimg,DIR_IMMAGINI."/".$nome,100) or die("Problemi nel salvataggio");
$destimg=ImageCreatetruecolor($width*0.2,$height*0.2) or die("Problema nelle creazioni dell'immagine");
ImageCopyResized($destimg,$srcimg,0,0,0,0,$width*0.2,$height*0.2,ImageSX($srcimg),ImageSY($srcimg)) or die("Problemi nel ridimensionamento");
Imagegif($destimg,DIR_IMMAGINI.DIR_MIN."/".$nome) or die("Problemi nel salvataggio");
break;
case 'image/GIF':
$srcimg=ImageCreateFromGIF(DIR_IMMAGINI."/".$nome) or die("Problemi nell'aprire l'immagine GIF");break;
if(isBigger($srcimg)){
$width=ImageSX($srcimg)*0.3;
$height=ImageSY($srcimg)*0.3;
}else{
$width=ImageSX($srcimg);
$height=ImageSY($srcimg);
}
is_orizontal($width, $height);
$destimg=ImageCreatetruecolor($width,$height) or die("Problemi nelle creazioni dell'immagine");
ImageCopyResized($destimg,$srcimg,0,0,0,0,$width,$height,ImageSX($srcimg),ImageSY($srcimg)) or die("Problemi nel ridimensionamento");
ImageGIF($destimg,DIR_IMMAGINI."/".$nome,100) or die("Problemi nel salvataggio");
$destimg=ImageCreatetruecolor($width*0.2,$height*0.2) or die("Problemi nelle creazioni dell'immagine");
ImageCopyResized($destimg,$srcimg,0,0,0,0,$width*0.2,$height*0.2,ImageSX($srcimg),ImageSY($srcimg)) or die("Problemi nel ridimensionamento");
ImageGIF($destimg,DIR_IMMAGINI.DIR_MIN."/".$nome) or die("Problemi nel salvataggio");
break;
case 'image/png':
$srcimg=ImageCreateFrompng(DIR_IMMAGINI."/".$nome) or die("Problemi nell'aprire l'immagine png");break;
if(isBigger($srcimg)){
$width=ImageSX($srcimg)*0.3;
$height=ImageSY($srcimg)*0.3;
}else{
$width=ImageSX($srcimg);
$height=ImageSY($srcimg);
}
is_orizontal($width, $height);
$destimg=ImageCreatetruecolor($width,$height) or die("Problemi nelle creazioni dell'immagine");
ImageCopyResized($destimg,$srcimg,0,0,0,0,$width,$height,ImageSX($srcimg),ImageSY($srcimg)) or die("Problemi nel ridimensionamento");
Imagepng($destimg,DIR_IMMAGINI."/".$nome,100) or die("Problemi nel salvataggio");
$destimg=ImageCreatetruecolor($width*0.2,$height*0.2) or die("Problemi nelle creazioni dell'immagine");
ImageCopyResized($destimg,$srcimg,0,0,0,0,$width*0.2,$height*0.2,ImageSX($srcimg),ImageSY($srcimg)) or die("Problemi nel ridimensionamento");
Imagepng($destimg,DIR_IMMAGINI.DIR_MIN."/".$nome) or die("Problemi nel salvataggio");
break;
case 'image/PNG':
$srcimg=ImageCreateFromPNG(DIR_IMMAGINI."/".$nome) or die("Problemi nell'aprire l'immagine PNG");break;
if(isBigger($srcimg)){
$width=ImageSX($srcimg)*0.3;
$height=ImageSY($srcimg)*0.3;
}else{
$width=ImageSX($srcimg);
$height=ImageSY($srcimg);
}
is_orizontal($width, $height);
$destimg=ImageCreatetruecolor($width,$height) or die("Problemi nelle creazioni dell'immagine");
ImageCopyResized($destimg,$srcimg,0,0,0,0,$width,$height,ImageSX($srcimg),ImageSY($srcimg)) or die("Problemi nel ridimensionamento");
ImagePNG($destimg,DIR_IMMAGINI."/".$nome,100) or die("Problemi nel salvataggio");
$destimg=ImageCreatetruecolor($width*0.2,$height*0.2) or die("Problemi nelle creazioni dell'immagine");
ImageCopyResized($destimg,$srcimg,0,0,0,0,$width*0.2,$height*0.2,ImageSX($srcimg),ImageSY($srcimg)) or die("Problemi nel ridimensionamento");
ImagePNG($destimg,DIR_IMMAGINI.DIR_MIN."/".$nome) or die("Problemi nel salvataggio");
break;
default: die("formato sconosciuto");break;
}
}
Ma per quale versione di PHP è stato realizzato questo script?
Attualmente PHP è in grado di riconoscere automaticamente il formato di un file immagine col comando imagecreatefromstring(file_get_contents("file_immagine")) senza dover fare delle procedure diverse (if, switch, ecc.) per ogni formato.
Prova così, poi vediamo.
Ho appena provato con ImageCreateFromstring
function creaMiniatura($nome,$tipo){
$srcimg=ImageCreateFromstring(DIR_IMMAGINI."/".$nome) or die("Problemi nell'aprire l'immagine jpg");
if(isBigger($srcimg)){
$width=ImageSX($srcimg)*0.3;
$height=ImageSY($srcimg)*0.3;
}else{
$width=ImageSX($srcimg);
$height=ImageSY($srcimg);
}
is_orizontal($width, $height);
$destimg=ImageCreatetruecolor($width,$height) or die("Problemi nelle creazioni dell'immagine");
ImageCopyResized($destimg,$srcimg,0,0,0,0,$width,$height,ImageSX($srcimg),ImageSY($srcimg)) or die("Problemi nel ridimensionamento");
Imagejpeg($destimg,DIR_IMMAGINI."/".$nome,100) or die("Problemi nel salvataggio");
$destimg=ImageCreatetruecolor($width*0.2,$height*0.2) or die("Problemi nelle creazioni dell'immagine");
ImageCopyResized($destimg,$srcimg,0,0,0,0,$width*0.2,$height*0.2,ImageSX($srcimg),ImageSY($srcimg)) or die("Problemi nel ridimensionamento");
Imagejpeg($destimg,DIR_IMMAGINI.DIR_MIN."/".$nome,100) or die("Problemi nel salvataggio");
Imagedestroy($destimg);
}
nonostante questa funzione mi snellisca il codice, purtroppo non funziona...mi torna il seguente errore con ogni formato di immagine comune(jpg,gif,png)
Warning: imagecreatefromstring() [function.imagecreatefromstring]: Data is not in a recognized format in /var/www/gallery/function.php on line 89
Problemi nell'aprire l'immagine jpg
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.