2013-05-21 26 views
10

Bir php sitesindeki bir mektubun (jpg dosyası olarak kaydedilir) altına bir imza (png dosyası olarak kaydedilir) eklemek istiyorum. imagecopymerge kullanıyorum, ancak isteğim yerine siyah bir görüntü dosyası oluşturur. Bu kodu da kullandım, ancak sonuç yok.Bir resmin Alt kısmına bir İmza nasıl eklenir?

function merge($filename_x, $filename_y, $filename_result) { 

    list($width_x, $height_x) = getimagesize($filename_x); 
    list($width_y, $height_y) = getimagesize($filename_y); 

    $image = imagecreatetruecolor($width_x + $width_y, $height_x); 

    $image_x = imagecreatefromjpeg($filename_x); 
    $image_y = imagecreatefromgif($filename_y); 

    imagecopy($image, $image_x, 0, 20, 30, 50, $width_x, $height_x); 
    imagecopy($image, $image_y, $width_x, 0, 10, 0, $width_y, $height_y); 

    imagejpeg($image, $filename_result); 

    imagedestroy($image); 
    imagedestroy($image_x); 
    imagedestroy($image_y); 
} 

merge('myimg.jpeg', 'first.gif', 'merged.jpg'); 
+0

Sonuç nedir? –

+0

Geçerli yoldaki (kaynak dosyanın bulunduğu) resimler var mı? Yolun doğru olduğundan ve dosyalara erişebildiğinden emin oldunuz mu? –

+0

sadece siyah bir sayfa – sepehr2121

cevap

0

Komut satırı araçlarını (örneğin, exec) çalıştırabiliyor musunuz? Eğer öyleyse, imagemagick komut satırı araçları, ihtiyacınız olan herhangi bir görüntü manipülasyonu hakkında hemen bir şey yapabilir. layering functionality sesler gibi sonra ne:

echo exec('composite -geometry +5+10 image1.jpg image2.png image2.png'); 
+1

Bu bir cevap değil, değil mi? Lütfen bunun için yorumları kullanın. – DaGardner

+1

Cevabın aslında bir cevap vermesi için güncellendi. :-) – moodboom

0

Sizin gif bir renk paleti var ve gerçek bir renk görüntüsü değil belki. Eğer php sürümünüz 5+ ise imageistruecolor ile kontrol ediliyorsa ve imagepalettetotruecolor kullanın.

1

Lütfen bu işlevi deneyin, kendiniz özelleştirdim.

function merge($filename_x, $filename_y, $filename_result) { 
    $source = imagecreatefromjpeg($filename_x); 
    $tobeMerged = imagecreatefromgif($filename_y); 

    //add signature on bottom right 
    imagecopymerge($source, $tobeMerged, imagesx($source) - imagesx($tobeMerged), imagesy($source) - imagesy($tobeMerged), 0, 0, imagesx($tobeMerged), imagesy($tobeMerged), 100); 
    //save your merged image 
    imagejpeg($source, $filename_result); 

    //destroy image resources to free memory 
    imagedestroy($source); 
imagedestroy($tobeMerged); 
} 
merge('myimg.jpeg', 'first.gif', 'merged.jpg'); 
1

Bu işlev benim için çalışır. Resimlerinizi görmediğimden, test etmek için ne kullandığımı söyleyebilirim.

  • bg.jpg (şeffaf arka plan ile) = 400x400 jpg
  • fg.gif = 200X200 gif

function merge($filename_x, $filename_y, $filename_result) { 
    list($width_x, $height_x) = getimagesize($filename_x); 
    list($width_y, $height_y) = getimagesize($filename_y); 

    $image = imagecreatetruecolor($width_x, $height_x); 

    $image_x = imagecreatefromjpeg($filename_x); 
    $image_y = imagecreatefromgif($filename_y); 

    imagecopy($image, $image_x, 0, 0, 0, 0, $width_x, $height_x); 
    imagecopy($image, $image_y, 0, 0, 0, 0, $width_y, $height_y); 

    imagejpeg($image, $filename_result); 

    imagedestroy($image); 
    imagedestroy($image_x); 
    imagedestroy($image_y); 
} 

merge('bg.jpg', 'Untitled.gif', 'merged.jpg'); 

Bu iyi iş gibi görünüyor. Varsayalım belki konumlandırma sorunlarınız var. İstediğiniz etkiyi elde edene kadar, 0 başlangıç ​​pozisyonunda her şeyi deneyin ve hareket etmeye başlayın.

İlgili konular