图像的透明度和Alpha合并用PHP图像时(Image transparency and alpha

2019-07-01 16:36发布

所以我发现PHP文件的一些代码,和编辑稍微合并两个图像我有。 然后,将图像保存在服务器上的文件夹中。 然而,有一个小问题,我无法弄清楚,为什么它正在发生。

首先我的代码:

 $glassurl = $_GET['GlassImg'];
    $frameurl = $_GET['FrameImg'];
    $filename = (int)date("H:i:s");

    $src = imagecreatefromgif($frameurl);
    $dest = imagecreatefromjpeg($glassurl);

    imagecolortransparent($src, imagecolorat($src, 0, 0));

    imagealphablending($dest, false);
    imagesavealpha($dest, true);
    imagealphablending($src, false);
    imagesavealpha($src, true);

    $src_x = imagesx($src);
    $src_y = imagesy($src);
    imagecopymerge($dest, $src, 0, 0, 0, 0, $src_x, $src_y, 100);

    // Output and free from memory
    imagepng($dest, 'uploads/imagetest.png');
    imagegif($dest);

    imagedestroy($dest);
    imagedestroy($src

);

其次一些关于图像的信息:

  1. 两个图像尺寸完全相同
  2. 的“模式”的图像仅仅是一个块的颜色/图案
  3. 的帧图像具有帧内透明份(以允许图案显现出来)
  4. 围绕框架的区域为白色至hise过量图案

我希望的是,当我覆盖在帧到图案,因为它会产生一个窗框,与玻璃图案内这些部分,而白色将隐藏剩余彭定康。

为了说明我所提供的图像。 并会发生什么。

图案:

帧:

结果:

正如你可以看到它不会导致我的预期。 谁能告诉我在哪里,我错了? 我想覆盖所述框架到图案,保持透明中心,并使用过量的白色,以覆盖图案的其余部分。 任何帮助是极大的赞赏。

Answer 1:

请注意,您的框架有白边 ,如果你想要窗台的窗户是你需要裁剪,然后卸下WITE imagecolortransparent下面如果没有您可以使用此添加

$imgl = "thumb/pattern.png";
$img2 = "thumb/frame.png";

$dest = imagecreatefrompng($imgl);
$src = imagecreatefrompng($img2);
imagecolortransparent($src, imagecolorat($src, 0, 0));

$src_x = imagesx($src);
$src_y = imagesy($src);
imagecopymerge($dest, $src, 0, 0, 0, 0, $src_x, $src_y, 100);

// Output and free from memory
header('Content-Type: image/png');
imagegif($dest);

imagedestroy($dest);
imagedestroy($src);

产量


你也可以拥有

$imgl = "thumb/pattern.png";
$img2 = "thumb/frame.png";

$dest = imagecreatefrompng($imgl);
$src = imagecreatefrompng($img2);

$src_x = imagesx($src);
$src_y = imagesy($src);

$srcNew = imagecreatetruecolor($src_x, $src_y);
ImageColorTransparent($srcNew, imageColorAllocate($srcNew, 0, 0, 0));
imagecopy($srcNew, $src, 70, 50, 78, 60, 473, 293);
imagecopymerge($dest, $srcNew, 0, 0, 0, 0, $src_x, $src_y, 100);

header('Content-Type: image/png');
imagegif($dest);

imagedestroy($dest);
imagedestroy($src);

产量



Answer 2:

像你描述,尝试用这个代替,如果我理解你正确地描述你的图片不是透明的。

同时,你应该找到一个程序保存时不改变透明度的白色(或检查,了解关于此次期权),如果你真的让那些摆在首位透明。



文章来源: Image transparency and alpha when merging images with PHP