PHP GD图像合并将我的图像更改为黑色

时间:2014-08-27 06:30:18

标签: php image gd

我有一个非常令人沮丧的情况。我是第一次使用PHP GD,它有点像过山车的关系。基本上,我试图将2个图像,一个正方形(高度/宽度为x)合并到一个矩形(宽度为x,高度为y)上。

广场需要垂直居中。但这不是问题 - 我已设法正确定位。

发生的事情是,我的矩形是白色的。我的方块有白色背景,因此当图像合并时,它应该看起来像我的资产在白色矩形背景上。

当我合并图像时,GD由于某种原因将我的背景白色矩形改为黑色 - 所以你可以看到中间的白色方块,黑色"条和#34;在顶部和底部。有人可以帮忙吗?

代码是:

//create copy of original image to correct size
imagecopyresized($dst_image, $src_image, 0,0,0,0,$x_width,$x_height,$orig_img_x_width,$orig_img_x_height);
imagejpeg($dst_image, "resized_copy.jpg", 100);

$img = imagecreatetruecolor(1333, 2000);
$white = imagecolorallocate($img, 255, 255, 255);
imagefill ( $img, 0, 0, $white );
imagefilledrectangle($img,0,0,1333,2000, $white);
imagejpeg($img, "rectangle.jpg", 100);

        //merge images
        $dest2 = imagecreatefromjpeg("rectangle.jpg");
        $src2 = imagecreatefromjpeg('resized_copy.jpg');

        imagecopymerge($dest2, $src2, 0, 0, 0, -333.5, $x_width, $x_height, 100);
        imagejpeg($dest2, "final_image.jpg", 100);

我尝试使用imagecopy而不是imagecopymerge,但我得到了相同的结果。我确定有一个简单的解释,但我似乎无法通过php手册进行搜索。

1 个答案:

答案 0 :(得分:0)

我已经读了几次你的问题,但我不相信我完全理解你想要达到的目标,所以我在制作下面的代码时做了一些假设。

为了简单起见,我创造了一个' square.jpg'像这样测试图像文件:

square test image

(请注意,我在这里使用了较小的图片尺寸,因此我可以将它们显示为内嵌。)

// read in the square test image.
$square    = imagecreatefromjpeg('square.jpg');
$square_x  = imagesx($square); // 100px
$square_y  = imagesy($square); // 100px
// create the rectangular image to merge with.
$rectangle = imagecreatetruecolor(100, 200);
$rectangle_x = imagesx($rectangle); // 100px
$rectangle_y = imagesy($rectangle); // 200px
// note that this isn't white, but rather a lovely shade of blue to better
// show the image on the white SO background!
$white = imagecolorallocate($rectangle, 128, 128, 255);
imagefill($rectangle, 0, 0, $white);
// merge the images.
imagecopymerge(
    $rectangle,
    $square,
    0,
    ($rectangle_y / 2) - ($square_y / 2), // to vertically centre the square.
    0,
    0,
    $square_x,
    $square_y,
    75 // Just to show the merge clearly; change back to 100 for your usage.
);

imagejpeg($rectangle, 'final_image.jpg', 100);

imagedestroy($rectangle);
imagedestroy($square);

这为我提供了final_image.jpg中的以下图片:

enter image description here