Creez de la 3d sur vos images avec 1 ligne de code

Description

Avec l'include 'Image3D.php' il vous suffit d'écrire :
Image3D($im,$r,$v,$b,$dir,$h);

Pour la signification des paramètres, voyez la source :

Source / Exemple :


<?
/*********************************************/
/* Nom     : Image3D                         */
/* Auteur  : pgpp05@hotmail.com              */
/* Créé    : 22/05/2004                      */
/* Modifié : 22/05/2004                      */
/*********************************************/
/* Utilité : Crée un effet 3D sur une image  */
/*********************************************/
/* Arguments : ($im,$dr,$dg,$db,$dir,$h)     */
/*   $im : Pointeur sur l'image              */
/*   $dr,$dg,$db : Composantes couleurs      */
/*       r,v,b à décaler sur l'effet 3D      */
/*   $dir : direction de la 3D, combinaison  */
/*       booléenne des constantes sivantes:  */
/*       BAS|HAUT|DROITE|GAUCHE|X2|Y2        */
/*       X2,Y2 doublent l'effet sur X ou Y   */
/*   $h : Hauteur de l'effet 3D              */
/*********************************************/

define(BAS,1);
define(HAUT,2);
define(DROITE,4);
define(GAUCHE,8);
define(Y2,16);
define(X2,32);

function Image3D(&$im,$dr,$dg,$db,$dir,$h)
{
  global $dx,$dy;$dx=$dy=0;
  $sx=imageSX($im);$sy=imageSY($im);
  if(($dir&BAS)==BAS) $dy-=1;
  if(($dir&HAUT)==HAUT) $dy+=1;
  if(($dir&DROITE)==DROITE) $dx-=1;
  if(($dir&GAUCHE)==GAUCHE) $dx+=1;
  if(($dir&Y2)==Y2) $dy*=2;
  if(($dir&X2)==X2) $dx*=2;

  if($dy<0)
    for($x=0;$x<=$sx;$x++)
      scan3D($im,$x,$sy,$h,$dr,$dg,$db);
  if($dy>0)
    for($x=0;$x<=$sx;$x++)
      scan3D($im,$x,0,$h,$dr,$dg,$db);
  if($dx<0)
    for($y=1;$y<$sy;$y++)
      scan3D($im,$sx,$y,$h,$dr,$dg,$db);
  if($dx>0)
    for($y=1;$y<$sy;$y++)
      scan3D($im,0,$y,$h,$dr,$dg,$db);
}

function scan3D(&$im,$x,$y,$h,$dr,$dg,$db)
{
  global $dx,$dy;
  $cx=0;$cy=0;
  if($dx>0)$cx=1;if($dx<0)$cx=-1;if($dy>0)$cy=1;if($dy<0)$cy=-1;
  $sx=imageSX($im);$sy=imageSY($im);
  while($x>=0 && $y>=0 && $x<=$sx && $y<=$sy)
  {
    $x+=$dx;$y+=$dy;
    $bx=$by=false;
    while($x>=0 && $y>=0 && $x<=$sx && $y<=$sy)
    {
      if(($c=imageColorAt($im,$x,$y))!=0) break;
      else if($bx===false && $by===false){$bx=$x;$by=$y;}
      $x+=$dx;$y+=$dy;
    }
    if($x<0 || $y<0 || $x>$sx || $y>$sy) return(1);
    if($bx===false || $by===false) continue;
    if(abs(($bx-$x)/($dx?$dx:1))>=$h) $bx=$x-$dx*$h;
    if(abs(($by-$y)/($dy?$dy:1))>=$h) $by=$y-$dy*$h;
    $c=imageColorsForIndex($im,$c);
    $r=$c['red']+$dr;$g=$c['green']+$dg;$b=$c['blue']+$db;
    if($r>255)$r=255;if($r<0)$r=0;
    if($g>255)$g=255;if($g<0)$g=0;
    if($b>255)$b=255;if($b<0)$b=0;
    if(($color=ImageColorExact($im,$r,$g,$b))==-1) $color=ImageColorAllocate($im,$r,$g,$b);
    ImageLine($im,$bx,$by,$x-$cx,$y-$cy,$color);
  }
  return(0);
}

$im=ImageCreate(300,170);
ImageColorAllocate($im,255,255,255);
ImageColorAllocate($im,128,80,128);
ImageColorAllocate($im,30,200,30);
ImageColorAllocate($im,150,0,0);
ImageColorAllocate($im,0,60,150);
ImageColorAllocate($im,150,150,0);
ImageFilledPolygon($im,array(50,50,100,80,150,75,200,50,100,35,150,25,80,15),7,3);
//ImageFilledEllipse($im,250,100,75,50,2);
ImageFilledRectangle($im,240,20,255,150,2);
ImageFilledRectangle($im,260,50,275,150,4);
ImageFilledRectangle($im,280,80,295,150,5);
ImageString($im,5,30,115,"function Image3D()",1);
ImageString($im,5,30,135,"pgpp05@hotmail.com",1);
Image3D($im,60,60,60,HAUT|GAUCHE,6);
ImagePNG($im);
?>

Conclusion :


Les dernières lignes sont un exemple (cf la capture d'écran).

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.