PHP & GD - 透明背景填充附近的颜色

2023-11-21

我知道 PHP+GD 透明度问题在这个网站和许多其他网站上已经被彻底解决,但我已经遵循了所有建议,但似乎无法解决我的问题。

一、说明:

我正在尝试将一张图像叠加在另一张图像之上。它们都有透明的区域。作为一个我知道应该以特定方式呈现的演示,我尝试在我创建的蓝色箭头形状的顶部覆盖一个复选标记。

这是两张图片:

check mark

blue arrow

现在我的代码:

我正在使用我构建的一个库/API,以减轻使用 PHP+GD 编辑图像的痛苦。它仍处于起步阶段,但相关文件是:

基类
主装载机
(名字不好听的)组合类

我正在使用以下脚本运行代码:

<?php
    require_once('Image.php');

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

    $img = new Image();
    $over = new Image();

    $img->source = "arrow.png";
    $over->source = "chk-done_24.png";

    $img->Combine->Overlay($over, 20, 20, 0, 0, $over->width, $over->height);
    $img->output();
    $img->clean();
    unset($img);
?>

我期望输出是这样的:

Combined images

但我得到的是这个:

Square bottom

我完全理解这个问题如果填充区域是白色或黑色,但填充蓝色对我来说没有任何意义。

在我上面链接的组合类中,我也尝试过图像复制, 图像复制重采样和香草图像复制合并,两者都有相似的结果。

我完全不知所措。

Edit:

需要明确的是,我的问题是:我的代码的哪一部分不正确?为什么它用颜色(而不是黑色或白色)填充透明区域?如何修复它,同时仍然保持将图像与透明度合并的能力?

Update:

请注意,当创建新的 Image 对象时,它会调用newImage其中包含以下代码:

$this->handle = imagecreatetruecolor($this->width, $this->height);
imagealphablending($this->handle, false);
imagesavealpha($this->handle, true);

我觉得这可能很容易被错过。


请注意,您在中创建句柄并不重要newImage并打电话imagealphablending and imagesavealpha就其而言,因为loadImage把那个把手扔掉。

它用蓝色“填充”透明区域的原因是它根本没有用任何东西填充透明区域。它只是完全丢弃 Alpha 通道,而蓝色正是存储在 Alpha 为零的像素中的颜色。请注意,这在图形程序中可能很难看到,因为该程序本身可能会用黑色或白色替换完全透明的像素。

至于您的代码有什么问题,我不能肯定地说,因为当我尝试现有代码时,我没有得到与您报告的相同的结果。但如果我改变你的loadImage像这样的东西,所以源图像被迫为真彩色,它对我有用:

            private function loadImage()
            {
                    $img = null;
                    switch( $this->type )
                    {
                            case 1:
                                            $img = imagecreatefromgif($this->source);
                                            break;
                            case 2:
                                            $img = imagecreatefromjpeg($this->source);
                                            break;
                            case 3:
                                            $img = imagecreatefrompng($this->source);
                                            break;
                            default:
                                            break;
                    }
                    if (!$img) return false;
                    $this->handle = imagecreatetruecolor($this->width, $this->height);
                    imagealphablending($this->handle, false);
                    imagesavealpha($this->handle, true);
                    imagecopyresampled($this->handle, $img, 0, 0, 0, 0, $this->width, $this->height, $this->width, $this->height);
                    return true;
            }

(就我个人而言,我更喜欢 ImageMagick 而不是 GD)。

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

