PDA

View Full Version : [PHP]Problemi con libreria GD


tookie
29-10-2009, 10:28
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?

flx2000
29-10-2009, 16:29
A quel che si vede lo script fa il controllo del MIME e va avanti solo se è JPEG.
Tocca vedere il resto dello switch per capire se e come elabora gli altri formati.

tookie
29-10-2009, 18:01
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;
}
}

flx2000
29-10-2009, 19:50
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.

tookie
30-10-2009, 10:06
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?

ok, appena ho un momento libero provero come dici tu

tookie
30-10-2009, 17:56
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

flx2000
31-10-2009, 13:55
Se il comando imagecreatefromstring(file_get_contents($file)) non funziona il problema è nell'immagine.

Per fare un test usa:

<?PHP
$file = "file_immagine.jpg";
$img = imagecreatefromstring(file_get_contents($file));
if ( $img == false ) {
echo "Formato file non valido\n";
exit(1);
} else {
echo "Formato file OK\n";
}
?>

tookie
02-11-2009, 16:39
ho scoperto che avevo fatto un errore di sintassi in imagecreatefromstring, ora funziona tutto correttamente, grazie per l'aiuto

flx2000
02-11-2009, 18:50
Eh, infatti mi sembrava strano! :)
Meglio così, hai risolto anche il problema iniziale delle immagini che non caricava?

tookie
03-11-2009, 08:57
sisi adesso funziona tutto, grazie per la dritta:D