php 合并多张图片大小,合并php中的两个图像(不同大小)

我发现这个脚本合并两个图像(保持透明度)在PHP中:

function imagecopymerge_alpha($dst_im, $src_im, $dst_x, $dst_y, $src_x, $src_y, $src_w, $src_h, $pct, $trans = NULL)

{

$dst_w = imagesx($dst_im);

$dst_h = imagesy($dst_im);

// bounds checking

$src_x = max($src_x, 0);

$src_y = max($src_y, 0);

$dst_x = max($dst_x, 0);

$dst_y = max($dst_y, 0);

if ($dst_x + $src_w > $dst_w)

$src_w = $dst_w - $dst_x;

if ($dst_y + $src_h > $dst_h)

$src_h = $dst_h - $dst_y;

for($x_offset = 0; $x_offset < $src_w; $x_offset++)

for($y_offset = 0; $y_offset < $src_h; $y_offset++)

{

// get source & dest color

$srccolor = imagecolorsforindex($src_im, imagecolorat($src_im, $src_x + $x_offset, $src_y + $y_offset));

$dstcolor = imagecolorsforindex($dst_im, imagecolorat($dst_im, $dst_x + $x_offset, $dst_y + $y_offset));

// apply transparency

if (is_null($trans) || ($srccolor !== $trans))

{

$src_a = $srccolor['alpha'] * $pct / 100;

// blend

$src_a = 127 - $src_a;

$dst_a = 127 - $dstcolor['alpha'];

$dst_r = ($srccolor['red'] * $src_a + $dstcolor['red'] * $dst_a * (127 - $src_a) / 127) / 127;

$dst_g = ($srccolor['green'] * $src_a + $dstcolor['green'] * $dst_a * (127 - $src_a) / 127) / 127;

$dst_b = ($srccolor['blue'] * $src_a + $dstcolor['blue'] * $dst_a * (127 - $src_a) / 127) / 127;

$dst_a = 127 - ($src_a + $dst_a * (127 - $src_a) / 127);

$color = imagecolorallocatealpha($dst_im, $dst_r, $dst_g, $dst_b, $dst_a);

// paint

if (!imagesetpixel($dst_im, $dst_x + $x_offset, $dst_y + $y_offset, $color))

return false;

imagecolordeallocate($dst_im, $color);

}

}

return true;

}它工作正常,但不是当我做一些调整大小:

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

// Get image for the watermark

$smallImageFilename = 'http://ing0.net/watermark.png';

list($oldwidthSmall, $oldheightSmall) = getimagesize($smallImageFilename);

$newwidthSmall = $newheightSmall = 50;

$thumb = imagecreatetruecolor($newwidthSmall, $newheightSmall);

$source = imagecreatefrompng($smallImageFilename);

imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidthSmall, $newheightSmall, $oldwidthSmall, $oldheightSmall);

// Create watermark img

$watermark = imagecreatetruecolor(50, 50);

$outImage = imagecreatefrompng('http://ing0.net/image.png');

$marge_right = 10;

$marge_bottom = 10;

$sx = imagesx($watermark);

$sy = imagesy($watermark);

imagecopymerge_alpha($outImage, $thumb, imagesx($outImage) - $sx - $marge_right, imagesy($outImage) - $sy - $marge_bottom, 0, 0, imagesx($thumb), imagesy($thumb), 100);

imagepng($outImage);

imagedestroy($outImage);当我这样做时,透明度不会发生,任何人都可以看到我要去哪里?

编辑:

在上面的代码中,它需要这些图像:

4cm5O.png

8B2BC.png

这会产生这样的结果:

nJRGH.png

但期望的效果是:

MgCYd.png

谢谢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值