简体   繁体   English

GD图像叠加透明png

[英]GD Image overlay transparent png

I have transparent image that I want to overlay over the entire image to give it the boarder effect. 我有透明的图像,我想覆盖整个图像,以赋予它更大的效果。 In this code it crops an existing image. 在此代码中,它会裁剪现有图像。 It merges the two but the final over the top is not showing the alpha. 它合并了两个,但最后的顶部没有显示alpha。 How can I fix this? 我怎样才能解决这个问题?

 <?
    $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);
    ?>

不要使用imagecopymerge,使用imagecopy,然后它将正常工作,你的水印将显示alpha。

imagecopy($dst_image, $src, 0, 0, 0, 0, 469, 296);

If used the imagecopy instead of imagecopymerge you will lose control over alpha channel. 如果使用imagecopy而不是imagecopymerge,您将失去对alpha通道的控制。

I think you could use Jaguar , if you want a real fast overlay action using the Gd extension. 如果您想使用Gd扩展程序进行真正的快速叠加操作,我认为您可以使用Jaguar

see my answer Here if you want to see how 看到我的答案在这里 ,如果你想看看

if you want a brushed border you can use Jaguar like this: 如果你想要一个拉丝边框你可以像这样使用捷豹

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();

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM