PHP-GD 水印 PNG 的透明度未与 JPEG 正确合并

标签 php image php-gd

我试图在图像中间安装水印,但每次它都会显示一个不完全透明的奇怪正方形。这是我的代码的结果:

enter image description here

这是我的代码:

<?php
header("Content-type: image/png");

$image = imagecreatefromjpeg('http://www.sideshowtoy.com/wp-content/uploads/2016/03/dc-comics-batman-v-superman-woner-woman-sixth-scale-hot-toys-feature-902687.jpg');
$watermark = imagecreatefrompng('https://d5odq6jbm6umf.cloudfront.net/assets/img/video-play-button-transparent.png');
imagesavealpha($watermark,true);

$watermark_width = imagesx($watermark);
$watermark_height = imagesy($watermark);
$dest_x = (imagesx($image) - $watermark_width)/2;
$dest_y = (imagesy($image) - $watermark_height)/2;
imagecopymerge($image, $watermark, $dest_x, $dest_y, 0, 0, $watermark_width, $watermark_height, 100);
imagejpeg($image);
imagedestroy($image);
imagedestroy($watermark);
?>

最佳答案

我通常创建一个新的真彩色资源并将所有内容复制到其中。这确保了 GD 不会变得太古怪。它会消耗更多的资源,但在大多数情况下可以忽略不计。

下面是修改后的代码,用于创建新图像,复制 jpeg,然后覆盖部分透明的水印:

<?php
$image = imagecreatefromjpeg('http://www.sideshowtoy.com/wp-content/uploads/2016/03/dc-comics-batman-v-superman-woner-woman-sixth-scale-hot-toys-feature-902687.jpg');
$img_w = imagesx($image);
$img_h = imagesy($image);
$new = imagecreatetruecolor($img_w, $img_h);
imagecopy($new, $image, 0, 0, 0, 0, $img_w, $img_h);
imagedestroy($image);

$watermark = imagecreatefrompng('https://d5odq6jbm6umf.cloudfront.net/assets/img/video-play-button-transparent.png');
$watermark_width = imagesx($watermark);
$watermark_height = imagesy($watermark);
$dest_x = ($img_w - $watermark_width) / 2;
$dest_y = ($img_h - $watermark_height) / 2;
imagecopy($new, $watermark, $dest_x, $dest_y, 0, 0, $watermark_width, $watermark_height);

header('Content-type: image/png');
imagejpeg($new);
imagedestroy($new);
imagedestroy($watermark);

结果:

Wonder Woman! Na na na na na!

关于PHP-GD 水印 PNG 的透明度未与 JPEG 正确合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38572092/

相关文章:

php - mysql select where left join语法

python - 在 OpenCV 中读取 .exr 文件

php - imagecolortransparent() 在 PHP 中将所有黑色像素变为透明

php - Laravel API 如何获取图片的完整路径?

php - 将模板渲染结果传递给另一个方法

android - .gif 图像作为源在 Windows kivy 程序中运行良好。通过 kivy Launcher 运行显示 gif 图像的背景

android - 在 Android 的 SD 卡上保存/重命名拍摄的照片

php - 为什么修复 GD 的 png 透明度问题的解决方案不起作用?

PHP 在网站内按图像搜索

php - php 和 mysql 上的阿拉伯字符 "???????"