PHP & GD - 透明背景填充附近的颜色 的相关文章

  • php 中的浏览器名称?

    我们如何使用php脚本获取浏览器名称和版本信息 正如 Palantir 所说 另外看看 get browser 函数 您还可以在其中检查浏览器中启用的功能
  • 从 php 中的 PKCS7 签名中提取证书

    我需要从 pkcs7 签名文件中提取用户证书 我可以使用以下命令通过命令行来完成此操作 openssl pkcs7 in somesign pks7 inform PEM print certs 这将为我提供整个证书链 我可以处理生成的文件
  • 是否可以修改 $_SESSION 变量?

    恶意用户是否可以将 SESSION 在 php 中 变量设置为他想要的任何值 很大程度上取决于您的代码 有一点非常明显 SESSION username REQUEST username
  • PHP、htaccess:在 URL 中应用页面标题

    我想在 URL 中应用页面 HTML 标题 例如 在这里 stackoverflow url 是这样的 http stackoverflow com questions 10000000 get the title of a page ur
  • 尝试使用 swift mailer、gmail smtp、php 发送邮件

    这是我的代码
  • 使用ip地址访问时删除index.php

    我在服务器上上传了 codeigniter 项目 从 URL 中删除 index php 不起作用 我使用IP地址访问它 喜欢http ip http ip地址 下面是我的htaccess
  • 构建错误:致命错误:pcre.h:没有这样的文件或目录

    我刚刚安装完 Ubuntu 13 10 我想尝试 Phalcon 当我构建源代码 phalcon so 时 出现以下错误 from home fabrice Downloads cphalcon build 32bits phalcon c
  • Symfony2 功能测试会话持久性

    我正在尝试在 Symfony 中进行一些功能测试 但目前我的会话遇到了问题 我执行了一段代码 它似乎有效 但容器的会话中没有存储任何内容 我有一个表格 您可以在其中设置数据 当您提交它时 它会检查值并将其存储在会话中 然后它重定向到另一个页
  • JSON 为 foreach() 提供的参数无效

    我在从 JSON 检索数据时遇到一些问题 它总是说为 foreach 提供的参数无效 这是 url php 中的 JSON nama IT SERVICE SOLUTION nilai 0 periode 11 tahun 2014 nam
  • 如何以最少的查询次数获取帖子列表和关联标签

    我的表格结构如下 标签 更多的是一个类别 id 标签名称 描述 slug POSTS ID 标题 网址 邮戳 id idPost idTag USERS ID 用户名 userSlug VOTES id idPost idUser 每个帖子
  • 在 Codeigniter 中编写模型代码的最佳方法是什么

    我对于在 codeigniter 中使用哪种技术来编码模型感到非常困惑 我进行了很多搜索 发现了各种编码人员使用的各种方法 请指导我使用 codeigniter 编写模型类的最佳方法 例子很少 有些方法签名中需要很长的参数 function
  • Blade @if 中的 Laravel 会话变量

    当我尝试使用 Laravel Session 在刀片中设置 JS 变量来刷新一些数据时 我在 Laravel 4 2 中遇到了一些奇怪的情况 这很简单 我不知道我错过了什么 目标 在用户注册后立即触发 Javascript 网站浏览 方法
  • 为什么我的函数将布尔值更改为“on”?

    所以我是 php 编程世界的新手 我正在在线学习和其他形式等 但我找不到任何东西来帮助回答我的问题 这就是我在这里的原因 任何帮助当然不胜感激 谢谢 我想将下面的代码变成我可以调用的函数 它的工作原理如下所示 如果我选中表单中的复选框 它会
  • Java - 调整图像大小而不损失质量

    我有 10 000 张照片需要调整大小 因此我有一个 Java 程序来执行此操作 不幸的是 图像的质量损失很大 而且我无法访问未压缩的图像 import java awt Graphics import java awt AlphaComp
  • 为什么index.html优先于index.php?

    我在服务器上有一个网站 主页是 example com index php 好的 我将一个名为 index html 的文件上传到服务器 根目录 当我在浏览器的 URL 栏中输入站点的域时 我感到惊讶 因为 index html 页面已加载
  • 比较表中的行以了解字段之间的差异

    我有一个包含 20 多列的表 客户端 其中大部分是历史数据 就像是 id clientID field1 field2 etc updateDate 如果我的数据如下所示 10 12 A A 2009 03 01 11 12 A B 200
  • 如何使用CSS将背景图像放入选择选项标签中

    我有一个从 json 响应接收的国家 地区下拉列表 并且想要在国家 地区名称旁边添加相应的国家 地区国旗图标 也从 json 响应获取图像 我已经尝试了不同的 jQuery 和 bootstrap 插件 但他们所做的是破坏我以前的选择框样式
  • 按通用值对值进行分组:userid 和 ipaddress

    我正在解决数据库中的一个问题 我正在尝试查找使用多个帐户的用户 我有一个用户 ID 和使用的 IP 地址的列表 如下所示 用户 ID IP 地址 1 IP 地址 13 2 IP 地址 23 1 IP 地址 12 4 IP地址56 9 IP
  • 如何复制 ArrayIterator 以保留其当前迭代位置?

    因为这似乎是我必须做的才能达到这种效果 arr a gt first b gt second iter new ArrayIterator arr Do a bunch of iterations iter gt next new iter
  • WooCommerce 使用 AJAX 设置购物车数量?

    我已经为此绞尽脑汁好几天了 需要一些指导 我正在为 WooCommerce 网站完全从头开始制作自定义主题 现在我正在尝试让购物车功能正常工作 我一直试图使用按钮 来更新购物车中产品的数量 对我来说问题似乎是WC 我在functions p

随机推荐