GD图像叠加透明png
Posted
技术标签:
【中文标题】GD图像叠加透明png【英文标题】:GD Image overlay transparent png 【发布时间】:2013-10-21 11:28:57 【问题描述】:我有透明图像,我想覆盖整个图像以使其具有边界效果。在此代码中,它裁剪现有图像。它合并了两者,但顶部的最终结果没有显示 alpha。我该如何解决这个问题?
<?
$dst_x = 0; // X-coordinate of destination point.
$dst_y = 0; // Y --coordinate of destination point.
$src_x = 163; // Crop Start X position in original image
$src_y = 0; // Crop Srart Y position in original image
$dst_w = 469; // Thumb width
$dst_h = 296; // Thumb height
$src_w = 469; // $src_x + $dst_w Crop end X position in original image
$src_h = 296; // $src_y + $dst_h Crop end Y position in original image
// Creating an image with true colors having thumb dimensions.( to merge with the original image )
$dst_image = imagecreatetruecolor($dst_w,$dst_h);
// Get original image
$src_image = imagecreatefromjpeg("http://www.ucatholic.com/wp-content/uploads/2012/10/Sallixtus-631x295.jpg");
// Cropping
imagecopyresampled($dst_image, $src_image, $dst_x, $dst_y, $src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h);
// Saving
imagejpeg($dst_image, "images/crop.jpg");
$src = imagecreatefrompng('http://www.EdVizenor.com/images/saintCover.png');
/// THIS LINE NOT WORKING - - // Copy and merge
imagecopymerge($dst_image, $src, 0, 0, 0, 0, 469, 296, 100);
header('Content-Type: image/png');
imagegif($dst_image);
?>
【问题讨论】:
【参考方案1】:不要使用imagecopymerge,使用imagecopy,它会正常工作,你的水印会以alpha显示。
imagecopy($dst_image, $src, 0, 0, 0, 0, 469, 296);
【讨论】:
如何修复图像重新采样(imagecopyresampled),以匹配具有定义高度n宽度的特定块?【参考方案2】:如果使用 imagecopy 而不是 imagecopymerge,您将失去对 Alpha 通道的控制。
如果您想使用 Gd 扩展进行真正的快速叠加操作,我认为您可以使用 Jaguar。
如果你想看看我的回答Here
如果你想要一个拉丝边框,你可以像这样使用Jaguar:
use Jaguar\Canvas,
Jaguar\Drawable\Border;
$canvas = new Canvas('your image');
$brush = new Canvas('style image');
$border = new Border(20);
$border->draw($canvas,$brush);
$canvas->save('path to save')->show();
【讨论】:
以上是关于GD图像叠加透明png的主要内容,如果未能解决你的问题,请参考以下文章
在 ASP.NET 环境中将 4 个透明 PNG 图像相互叠加