在PHP中使用GD,如何在PNG和GIF文件上制作透明的PNG水印? (JPG 文件工作正常)

2023-11-25

我有一个图像(我们称之为原始图像)我想在另一个图像上加水印(我们称之为logo).
The logo是透明的 PNG,而原始图像可以是 png、jpg 或 gif。
我有以下代码:

function watermarkImage($originalFileContents, $originalWidth, $originalHeight) {
    $logoImage = imagecreatefrompng('logo.png');
    imagealphablending($logoImage, true);

    $logoWidth  = imagesx($logoImage);  
    $logoHeight = imagesy($logoImage);

    $originalImage = imagecreatefromstring($originalFileContents);

    $destX = $originalWidth  - $logoWidth;
    $destY = $originalHeight - $logoHeight;

    imagecopy(
        // source
        $originalImage,
        // destination
        $logoImage,
        // destination x and y
        $destX, $destY,
        // source x and y
        0, 0,
        // width and height of the area of the source to copy
        $logoWidth, $logoHeight
    );
    imagepng($originalImage);
}

这段代码效果很好(好=保持透明度logo)仅当原始图像是一个 JPG 文件。
当。。。的时候原始文件是 GIF 或 PNG,徽标具有纯白色背景,这意味着透明度不起作用。

为什么 ?我需要改变什么才能让它发挥作用?
Thanks

UPDATE:
这是我重新编码的版本:

function generate_watermarked_image($originalFileContents, $originalWidth, $originalHeight, $paddingFromBottomRight = 0) {
    $watermarkFileLocation = 'watermark.png';
    $watermarkImage = imagecreatefrompng($watermarkFileLocation);
    $watermarkWidth = imagesx($watermarkImage);  
    $watermarkHeight = imagesy($watermarkImage);

    $originalImage = imagecreatefromstring($originalFileContents);

    $destX = $originalWidth - $watermarkWidth - $paddingFromBottomRight;  
    $destY = $originalHeight - $watermarkHeight - $paddingFromBottomRight;

    // creating a cut resource
    $cut = imagecreatetruecolor($watermarkWidth, $watermarkHeight);

    // copying that section of the background to the cut
    imagecopy($cut, $originalImage, 0, 0, $destX, $destY, $watermarkWidth, $watermarkHeight);

    // placing the watermark now
    imagecopy($cut, $watermarkImage, 0, 0, 0, 0, $watermarkWidth, $watermarkHeight);

    // merging both of the images
    imagecopymerge($originalImage, $cut, $destX, $destY, 0, 0, $watermarkWidth, $watermarkHeight, 100);
}

imagecopy 不支持使用两个带有 Alpha 通道的图像。 看看 imagecopymerge。

http://php.net/manual/en/function.imagecopymerge.php

用户评论部分中有很多示例,以及您想要的完成的实现:

