- Home
- Categorie
- Coding e Sistemistica
- PHP
- imagepng taglia la trasparenza
-
imagepng taglia la trasparenza
Ciao a tutti vi chiedo un aiuto; ho creato una funzione di inserimento foto (jpg) predefinita in automatico "se il campo immagine passato dal form e vuoto", e fin qui tutto bene; il problema nasce se uso una foto png come predefinita. In pratica la trasparenza la vedo grigia o bianca, ho provato con tutta la famiglia di internet explorer , opera, safari, firefox, ho controllato la foto salvata in cartella dalla funziona e la vedo senza trasparenza; vi copio il codice inserimento foto automatico.
Grazie a tutti.
PS la salvo 2 volte in 2 cartelle
[php]elseif (empty ($immagine))
{
$timestamp = time();
$files = '../../images/persona_staff.png';
$thumb = imagecreatefrompng($files) or die ("Impossibile aprire l'immagine originale");
$thumbs = '../../images/staff/thumb/'.time().'-'.'persona_staff.png';
imagepng ($thumb, $thumbs, 9);
$file = time().'-'.'persona_staff.png';$img = imagecreatefrompng($files) or die ("Impossibile aprire l'immagine originale");
$imgs = '../../images/staff/foto/'.time().'-'.'persona_staff.png';
imagepng ($img, $imgs, 9);
$photo = time().'-'.'persona_staff.png';
}
//con le 2 variabile $file e $photo salvo il nome della foto nel database
[/php]
-
Prova così :
[PHP]
elseif (empty ($immagine))
{$timestamp = time();
$files = '../../images/persona_staff.png';$thumb = imagecreatefrompng($files) or die ("Impossibile aprire l'immagine originale");
imageAlphaBlending($files, true);
imageSaveAlpha($files, true);
$thumbs = '../../images/staff/thumb/'.time().'-'.'persona_staff.png';
imagepng ($thumb, $thumbs, 9);
$file = time().'-'.'persona_staff.png';$img = imagecreatefrompng($files) or die ("Impossibile aprire l'immagine originale");
$imgs = '../../images/staff/foto/'.time().'-'.'persona_staff.png';
imagepng ($img, $imgs, 9);
$photo = time().'-'.'persona_staff.png';
}[/PHP]
-
ciao grazie dell aiuto, ma non funziona, ho visto che anche se inserisco una png a 8 o 24 bit dal form, l immagine ridimensionata cambia colore, uso come server easyphp2 su win xp sp3, le GD2 sono attive, copio tutto il codice di inserimento/ridimensionamento foto. grazie a tutti
[php]
$immagine = $_FILES['immagine']['type'];
if (empty ($immagine))
{
$timestamp = time();
$files = '../../images/persona_staff.png';
$thumb = imagecreatefrompng($files) or die ("Impossibile aprire l'immagine originale");
imagealphablending($files, false);
imagesavealpha ($files, true);
$thumbs = '../../images/staff/thumb/'.time().'-'.'persona_staff.png';
imagepng ($thumb, $thumbs, 9);
$file = time().'-'.'persona_staff.png';$img = imagecreatefrompng($files) or die ("Impossibile aprire l'immagine originale");
imagealphablending($files, false);
imagesavealpha ($files, true);
$imgs = '../../images/staff/foto/'.time().'-'.'persona_staff.png';
imagepng ($img, $imgs, 9);
$photo = time().'-'.'persona_staff.png';
}
elseif (!empty ($immagine))
{
$timestamp = time();
$type = $immagine;
$file = time() .'-'.$_FILES['immagine']['name'];
$type = array("image/gif","image/x-png", "image/png","image/pjpeg","image/jpeg", "image/jpg");
if(!in_array($_FILES['immagine']['type'],$type))
{
die("Il file non è di un tipo consentito, sono ammessi solo i seguenti: " . implode("," , $type) . ".");
}
$sImgInfo = getimagesize($_FILES['immagine']['tmp_name']);
$max_width = "1024";
$max_height = "1024";
$sMaxWidth = $sImgInfo[0];
$sMaxHeight = $sImgInfo[1];
if ($sMaxWidth > $max_width || $sMaxHeight > $max_height)
{
die ("Errore: La Foto ha Dimisioni Maggiori di 1024x1024 " .mysql_error());
exit;
}$dir ="../../images/staff/foto/";
$urlimmagine = $dir.$file;
copy($_FILES['immagine']['tmp_name'], $urlimmagine);
$destination_path = '../../images/staff/thumb/'.$file;
$photo = $file;
}
list () = thummain ($type, $file, $destination_path, $sMaxWidth, $sMaxHeight, $sImgInfo, $urlimmagine);
function thummain( $type, $file, $destination_path, $sMaxWidth, $sMaxHeight, $sImgInfo, $urlimmagine)
{
switch($sImgInfo[2])
{
case 1: $sType = IMG_GIF; break;
case 2: $sType = IMG_JPG; break;
case 3: $sType = IMG_PNG; break;
case 4: $sType = IMG_WBMP; break;
default: return $urlimmagine; break;
}
switch($sType)
{
case IMG_GIF:
if (!function_exists('imagecreatefromgif')) return $urlimmagine;
$srcImage = imagecreatefromgif($urlimmagine) or die ("Impossibile aprire l'immagine originale");
break;
case IMG_JPG:
if (!function_exists('imagecreatefromjpeg')) return $urlimmagine;
$srcImage = imagecreatefromjpeg($urlimmagine) or die ("Impossibile aprire l'immagine originale");
break;
case IMG_PNG:
if (!function_exists('imagecreatefrompng')) return $urlimmagine;
$srcImage = imagecreatefrompng($urlimmagine) or die ("Impossibile aprire l'immagine originale");
break;
case IMG_WBMP:
if (!function_exists('imagecreatefromwbmp')) return $urlimmagine;
$srcImage = imagecreatefromwbmp($urlimmagine) or die ("Impossibile aprire l'immagine originale");
break;
default: return $urlimmagine;
}
if($srcImage)
{
$srcWidth = $sImgInfo[0];
$srcHeight = $sImgInfo[1];$sNewWidth = 200; $sNewHeight = ($sNewWidth * $srcHeight) / $srcWidth; if (!function_exists("imagecreatetruecolor")) $sDestImage = imagecreate($sNewWidth, $sNewHeight) or die("Impossibile creare la miniatura"); else $sDestImage = imagecreatetruecolor($sNewWidth, $sNewHeight); imagecopyresized($sDestImage, $srcImage, 0, 0, 0, 0, $sNewWidth, $sNewHeight, $srcWidth, $srcHeight); switch($sType) { case IMG_GIF: imagegif($sDestImage, $destination_path); break; case IMG_JPG: imagejpeg($sDestImage, $destination_path); break; case IMG_PNG: imagepng($sDestImage, $destination_path); break; case IMG_WBMP: imagewbmp($sDestImage, $destination_path); break; } imagedestroy($srcImage); imagedestroy($sDestImage); return $destination_path; } else { return $urlimmagine; }
}
[/php]
-
Prova così :
[php]
$immagine = $_FILES['immagine']['type'];
if (empty ($immagine))
{
$timestamp = time();
$files = '../../images/persona_staff.png';
$thumb = imagecreatefrompng($files) or die ("Impossibile aprire l'immagine originale");
imagealphablending($thumb, false);
imagesavealpha ($thumb, true);
$thumbs = '../../images/staff/thumb/'.time().'-'.'persona_staff.png';
imagepng ($thumb, $thumbs, 9);
$file = time().'-'.'persona_staff.png';$img = imagecreatefrompng($files) or die ("Impossibile aprire l'immagine originale");
imagealphablending($img, false);
imagesavealpha ($img, true);
$imgs = '../../images/staff/foto/'.time().'-'.'persona_staff.png';
imagepng ($img, $imgs, 9);
$photo = time().'-'.'persona_staff.png';
}
elseif (!empty ($immagine))
{
$timestamp = time();
$type = $immagine;
$file = time() .'-'.$_FILES['immagine']['name'];
$type = array("image/gif","image/x-png", "image/png","image/pjpeg","image/jpeg", "image/jpg");
if(!in_array($_FILES['immagine']['type'],$type))
{
die("Il file non è di un tipo consentito, sono ammessi solo i seguenti: " . implode("," , $type) . ".");
}
$sImgInfo = getimagesize($_FILES['immagine']['tmp_name']);
$max_width = "1024";
$max_height = "1024";
$sMaxWidth = $sImgInfo[0];
$sMaxHeight = $sImgInfo[1];
if ($sMaxWidth > $max_width || $sMaxHeight > $max_height)
{
die ("Errore: La Foto ha Dimisioni Maggiori di 1024x1024 " .mysql_error());
exit;
}$dir ="../../images/staff/foto/";
$urlimmagine = $dir.$file;
copy($_FILES['immagine']['tmp_name'], $urlimmagine);
$destination_path = '../../images/staff/thumb/'.$file;
$photo = $file;
}
list () = thummain ($type, $file, $destination_path, $sMaxWidth, $sMaxHeight, $sImgInfo, $urlimmagine);
function thummain( $type, $file, $destination_path, $sMaxWidth, $sMaxHeight, $sImgInfo, $urlimmagine)
{
switch($sImgInfo[2])
{
case 1: $sType = IMG_GIF; break;
case 2: $sType = IMG_JPG; break;
case 3: $sType = IMG_PNG; break;
case 4: $sType = IMG_WBMP; break;
default: return $urlimmagine; break;
}
switch($sType)
{
case IMG_GIF:
if (!function_exists('imagecreatefromgif')) return $urlimmagine;
$srcImage = imagecreatefromgif($urlimmagine) or die ("Impossibile aprire l'immagine originale");
break;
case IMG_JPG:
if (!function_exists('imagecreatefromjpeg')) return $urlimmagine;
$srcImage = imagecreatefromjpeg($urlimmagine) or die ("Impossibile aprire l'immagine originale");
break;
case IMG_PNG:
if (!function_exists('imagecreatefrompng')) return $urlimmagine;
$srcImage = imagecreatefrompng($urlimmagine) or die ("Impossibile aprire l'immagine originale");
break;
case IMG_WBMP:
if (!function_exists('imagecreatefromwbmp')) return $urlimmagine;
$srcImage = imagecreatefromwbmp($urlimmagine) or die ("Impossibile aprire l'immagine originale");
break;
default: return $urlimmagine;
}
if($srcImage)
{
$srcWidth = $sImgInfo[0];
$srcHeight = $sImgInfo[1];$sNewWidth = 200; $sNewHeight = ($sNewWidth * $srcHeight) / $srcWidth; if (!function_exists("imagecreatetruecolor")) $sDestImage = imagecreate($sNewWidth, $sNewHeight) or die("Impossibile creare la miniatura"); else $sDestImage = imagecreatetruecolor($sNewWidth, $sNewHeight); imagecopyresized($sDestImage, $srcImage, 0, 0, 0, 0, $sNewWidth, $sNewHeight, $srcWidth, $srcHeight); switch($sType) { case IMG_GIF: imagegif($sDestImage, $destination_path); break; case IMG_JPG: imagejpeg($sDestImage, $destination_path); break; case IMG_PNG: imagepng($sDestImage, $destination_path); break; case IMG_WBMP: imagewbmp($sDestImage, $destination_path); break; } imagedestroy($srcImage); imagedestroy($sDestImage); return $destination_path; } else { return $urlimmagine; }
} [/php]
-
ciao funziona, grazie del aiuto
ho cambiato anche 2 piccole cose nel codice updata_images. lo copio per intero con ridimensionamento automatico, se al qualcuno può servire.
ps per un mod ho un altra discussione risolta sempre legata a questo codice, si possono collegare insieme visto che si parla sempre dello stesso codice, ma in punti diversi?codice updata_images
[php]
<?php //classe update e ridimensionamento automatico
$immagine = $_FILES['immagine']['type'];
//inserisce una foto predefinita se $immagine e vuota
if (empty ($immagine))
{
$timestamp = time(); //uso la funzione time per evitare di sovrascrivere le foto con lo stesso nome
$files = '../../images/noimage.png'; //directory del file da caricare
$thumb = imagecreatefrompng($files) or die ("Impossibile aprire l'immagine originale");
//usare imagecreatefrompng "per foto png", imagecreatefromjpeg "per foto jpg" e ecc.//imagealphablending e imagesavealpha per mantenere la trasparenza delle png
imagealphablending($thumb, false);
imagesavealpha ($thumb, true);
$thumbs = '../../images/dipartimento/thumb/'.time().'-'.'noimage.png'; //directory dove salvare file elaborato
imagepng ($thumb, $thumbs, 9); //usare imagepng "per foto png", imagejpg "per foto jpg" e ecc.
$file = time().'-'.'noimage.png'; //con $file salvo solo il nome della foto elaborata senza collegamento nel database/salvo la foto di prima in un altra cartella/
$img = imagecreatefrompng($files) or die ("Impossibile aprire l'immagine originale");
//usare imagecreatefrompng "per foto png", imagecreatefromjpeg "per foto jpg" e ecc.//imagealphablending e imagesavealpha per mantenere la trasparenza delle png
imagealphablending($img, false);
imagesavealpha ($img, true);
$imgs = '../../images/dipartimento/foto/'.time().'-'.'noimage.png';//directory dove salvare file elaborato
imagepng ($img, $imgs, 9);//usare imagepng "per foto png", imagejpg "per foto jpg" e ecc.
$photo = time().'-'.'noimage.png'; //con $photo salvo solo il nome della foto elaborata senza collegamento nel database
}
//se $immagine e piena
elseif (!empty ($immagine))
{
$timestamp = time(); //uso la funzione time per evitare di sovrascrivere le foto con lo stesso nome
$type = $immagine; //passo il valore di $immagine a $type
$file = time() .'-'.$_FILES['immagine']['name']; //salvo la foto arrivata da form con il time per avere sempre foto con nomi diversi
//controllo il formato della foto
$type = array("image/gif","image/x-png", "image/png","image/pjpeg","image/jpeg", "image/jpg");
if(!in_array($_FILES['immagine']['type'],$type))
{
die("Il file non è di un tipo consentito, sono ammessi solo i seguenti: " . implode("," , $type) . ".");
}
//controllo le dimensioni della foto
$sImgInfo = getimagesize($_FILES['immagine']['tmp_name']);
$max_width = "1024";
$max_height = "1024";
$sMaxWidth = $sImgInfo[0];
$sMaxHeight = $sImgInfo[1];
if ($sMaxWidth > $max_width || $sMaxHeight > $max_height)
{
die ("Errore: La Foto ha Dimisioni Maggiori di 1024x1024 " .mysql_error());
exit;
}$dir ="../../images/dipartimento/foto/";//directory dove salvare la foto originale
$urlimmagine = $dir.$file; //copio la foto originale della cartella
copy($_FILES['immagine']['tmp_name'], $urlimmagine);
$destination_path = '../../images/dipartimento/thumb/'.$file;//directory dove salvare la foto thumb elaborata
$photo = $file;//salvo questi 2 con lo stesso nome della foto elaborata senza collegamento nel database
}
//inizio funzione thummain per cambiare dimensioni alle foto
list () = thummain ($type, $file, $destination_path, $sMaxWidth, $sMaxHeight, $sImgInfo, $urlimmagine);
function thummain($type, $file, $destination_path, $sMaxWidth, $sMaxHeight, $sImgInfo, $urlimmagine)
{
switch($sImgInfo[2])
{
case 1: $sType = IMG_GIF; break;
case 2: $sType = IMG_JPG; break;
case 3: $sType = IMG_PNG; break;
case 4: $sType = IMG_WBMP; break;
default: return $urlimmagine; break;
}
switch($sType)
{
case IMG_GIF:
if (!function_exists('imagecreatefromgif')) return $urlimmagine;
$srcImage = imagecreatefromgif($urlimmagine) or die ("Impossibile aprire l'immagine originale");
break;
case IMG_JPG:
if (!function_exists('imagecreatefromjpeg')) return $urlimmagine;
$srcImage = imagecreatefromjpeg($urlimmagine) or die ("Impossibile aprire l'immagine originale");
break;
case IMG_PNG:
if (!function_exists('imagecreatefrompng')) return $urlimmagine;
$srcImage = imagecreatefrompng($urlimmagine) or die ("Impossibile aprire l'immagine originale");break;
case IMG_WBMP:
if (!function_exists('imagecreatefromwbmp')) return $urlimmagine;
$srcImage = imagecreatefromwbmp($urlimmagine) or die ("Impossibile aprire l'immagine originale");
break;
default: return $urlimmagine;
}
if($srcImage)
{
$srcWidth = $sImgInfo[0];
$srcHeight = $sImgInfo[1];$sNewWidth = 200; $sNewHeight = ($sNewWidth * $srcHeight) / $srcWidth; if (!function_exists("imagecreatetruecolor")) $sDestImage = imagecreate($sNewWidth, $sNewHeight) or die("Impossibile creare la miniatura"); else $sDestImage = imagecreatetruecolor($sNewWidth, $sNewHeight); imagealphablending($sDestImage, false);
imagesavealpha ($sDestImage, true);
imagecopyresized($sDestImage, $srcImage, 0, 0, 0, 0, $sNewWidth, $sNewHeight, $srcWidth, $srcHeight);
switch($sType)
{
case IMG_GIF: imagegif($sDestImage, $destination_path); break;
case IMG_JPG: imagejpeg($sDestImage, $destination_path); break;
case IMG_PNG: imagepng($sDestImage, $destination_path, 9); break;
case IMG_WBMP: imagewbmp($sDestImage, $destination_path); break;
}
imagedestroy($srcImage);
imagedestroy($sDestImage);
return $destination_path;
}else { return $urlimmagine; }
}
?>[/php]