2013-05-21 25 views
10

Tôi muốn chèn chữ ký (được lưu dưới dạng tệp png) ở cuối thư (được lưu dưới dạng tệp jpg) trong trang web php. Tôi đã sử dụng imagecopymerge, nhưng nó tạo ra một tệp hình ảnh màu đen thay vì yêu cầu của tôi. Tôi cũng sử dụng mã này nhưng không có kết quả.Làm thế nào để chèn một chữ ký ở dưới cùng của một hình ảnh trong php?

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

Kết quả của bạn là gì? –

+0

Các hình ảnh có tồn tại trong đường dẫn hiện tại (nơi tệp nguồn tồn tại) không? Bạn đã đảm bảo đường dẫn có chính xác không và các tệp có thể truy cập được không? –

+0

chỉ một trang đen – sepehr2121

Trả lời

0

Bạn có thể chạy các công cụ dòng lệnh (ví dụ: qua exec) không? Nếu vậy, imagemagick công cụ dòng lệnh có thể thực hiện bất kỳ thao tác hình ảnh nào bạn cần. Âm thanh layering functionality giống như sau:

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

Đó không phải là câu trả lời, không phải là? Vui lòng sử dụng nhận xét cho việc này. – DaGardner

+1

Câu trả lời được cập nhật để thực sự cung cấp câu trả lời. :-) – moodboom

0

Gif của bạn có thể có bảng màu và không phải là hình ảnh màu thực. Nếu phiên bản php của bạn là 5+ kiểm tra với imageistruecolor và trong trường hợp sử dụng imagepalettetotruecolor.

1

Vui lòng thử chức năng này, tôi đã tùy chỉnh chức năng của bạn.

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

Chức năng này phù hợp với tôi. Vì tôi đã không nhìn thấy hình ảnh của bạn, tôi có thể cho bạn biết những gì tôi đang sử dụng để kiểm tra nó.

  • bg.jpg = 400x400 jpg
  • fg.gif = 200X200 gif (Với nền trong suốt)

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'); 

Điều này dường như làm việc tốt. Tôi giả định có thể bạn đang gặp phải một số vấn đề định vị. Hãy thử mọi thứ ở vị trí bắt đầu 0 rồi bắt đầu di chuyển cho đến khi bạn đạt được hiệu quả mong muốn.

Các vấn đề liên quan