http://www.php.net/manual/en/function.imagecopymerge.php#92787

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在PHP中使用GD,如何在PNG和GIF文件上制作透明的PNG水印? (JPG 文件工作正常) 的相关文章

  • Mysql 将 --secure-file-priv 选项设置为 NULL

    我在 Ubuntu 中运行 MySQL 我在运行特定的查询集时收到此错误 MySQL 服务器正在使用 secure file priv 选项运行 因此无法执行此语句 当我这样做的时候SELECT secure file priv 在我的 m
  • 将 rel="nofollow" 添加到 WordPress 帖子中的所有链接

    我想将 rel nofollow 添加到我的 WordPress 帖子中的所有链接 并且我希望能够拥有一个不会获得 nofollow 的链接列表 我已经尝试了很多 但我无法正确完成 因为我真的不能很好地理解正则表达式 所以我有字符串 tex
  • AWS S3从本地主机批量上传php错误

    我在尝试着批次 散装从本地主机 xampp 上传到我的S3 bucket 它似乎适用于大约 6 个项目 然后我收到一条错误消息 cURL 错误说Failed sending network data from http curl haxx
  • 电子商务是否从头开始

    我需要开发一个包含电子商务部分的新网站 我来这里是想从你那里得到一些关于我应该走哪条路的提示 该网站将有一个静态部分 其中包括一些静态页面和用于销售产品的电子商务部分 我是 Django 和 PHP 开发人员 但这是我第一次需要开发电子商务
  • PHP 下载脚本输出损坏的文件

    我正在用 PHP 为我的 CMS 构建一个文件下载类 当时我注意到它以不同的编码格式输出文件 我尝试使用 readfile file get contents fread 但似乎都在做同样的事情 这就像与输出缓冲有关的东西 我使用脚本下载的
  • Magento:如何在 CMS 页面中包含 php 调用

    按照此页面的说明进行操作 http www magento cc how to use php on a cms page html http www magento cc how to use php on a cms page html
  • 是否可以在 UML 中可视化一堆函数

    我正在改进一个使用类和函数文件 只是包含各种函数的 php 文件 的内容管理系统 例如 我有一堂课叫Admin以及一个功能文件 其功能包括显示管理员概述 创建新管理员 编辑现有管理员 删除管理员 函数文件使用类并执行 mvc 概念的可视化部
  • PHP 读取使用 setcookie() 创建的 cookie

    来自manual https www php net setcookie 直到下一次加载 Cookie 应该可见的页面之前 Cookie 才会变得可见 这意味着创建的 cookiesetcookie将无法访问 COOKIE直到下一页加载 有
  • CakePHP Auth 组件使用 $this->Auth->login() 时未登录;

    我是 cakePHP 的新手 我已经阅读了他们的文档 并且正在遵循他们的简单身份验证示例 我还广泛搜索 包括本网站上的答案 来寻找我的问题的答案 我正在使用 cakePHP 2 0 我的 UsersController 的登录功能如下所示
  • 在 CodeIgniter 中添加新页面

    对于我对 CodeIgniter 和 MVC 系统的无知 我提前表示歉意 我正在帮助一位家庭成员处理他们的商业网站 到目前为止 我已经能够仅通过逻辑来完成大部分所需的更改 但现在我已经走进了死胡同 我不打算继续支持他们 因为我显然不是 Co
  • DataTables 第 2 页的分页未调用放大弹出窗口

    所以我有这个启用分页的数据表 我编码了一种方式 以便用户可以编辑表的行 当用户调用它在放大弹出窗口中打开的编辑页面时 它在第 1 页 从第 2 页起都运行良好 DataTable 及其前面停止调用 Magnific Popup 我只是不明白
  • PHP Github Pull 脚本错误“权限被拒绝(公钥)”

    我已经设置了一个 PHP 脚本来执行 GitHub 拉取 这包含在我的 Github 文件夹中 home mysite public html github github pull php 我的服务器已经有 SSH 公钥 就像我执行git
  • Memcache 不会刷新或清除内存

    我一直在尝试清除我的内存缓存 因为我注意到使用时存储占用了近 30 的服务器内存ps aux 所以我运行了以下 php 代码 memcache new Memcache memcache gt connect localhost 11211
  • 计算 PHP 字符串中特定字符的所有出现次数的最有效方法是什么?

    计算 PHP 字符串中特定字符的所有出现次数的最有效方法是什么 用这个 echo substr count abca a will echo 2
  • php隐藏所有错误[重复]

    这个问题在这里已经有答案了 隐藏的最佳做法是什么allPHP 错误 因为我不想向用户显示错误 我尝试过使用 htacess通过输入代码php flag display errors off在那里 但它返回给我一个500 error 还有其他
  • 在 PHP 中将整数转换为十六进制值

    如何将PHP中第一类中的数字转换为第二类中的数字 是否有内置函数来转换数字 也是我的标题 将整数转换为十六进制值 甚至正确 class Permission const READ 1 const UPDATE 2 const DELETE
  • 为什么 asort 适用于多维数组?

    抱歉 如果这是一个非常基本的问题 我无意中发现asort http php net manual en function asort php似乎适用于多维数组 示例 PHP animals array 1 gt array name gt
  • Laravel,控制器中的 Auth::user()

    Laravel 框架 为什么我无法在 laravel 项目的控制器中使用 Auth user 查看用户是否已登录 Session 是否未连接到控制器 HomeController php public function isauthoriz
  • 使用 Imagick 动态图像创建/Apache 标头

    在将现有的稳定网站转移到新服务器时 我遇到了一些使用 Imagick 动态创建图像的代码的间歇性问题 该代码解析 GET 查询 例如 example com image php ipid 750123 r 0 w 750 h 1000 然后
  • PHP Json_encode 将空格更改为加号 +

    我有一个网络应用程序 我首先将 JSON 数据存储在 cookie 中 然后每 x 秒保存到数据库 它只是打开与服务器的连接 服务器读取 cookie 它实际上并不通过 POST 或 GET 发送任何内容 当我保存到 cookie 时 我的

