2012-03-18 4 views
-1

私はこのサイト上のように透かしを作りたい:それのhttp://9gag.comウォーターマーク(9gag.comスタイル)

主なものは、下の画像を短冊を置くことではなく、絵に置きます。私はPHPをGDライブラリとともに使用したいと思っています。任意のヘルプは、最高の1つは、サンプルコードまたは1つを使用する準備ができて評価されます:)

おはようございます!

答えて

8

Xピクセル背が高いイメージを作成し、位置(0,0)でそれに元の画像をコピーして位置(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); 

テストし、それがそのように動作するはずはありません。このコードでは、ウォーターマークが元のイメージよりも広くないと想定しています。

+0

可変イメージの幅を処理しません。 –

+0

私はそれを確認した後、ウォーターマークの幅がイメージよりも小さくなるまで、さまざまなイメージの幅で動作します。 @ThiefMasterはこのストライプの背景色を変更する方法と、右下隅に透かしを入れる方法を教えてもらえますか? (今は左下にあります)。そしてまず第一に大きな感謝! – Snatch

+0

'imagecolorallocate()'は色を作成するために 'imagecilledrectangle()'を描画します(2番目の 'imagecopy()'呼び出しと同じサイズを使い、その関数を呼び出す前にコードを入れます)。何かをコピーする前に画像全体を単に 'imagefill()'することもできます。 – ThiefMaster

1

見た目が良くても簡単ではありません。

下のストライプには、下のストライプのために左、中央、右の3つのチャンクが必要です。 3つのチャンクはすべて同じ高さにすることをお勧めします。

Here you go

使用後

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

  • 左側は右側がimagecopymerge(...)あるimagecopymerge(...)
  • ですが、幅を減算することにより、X先を計算する必要があります入力画像の幅から右チャンク
  • 左と右の間で(やはり数学的に簡単に)、imagecopyresize(...)を使用して中央のチャンクを追加します。この関数を使用して、左と右のチャンク間で線形にスケーリングされていることを確認します。
+0

あなたは漫画家ですか?単純な図ですが、それは何かを持っています:Dとbtw。私はあなたが話していることを知っているのを見て、おそらくあなたは私のためにコードを使用する準備ができていますか? – Snatch

+1

ハッハッハ、ちょうどSnipping Toolのデフォルトチゼルです。私はIBM X61Tを持っています。また、すべてのことを書き込む時間はありませんが、それは簡単です。あなたがそれを行うことができない場合は、ちょうどElanceに行き、あなたのためにそれをするためにインドの$ 15を支払う。 –