2012-01-13 82 views
4

我有兩個圖像我想合併然後保存到一個新位置。
我想第二張圖片直接放在第一張圖片的下面。
我有以下所以但圖像甚至沒有保存。在php中合併兩個圖像

$destimg = imagecreatefromjpeg('images/myimg.jpg'); 

$src = imagecreatefromgif('images/second.gif'); 

// Copy and merge 
imagecopymerge($destimg, $src, 316, 100, 0, 0, 316, 100, 100); 

兩個圖像的寬度或316px X 100px的
從上面的代碼中的$ destimg現在應該是316x200但是這不會發生。也喜歡它成爲一個新的圖像,並保存到另一個文件夾。

感謝您的任何幫助。

+0

你見過你的PHP的版本,而這需要的版本? – clement 2012-01-13 23:18:45

+0

感謝您的回覆。我在描述中添加了php 5,但它從我認爲的mods中刪除。 – 2012-01-13 23:20:13

回答

15

對於這種情況,最佳方法可能是在內存中創建一個新圖像,然後將所需圖像複製或重新採樣到新圖像,然後將新圖像保存到磁盤。

例如:

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

// Get dimensions for specified images 

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

// Create new image with desired dimensions 

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

// Load images and then copy to destination image 

$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, $width_x, 0, 0, 0, $width_y, $height_y); 

// Save the resulting image to disk (as JPEG) 

imagejpeg($image, $filename_result); 

// Clean up 

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

} 

例子:

merge('images/myimg.jpg', 'images/second.gif', 'images/merged.jpg'); 
+0

通過檢查imagecreatetruecolor和imagecreatefromjpeg的結果來包含更好的錯誤處理是明智的。爲簡潔起見,我忽略了這一點。 – 2012-01-13 23:26:41

+0

完美謝謝 – 2012-01-13 23:54:26

0

我建議你改用Image Magick(pecl-imagick模塊或通過shell作爲命令運行)。我有幾個方面的原因:

Imagick是:

  • 更快
  • 知道更多格式
  • 可以更好的圖像質量
  • 有更多的能力(例如文本旋轉)
  • 多。 ..

你的方法是Imagick :: compositeI法師,如果你使用php模塊。手動:http://php.net/manual/en/function.imagick-compositeimage.php

0

我想在這裏補充一件事,如果你使用的是PHP GD庫,那麼你應該包括imagesavealpha()alphablending()也。

-4

我找到了答案,用GD:

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

// Get dimensions for specified images 

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

// Create new image with desired dimensions 

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

// Load images and then copy to destination image 

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

imagecopy($image, $image_x, 0, 0, 0, 0, $width_x, $height_x); 
         // top, left, border,border 
imagecopy($image, $image_y, 100, 3100, 0, 0, $width_y, $height_y); 

// Save the resulting image to disk (as JPEG) 

imagejpeg($image, $filename_result); 

// Clean up 

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

} 

這樣的:

merge('images/myimage.jpg', 'images/second.gif', 'images/merged.jpg'); 
+0

答案在上面。 – 2016-06-16 05:50:59