Php, Miniature en cache d'image png avec transparence.

anthonyb
Invité n'ayant pas de compte PHPfrance

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
<?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 !