Php, Miniature en cache d'image png avec transparence.
Posté : 04 sept. 2010, 09:37
Bonjour à tous, j'ai un probleme et je souhaite votre aide s'il vous plait.
J'ai récupéré un systeme de gestion de miniature. il gère tout partfaitement bien sauf les images png.
Au final, elles ton un fond noir.
Le probleme, c'est que j'ai pres de 12000 png, je peux donc pas les traiter à la main.
Voici mon fichier de generation de miniature. je souhaiterais qu'il gère la transparance des png
J'ai récupéré un systeme de gestion de miniature. il gère tout partfaitement bien sauf les images png.
Au final, elles ton un fond noir.
Le probleme, c'est que j'ai pres de 12000 png, je peux donc pas les traiter à la main.
Voici mon fichier de generation de miniature. je souhaiterais qu'il gère la transparance des png
<?php
// function de création d'image
$url = htmlspecialchars (htmlentities ($_GET['uri'])); //RECUPERE L'ID DE L'ARTICLE EN GET
/* VERIFICATION PHOTO */
$je_recherche_dans_le_dossier = $url;
// Si la photo existe
if(is_file($je_recherche_dans_le_dossier)) {
if (@file_exists($je_recherche_dans_le_dossier)) {
$url = htmlspecialchars (htmlentities ($_GET['uri'])); //RECUPERE L'ID DE L'ARTICLE EN GET
} else {
$url = 'http://'.$_SERVER['HTTP_HOST'].'/ressources/medias/noimage/noimage.jpg';
}
}
else {
$url = 'http://'.$_SERVER['HTTP_HOST'].'/ressources/medias/noimage/noimage.jpg';
}
$url_formate = substr($url, (strrpos($url, '/') + 1)); // formattage de l'url
$width = htmlspecialchars (htmlentities ($_GET['w'])); //RECUPERE L'ID DE L'ARTICLE EN GET
$height = htmlspecialchars (htmlentities ($_GET['h'])); //RECUPERE L'ID DE L'ARTICLE EN GET
$rep = "_cache/";
$filename = $rep.$width."_".$url_formate;
if (!file_exists($filename)) {
if(!function_exists("create_square_image")){
function create_square_image($original_file, $destination_file=NULL, $square_size = 96){
if(isset($destination_file) and $destination_file!=NULL){
if(!is_writable($destination_file)){
//echo '<p style="color:#FF0000">Le dossier cache n\'est pas accessible en écriture</p>';
}
}
// get width and height of original image
$imagedata = getimagesize($original_file);
$original_width = $imagedata[0];
$original_height = $imagedata[1];
if($original_width > $original_height){
$new_height = $square_size;
$new_width = $new_height*($original_width/$original_height);
}
if($original_height > $original_width){
$new_width = $square_size;
$new_height = $new_width*($original_height/$original_width);
}
if($original_height == $original_width){
$new_width = $square_size;
$new_height = $square_size;
}
$new_width = round($new_width);
$new_height = round($new_height);
// load the image
if(substr_count(strtolower($original_file), ".jpg") or substr_count(strtolower($original_file), ".jpeg")){
$original_image = imagecreatefromjpeg($original_file);
}
if(substr_count(strtolower($original_file), ".gif")){
$original_image = imagecreatefromgif($original_file);
}
if(substr_count(strtolower($original_file), ".png")){
$original_image = imagecreatefrompng($original_file);
}
$smaller_image = imagecreatetruecolor($new_width, $new_height);
$square_image = imagecreatetruecolor($square_size, $square_size);
imagecopyresampled($smaller_image, $original_image, 0, 0, 0, 0, $new_width, $new_height, $original_width, $original_height);
if($new_width>$new_height){
$difference = $new_width-$new_height;
$half_difference = round($difference/2);
imagecopyresampled($square_image, $smaller_image, 0-$half_difference+1, 0, 0, 0, $square_size+$difference, $square_size, $new_width, $new_height);
}
if($new_height>$new_width){
$difference = $new_height-$new_width;
$half_difference = round($difference/2);
imagecopyresampled($square_image, $smaller_image, 0, 0-$half_difference+1, 0, 0, $square_size, $square_size+$difference, $new_width, $new_height);
}
if($new_height == $new_width){
imagecopyresampled($square_image, $smaller_image, 0, 0, 0, 0, $square_size, $square_size, $new_width, $new_height);
}
// if no destination file was given then display a png
if(!$destination_file){
imagepng($square_image,NULL,9);
}
// save the smaller image FILE if destination file given
if(substr_count(strtolower($destination_file), ".jpg")){
imagejpeg($square_image,$destination_file,100);
}
if(substr_count(strtolower($destination_file), ".gif")){
imagegif($square_image,$destination_file);
}
if(substr_count(strtolower($destination_file), ".png")){
imagepng($square_image,$destination_file,9);
}
imagedestroy($original_image);
imagedestroy($smaller_image);
imagedestroy($square_image);
}
}
create_square_image($url,$rep.$width."_".$url_formate,$width);
}
// Get actual size of source image
$imgInfo = getimagesize($rep.$width."_".$url_formate) or die("Unable to open '$uri'");
$srcType = $imgInfo[2];
switch($srcType) {
case 1 : $srcType = "gif"; break;
case 2 : $srcType = "jpeg"; break;
case 3 : $srcType = "png"; break;
default: $srcType = "???";
}
header("Content-Type:image/".$srcType."");
readfile($rep.$width."_".$url_formate) or diewith("Unable to open cached thumb '$cacheFile'");
?>
Merci très sincèrement de votre aide !