0

我写了一个合并两个图像的代码。

我的代码是:

$rnd = rand("99000", "99999");

$dst_path = "/home/maxioutl/public_html/images/urunler/";
$dst_file_name = "tresim-{$rnd}.jpg";
$dst_file = $dst_path.$dst_file_name;

$dst = imagecreatetruecolor(250, 375);
imagefill($dst, 0, 0, imagecolorallocate($dst, 255, 255, 255));

$src = imagecreatefromjpeg("http://www.goldstore.com.tr/upload/product/raw/3.72925.0332.JPG");

imagecopymerge($dst, $src, 40, 60, 0, 0, 250, 375, 100);

imagejpeg($dst, $dst_file, 90);

结果:

黑色背景 黑色背景。它在哪里?

4

3 回答 3

1

imagecopymerge($dst, $src, 40, 60, 0, 0, 250, 375, 100);声明是这样做的。

您传递给它的 dimensions250x375不是手表的实际尺寸。因此合并边界框继续并使用黑色。如果您将其注释掉,您可以很容易地看到这一点,因为您会像预期的那样从填充中得到白色方块。

您需要获取手表图形的确切尺寸(即 through getimagesize)并将其传递给 imagecopymerge 以便在合并时准确切割它。

$arrSize = getimagesize($originalFile);
imagecopymerge($dst, $src, 40, 60, 0, 0, $arrSize[0], $arrSize[1], 100);
于 2012-12-21T23:05:06.103 回答
0

您编写的代码会叠加图像。它不会删除手表图像中的白色像素。

它们基本上是重叠的。

您应该循环浏览两个图像尺寸并将每个 *white 像素替换为黑色像素或透明像素。

*白色像素不一定意味着 rgb(255,255,255) 您可以选择将所有 rgb(>235,>235,>235) 的像素视为“白色”。

于 2012-06-06T12:55:23.577 回答
0

函数imagecreatetruecolor创建完全黑色的图像取自这里

imagecreatetruecolor() 返回表示指定大小的黑色图像的图像标识符。

于 2012-06-06T12:56:12.593 回答