随机推荐

  • 什么是协程?

    什么是协程 它们与并发有何关系 协程和并发在很大程度上是正交的 协程是一种通用控制结构 流量控制在两个不同的例程之间协作传递而不返回 Python 中的 yield 语句就是一个很好的例子 它创建一个协程 当遇到 yield 时 函数的当前
  • 我如何知道我的 ansible 使用的是哪个版本的 Jinja2?

    我尝试使用pip list and pip freeze没有成功 这可能是显而易见的事情 但到目前为止我还无法找到它 将此文件拖放到 action plugins jin ver py from ansible plugins action
  • python 在哪里查找 Windows 上由 ctypes.cdll. 打开的 dll?

    恐怕我在互联网上找不到这个问题的简单答案 所以也许将来会因为这个问题而找到一个简单的答案 我正在使用 pywiiuse 它是 Windows 上 C wiiuse 库的 python 包装器 我已经获得了几个简单的 C 示例 只需将 dll
  • 是否可以使字母间距相对于字体大小并正确继承?

    我的问题与此基本相同 但将 line height 替换为 letter spacing 当继承相对行高时 它与元素的字体大小无关 为什么 我如何使其相对 我的用例是这样的 body font size 18px letter spacin
  • SQLite 与 EF Code First

    在我成功地将 SQLite 与 NHibernate 结合使用之后 我很高兴使用它来通过 Entity Framework Code First 进行测试 如果您有一些示例连接字符串并设置演示 那就太好了 可以为我忙碌的一天节省一些时间 多
  • 检索 R 中特定单元格的行名和列名

    因此 如果我有一个如下所示的数据框 A B C rowname1 4 5 4 3 2 rowname2 3 23 9 如何让 R 给出包含特定数字的行 列的名称 即如果我给出值 3 它会返回 rowname2 A 假设没有重复项 您可以使用
  • C# 委托未绑定到实例?

    有没有一种方法可以存储委托而不将其绑定到对象 就像使用 MethodInfo 一样 现在我正在存储一个 MethodInfo 这样我就可以给它一个对象来调用该方法 但我更愿意让它成为一名代表 就像有一个属性告诉 net 第一个参数是 thi
  • 使用 VBA 连接到 MS Access 中的 Web 服务

    是否可以通过 VBA 连接到 Web 服务 例如发送 HTTP 请求 in微软访问 例如 用户单击表单上的按钮 然后将 HTTP 请求发送到 Web 服务 该服务以OK 以前有人这样做过吗 注意 VBA 而不是 VB NET 这是我在 Ac
  • 将多维 PHP 数组转换为 javascript 数组

    我正在尝试使用 JSON 编码器将 PHP 多维数组转换为 javascript 数组 当我执行 var dump 时 我的 php 数组如下所示 array size 2 Key gt string a length 1 Value gt
  • Spring Boot:如何使用 WebClient 而不是 RestTemplate 来执行非阻塞和异步调用

    我有一个使用 Springboot Resttemplate 的 springboot 项目 我们已经从 1 5 3 迁移到 springboot 2 0 1 我们正在尝试使 其余部分通过使用 WebClient 异步调用 我们曾经使用 R
  • 如何在 Clang 中以字符串形式获取函数定义/签名?

    假设我有 CXCursor 左右 如何使用 Clang Libclang 将函数的签名 或至少整个定义 作为字符串获取 我认为可以通过使用光标的范围以某种方式获得该定义 但我真的不知道如何 使用什么函数 您可以使用这个简单的代码来获取函数的
  • C# 线程间通信

    我正在使用 NET 3 5 并试图解决一个问题 不是一个超级线程专家 请忍受我 我有一个 Windows 服务 它有一个始终运行的非常密集的进程 我已将此进程放到一个单独的线程上 以便我的服务的主线程可以处理操作任务 即服务审核周期 处理配
  • Apache Derby - 检查数据库是否已创建?

    将 Apache Derby 与 Java J2ME 但我不认为这有什么区别 一起使用 是否有任何方法可以检查数据库是否已存在并包含表 据我所知 除了很少的解决办法之外 没有任何解决办法 不像 MySQL 我们有 IF EXIST 的设施
  • PHP cURL 错误:“服务器回复为空”

    我有一个类函数与 RESTful API 接口Last FM 其目的是为我的用户获取最新的曲目 这里是 private static base url http ws audioscrobbler com 2 0 public static
  • 窗口上的 WPF 布局

    我在 WPF Windows 上有几个列表框 其中Height Auto Width Auto 在表格上设置 表单大小在不同的分辨率下完美 但问题是 当我按下最大化按钮时 在表单调整大小时会看到一个粗的 黑色 L 我在很多 WPF 应用程序
  • EF Core 数据库中已有一个名为“AspNetRoles”的对象

    我正在接收已经有一个名为AspNetRoles在数据库中 尝试使用时出错update databaseNuGet 控制台中的命令 Context public class ApplicationDbContext IdentityDbCon
  • JWT 正在发行相同的令牌

    我正在制作一个rest APIJersey 我在用java jwt https github com auth0 java jwt 用于我的代币生成工作 请检查下面的代码 用户JSON信息 REST方法类 Path user info pu
  • 模型-视图-视图模型 (MVVM) 模式的优点是否值得付出这些开销?

    主题中提出了一个问题 模型 视图 视图模型 MVVM 模式的优点是否值得付出这些开销 在许多情况下 实现视图模型涉及复制模型属性的相当大的开销 有时还涉及模型和视图模型数据成员之间的同步 例如 目前在 Silverlight 4 和 WCF
  • 每次安装时都显示“Apple 无法检查其是否存在恶意软件”

    当我安装使用后运行软件时 我总是收到错误消息 Apple 无法检查其是否存在恶意软件 brew install or brew cask install 所以我的问题是 有没有办法让我的 Mac 信任 Homebrew 的安装 我知道我可以
  • 在PHP中使用GD,如何在PNG和GIF文件上制作透明的PNG水印? (JPG 文件工作正常)

    我有一个图像 我们称之为原始图像 我想在另一个图像上加水印 我们称之为logo The logo是透明的 PNG 而原始图像可以是 png jpg 或 gif 我有以下代码 function watermarkImage originalF