2012-03-18 3 views
-1

Je veux faire comme filigrane sur ce site: http://9gag.comfiligrane sous l'image (style 9gag.com)

La chose principale est de mettre une bande sous l'image au lieu de le placer dans l'image . Je veux le faire en utilisant PHP avec les librairies GD. N'importe quelle aide serait appréciée meilleur sera un exemple de code ou prêt à utiliser un :)

Salutations!

Répondre

8

Créer une image qui est x pixels plus grand, copier l'image originale en elle à la position (0,0) et le filigrane à la position (0,original_height):

$image = 'foo.jpg'; 
$watermark = 'watermark.png'; 
$imagesize = getimagesize($image); 
$watermarksize = getimagesize($watermark); 
$img = imagecreatetruecolor($imagesize[0], $imagesize[1] + $watermarksize[1]); 
imagecopy($img, imagecreatefromjpeg($image), 0, 0, 0, 0, $imagesize[0], $imagesize[1]); 
imagecopy($img, imagecreatefrompng($watermark), 0, $imagesize[1], 0, 0, $watermarksize[0], $watermarksize[1]); 
imagejpeg($img); 

Non testé, mais il devrait fonctionner comme ça. Le code suppose que le filigrane n'est pas plus large que l'image originale.

+0

Ne gère pas les largeurs d'image variables. –

+0

Eh bien après je l'ai vérifié, je peux dire, il fonctionne avec des largeurs d'image variables jusqu'à ce que la largeur du filigrane soit plus petite que l'image, c'est bien! @ThiefMaster pouvez-vous me dire comment changer la couleur de fond de cette bande et comment faire filigrane dans le coin en bas à droite? (maintenant c'est dans le coin inférieur gauche). Et tout d'abord, MERCI BEAUCOUP !! – Snatch

+0

'imagecolorallocate()' pour créer une couleur, 'imagefilledrectangle()' pour dessiner une boîte (utiliser la même taille que dans le deuxième 'appel imagecopy()' et mettre le code avant d'appeler cette fonction). Vous pouvez également simplement «imagefill()» l'image entière avant de copier quoi que ce soit. – ThiefMaster

1

Pas aussi facile si vous voulez qu'il soit beau.

La bande inférieure nécessite 3 blocs, c'est-à-dire à gauche, au milieu et à droite pour la bande inférieure. Il est recommandé que tous les 3 morceaux aient la même taille.

Here you go

Utilisez

imagecreatetruecolor(imagesx($original_picture), imagesy($original_picture)+$stripe_height); 

Puis:

  • côté gauche est imagecopymerge(...)
  • côté droit est imagecopymerge(...) mais vous devez calculer la destination x en soustrayant la largeur de la morceau droit à partir de la largeur de l'image d'entrée
  • Entre gauche et droite (encore une fois, faites le calcul, c'est facile), utilisez imagecopyresize(...) pour ajouter le segment du milieu. Utilisez cette fonction pour vous assurer qu'elle est mise à l'échelle linéairement entre les segments gauche et droit.
+0

Grigore es-tu dessinateur? dessin simple mais il y a quelque chose: D et btw. Je vois que vous savez de quoi vous parlez, peut-être pouvez-vous préparer un code plus prêt à utiliser pour moi? – Snatch

+1

Haha, c'est juste le burin par défaut de Snipping Tool, j'ai un IBM X61T. Aussi, pas le temps d'écrire le tout, mais c'est facile à faire. Si vous ne pouvez pas le faire cependant, allez à Elance et payez un Indien 15 $ pour le faire pour vous. –