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

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Php, Miniature en cache d'image png avec transparence.

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

par anthonyb » 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 !