Forum Programmation.php Transformation d'image: effet de perspective

Posté par  (site web personnel) .
Étiquettes : aucune
0
30
sept.
2005
Bonjour à tous,

Dans un script PHP, j'aimerais traiter une image afin de lui donner un pseudo effet de perspective (en gros, à partir d'une image rectangulaire, obtenir une image trapézoïdale (?)).

Ma question est toute simple: connaissez-vous un script tout fait qui offre cette fonctionnalité ou bien dois-je l'écrire moi-même ?
  • # C'est cadeau, ça fait plaisir

    Posté par  . Évalué à 4.

    Et hop. Je viens de faire ce script en utilisant en particulier 'imagecopyresized' ligne par ligne. J'espère que c'est ce que tu cherches.
    <?php
    	
    
    	// Image::Trapeze(chemin de l'image JPG, base superieure, base inférieure)
    	function trapeze($sImagePath, $nSupX, $nSubX) {
    			$source = imagecreatefromjpeg($sImagePath);
    			list($width, $height) = getimagesize($sImagePath);
    			$thumb = imagecreate(max($nSupX, $nSubX), $height);
    			imagefill($thumb, 0, 0, ImageColorAllocate( $thumb, 0, 0, 0 ));	// <<---- Couleur de fond
    
    			
    			$nCoefX = ((float)($nSubX-$nSupX))/($height*2);
    
    			$nPosStartX = ($width-$nSupX)/2;
    			$nPosEndX = ($width-$nSubX)/2;
    
    			$nPosX = ($width-$nSupX)/2 - min($nPosStartX, $nPosEndX);
    			$nNewWidth = $nSupX;
    			for($cpt=0; $cpt<$height; $cpt++) {
    					imagecopyresized($thumb, $source, $nPosX, $cpt, 0, $cpt, $nNewWidth, 1, $width, 1);
    					$nPosX -= $nCoefX;
    					$nNewWidth += $nCoefX*2;
    			}
    
    			return $thumb;		
    	}
    
    	// Fichier et nouvelle taille
    	$filename = 'test.jpg';
    
    	// Content type
    	header('Content-type: image/jpeg');
    
    	// Affichage
    	imagejpeg(trapeze($filename, 100 , 100));
    	
    ?> 
    
    • [^] # Re: C'est cadeau, ça fait plaisir

      Posté par  . Évalué à 2.

      Bon, évidemment, si on appelle "imagejpeg(trapeze($filename, 100 , 100))", ça donne l'image d'origine...
      Il faut mieux essayer avec "imagejpeg(trapeze($filename, 50 , 100))" plutôt.

      Boulet moi....
    • [^] # Re: C'est cadeau, ça fait plaisir

      Posté par  . Évalué à 1.

      Il faut plutot utiliser "imagecreatetruecolor" à la place de "imagecreate", sinon on perd des couleurs sur certaines images.
    • [^] # Re: C'est cadeau, ça fait plaisir

      Posté par  (site web personnel) . Évalué à 1.

      Ouah, merci beaucoup, je n'en demandais pas tant :-)
      Je vais remanier un peu le code pour pouvoir faire un parallélépipède dans n'importe quel sens, ton code m'a permis de voir que finalement, bidouiller des images ligne par ligne en PHP, c'est pas si lent que je l'aurais imaginé !

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.