2015-08-14 5 views
1

Je voudrais créer un filigrane avec PHP et la bibliothèque GD.Comment puis-je faire une image filigrane avec PHP et GD comme envato photodune preview image?

Je voudrais faire répéter le filigrane logo avec marge automatique (espace) entre chaque logo répété, également la position en zigzag.

Est-il possible de créer filigrane qui relie chaque logo de filigrane?

Le résultat serait comme suit:


j'ai achevé le zigzag à l'aide de la fonction de boucle et même clause impair.

/* 
      * utils 
       $widthWatermark = imagesx($logo); 
       $heightWatermark = imagesy($logo); 
       $widthPhoto = imagesx($output); 
       $heightPhoto = imagesy($output); 
      */ 

      // $xLogoPosition = 0; 
      // $yLogoPosition = 0; 


      $__xRepeat = ceil($widthPhoto/$widthWatermark); 
      $__yRepeat = ceil($heightPhoto/$heightWatermark); 
      $margin = (int)self::$option['margin']; 

      for ($i = 0; $i <= $__xRepeat; $i++) { 

       if ($i % 2 === 0) { 
        $pre_ii = 1; 
       } else { 
        $pre_ii = 0; 
       } 

       for ($ii = 0; $ii <= $__yRepeat; $ii++) { 

        $ii_zero = $ii - $pre_ii; 

        if ($ii_zero % 2 === 0) {  
         $y_xindent = $widthWatermark;       
        }else{ 
         $y_xindent = 0; 
        } 

        $this->imagecopymerge_alpha($output, $logo, ($xLogoPosition + $widthWatermark * $i + $y_xindent), ($yLogoPosition + $widthWatermark * $ii), 0, 0, ImageSX($logo), ImageSY($logo), self::$option['opacity']); 
       } 
      } 

maintenant je suis resté sur la façon de créer une ligne en pointillés qui ont une position diagonale qui se connectent à l'autre logo.

J'ai un soupçon de http://php.net/manual/en/function.imagedashedline.php mais je ne sais pas comment utiliser et de combiner avec mon code précédent qui génèrent logo zigzag

+1

Montrez vos tentatives jusqu'à présent. – iplus26

+0

Je peux juste commander la position répétée. bloqué sur la façon de le faire en zigzag – Suabahasa

Répondre

1

Modifier

Il se avère que PHP/GD a effectivement une fonction - imagesettile() - spécifiquement pour gérer cette situation.

J'ai modifié ma première réponse à ce compte:

<?php 
// create php image of a 'dashed cross'. 
$crossW = $crossH = 200; 
$cross = imagecreatetruecolor($crossW, $crossH); 
imagefill($cross, 0, 0, 0x7fff00ff); // transparent magenta. 
imagesetthickness($cross, 1); 
imagesetstyle(
    $cross, 
    array_merge(
     array_fill(0, 3, 0x7fff00ff), // transparent magenta. 
     array_fill(0, 8, 0x60ffffff) // partially-transparent white. 
    ) 
); 
imageline($cross, 0, 0, $crossW, $crossH, IMG_COLOR_STYLED); 
imageline($cross, $crossW, 0, 0, $crossH, IMG_COLOR_STYLED); 

$imageFile = 'wm2.jpg'; 

// open the image file to be watermarked and store its height and width. 
$image = imagecreatefromjpeg($imageFile); 
$imWidth = imagesx($image); 
$imHeight = imagesy($image); 

// apply the cross pattern as a tile to the image file. 
imagesettile($image, $cross); 
imagefilledrectangle($image, 0, 0, $imWidth, $imHeight, IMG_COLOR_TILED); 

header('Content-type: image/png'); 
imagepng($image); 
imagedestroy($cross); 
imagedestroy($image); 
exit; 

Entrée:

enter image description here

Résultat:

enter image description here

+0

@ user3681874: L'approche de Tim fonctionnera pour cela - il suffit de changer la taille du carré de tiret, et modifier le décalage si nécessaire. Essayez? – halfer

+0

@halfer: Désolé, mais je voudrais la ligne en pointillés est générée par une fonction php, pas une image. quand nous le générons par la fonction php, il sera flexible pour modifier le poids de la ligne, la couleur de la ligne et d'autres personnaliser. – Suabahasa

+0

@ user3681874, d'accord - [voir ici] (https://secure.php.net/manual/fr/function.imagesetstyle.php). – halfer