PHP 水印 - Zubrag

2024-02-05

我正在使用 zubrags PHP 水印脚本(附在下面),它的效果很好,除非我尝试使用 PNG-24 作为我的水印。生成的图像带有乱码、不透明的水印。我想知道是否有人可以帮助解释我需要在下面的脚本中更改哪些内容,以便将 PNG-24 作为正确的水印嵌入到图像上?我确实看到了这篇文章:http://www.benholmen.com/blog/2008/12/adding-png-watermarks-to-jpegs-with-php/ http://www.benholmen.com/blog/2008/12/adding-png-watermarks-to-jpegs-with-php/其中提到使用 PHP 的 imagealphablending() 函数来支持 PNG-24。

预先感谢您的任何帮助。非常感谢:)

祖布拉格的水印:

class Zubrag_watermark {

  var $offset_x = 0;
  var $offset_y = 0;
  var $quality = 100;
  var $image_type = -1; // Image type: 1 = GIF, 2 = JPG, 3 = PNG
  var $force_image_type = -1; // Change image type? (-1 = same as original, 1 = GIF, 2 = JPG, 3 = PNG)
  var $save_to_file = true;

  function Zubrag_watermark($image_path='', $offset_x=0, $offset_y=0) {
    $this->setImagePath($image_path);
    $this->setOffset($offset_x, $offset_y);
  }

  function setImagePath($image_path) {
    $this->image_path = $image_path;
  }

  function setOffset($x, $y) {
    $this->offset_x = $x;
    $this->offset_y = $y;
  }

  function ImageCreateFromType($type,$filename) {
   $im = null;
   switch ($type) {
     case 1:
       $im = ImageCreateFromGif($filename);
       break;
     case 2:
       $im = ImageCreateFromJpeg($filename);
       break;
     case 3:
       $im = ImageCreateFromPNG($filename);
       break;
    }
    return $im;
  }

  function ApplyWatermark($watermark_path) {

    $this->watermark_path = $watermark_path;

    // Determine image size and type
    $size = getimagesize($this->image_path);
    $size_x = $size[0];
    $size_y = $size[1];
    $image_type = $size[2]; // 1 = GIF, 2 = JPG, 3 = PNG

    // load source image
    $image = $this->ImageCreateFromType($image_type, $this->image_path);

    // Determine watermark size and type
    $wsize = getimagesize($watermark_path);
    $watermark_x = $wsize[0];
    $watermark_y = $wsize[1];
    $watermark_type = $wsize[2]; // 1 = GIF, 2 = JPG, 3 = PNG



    // load watermark
    $watermark = $this->ImageCreateFromType($watermark_type, $watermark_path);

    // where do we put watermark on the image?
    $dest_x = $size_x - $watermark_x - $this->offset_x;
    $dest_y = $size_y - $watermark_y - $this->offset_y;

    imagealphablending($image, true);
 imagecopymerge($image, $watermark, $dest_x, $dest_y, 0, 0, $watermark_x, $watermark_y, 100);  

    $this->image = &$image;
    $this->watermark = &$watermark;
    $this->image_type = $image_type;

  } // ApplyWatermark

  function OutputImageInternal($filename='') {

    $im = &$this->image;
    $res = null;

    $image_type = ($this->force_image_type != -1 ? $this->force_image_type : $this->image_type);

    // ImageGIF is not included into some GD2 releases, so it might not work
    // output png if gifs are not supported
    if(($image_type == 1)  && !function_exists('imagegif')) $image_type = 3;

    switch ($image_type) {
      case 1:
        if ($this->save_to_file) {
          $res = ImageGIF($im,$filename);
        }
        else {
          header("Content-type: image/gif");
          $res = ImageGIF($im);
        }
        break;
      case 2:
        if ($this->save_to_file) {
          $res = ImageJPEG($im,$filename,$this->quality);
        }
        else {
          header("Content-type: image/jpeg");
          $res = ImageJPEG($im, NULL, $this->quality);
        }
        break;
      case 3:
        if (PHP_VERSION >= '5.1.2') {
          // Convert to PNG quality.
          // PNG quality: 0 (best quality, bigger file) to 9 (worst quality, smaller file)
          $quality = 9 - min( round($this->quality / 10), 9 );
          if ($this->save_to_file) {
            $res = ImagePNG($im, $filename, $quality);
          }
          else {
            header("Content-type: image/png");
            $res = ImagePNG($im, NULL, $quality);
          }
        }
        else {
          if ($this->save_to_file) {
            $res = ImagePNG($im, $filename);
          }
          else {
            header("Content-type: image/png");
            $res = ImagePNG($im);
          }
        }
        break;
    }

    return $res;

  }

  function Output($type = -1) {
    $this->force_image_type = $type;
    $this->save_to_file = false;
    $this->OutputImageInternal();
  }

  function SaveAsFile($filename, $type = -1) {
    $this->force_image_type = $type;
    $this->save_to_file = true;
    $this->OutputImageInternal($filename);
  }

  function Free() {
    imagedestroy($this->image);
    imagedestroy($this->watermark);
  }

}

更改上面代码中使用的函数 来自: imagecopymerge() 到:图像复制()

似乎成功了!

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

PHP 水印 - Zubrag 的相关文章

  • 通过身份验证保护 CodeIgniter 2 应用程序的正确方法是什么?

    I have Ion Auth http benedmunds com ion auth 正确安装并在我的服务器上运行 我也有默认的代码点火器2 新闻 教程在同一个 CI 安装中工作 我只是在玩 并对使用身份验证系统 封闭 或保护整个应用程
  • if/else 简写来定义变量

    我很难理解 if else 的 php 简写是如何描述的here https stackoverflow com questions 20233207 php if shorthand and echo in one line possib
  • 使用 ImageMagick (PHP) 将 2 个图像并排合并为 1 个图像

    我认为这是一件容易的事 我有 2 张图片 JPG 我希望它们合并成一张图片 其中 2 张图片并排 所以我有图片 A 和图片 B 我想要图片 AB 并排 两个图像具有相同的宽度和高度 在本例中 宽度 200px 高度 300px 但是第二个图
  • Symfony2:为什么请求传递到受 Symfony2 中 AppCache 影响的 Kernel.Terminate EventListener

    在我的 Symfony2 2 应用程序中 我使用 onKernelTerminate EventListener 以便我可以在渲染响应后进行一些 繁重 处理 以便用户收到更快的响应时间 在我的控制器中 我在请求上设置了一个属性 以便当事件侦
  • 如何对 SQL 进行多次查询

    我正在尝试创建一个表 并在 PHP 脚本的帮助下在数据库中插入一些值 虽然只插入 1 行 但效果很好 当我尝试输入更多行数时 出现错误 我需要为每个查询编写完整的插入语句 因为我正在使用在线 Excel 到 SQL 查询转换器
  • 如何隐藏 URL 中的锚标记

    如何隐藏地址栏中以下链接 href 的哈希值 a href index php dev name 所以它会将我重定向到index php dev name 但我希望地址栏只显示index php 您可以使用 Javascript oncli
  • 如何关闭未关闭的 HTML 标签?

    每当我们从数据库或类似来源获取一些经过编辑的用户输入内容时 我们可能会检索仅包含开始标记但不包含结束标记的部分 这可能会妨碍网站当前的布局 有客户端或服务器端的方法来解决这个问题吗 找到了一个很好的答案 使用 PHP 5 并使用 DOMDo
  • 媒体的 Google Cloud Storage 签名网址

    我已经建立了一个视频网站 为用户提供 m3u8 和关联的 ts 文件 我不希望媒体文件免费可用 所以我所做的是 当用户在网站上时 在 mysql 中使用他们的 IP 和令牌创建一个会话 当他们请求特定媒体子域 mp4 domain com
  • PHP 无法加载动态库“php_pdo_oci.dll”

    我在 Windows 8 上运行 Apache 2 4 7 和 PHP 5 5 9 我安装了 PHPUnit 并开始弹出此警告图像 警告 是的 我在 php ini 中启用了扩展加载以及 extension dir 以更正文件夹 并且该文件
  • 使用 PHP Selenium Webdriver 单击下拉菜单中的选项?

    我正在使用 PHP Selenium Webdriver 包装器Facebook https github com facebook php webdriver 任何人都可以给我一个如何单击或从选择下拉菜单中选择选项的示例吗 我已经尝试过这
  • 如何防止在 PHP 中使用超出“使用”范围的特征方法

    我想知道是否有任何方法可以防止在 PHP 的任何类上下文之外使用特征方法 让我用一个简短的例子来解释我想要什么 这是我当前的代码 File MyFunctions php trait MyFunctions function hello w
  • 如何在HTML中的PHP中注释掉HTML和PHP?

    这是我想注释掉的一行代码 h1 class post title a href title a h1 一种流行的注释方法是分别注释 html 和 php 有一个更好的方法吗
  • 获取字符串中的最后一个整数

    我需要隔离包含多个整数的字符串中最新出现的整数 我怎样才能得到23代替1 for lastnum1 text 1 out of 23 lastnum1 this gt getEval eregi replace out of text 你可
  • WordPress 包含 SVG 文件错误

    我使用 PHP 和 WordPress 在本地主机上 我可以毫无问题地包含 SVG 文件 但在实时服务器上 我尝试包含一个 SVG 文件以便能够使用 CSS 对其进行样式设置 我收到此错误消息 Parse error syntax erro
  • Mysqli 更新抛出 Call to a member function bind_param() 错误[重复]

    这个问题在这里已经有答案了 我有一个 70 80 字段表单 需要插入到表中 因此我首先根据表单中的输入名称在数据库中创建了一个表 而不是手动创建一个巨大的插入语句 这是我使用的代码创建 更改表 function createTable ar
  • 如何通过php获取网页的Open Graph协议?

    PHP 有一个简单的命令来获取网页的元标记 get meta tags 但这仅适用于具有名称属性的元标记 然而 开放图谱协议如今变得越来越流行 从网页获取 opg 值的最简单方法是什么 例如 我看到的基本方法是通过 cURL 获取页面并使用
  • Codeigniter - 出现 404 Not Found 错误

    我们在 godaddy 有两个托管套餐 我们的实时网站使用以下 htaccess 文件运行良好 无需在 url 中使用 index php 即可访问网站 RewriteEngine On RewriteCond REQUEST FILENA
  • 如何在 phalcon 框架中同时连接多个数据库在模型类中同时使用两个而不仅仅是一个

    在我的代码中我有两个数据库ABC and XYZ 我想在同一模型中使用两个数据库 而不是 phalcon 中的解决方案是什么 如何为此实现多个数据库连接 one
  • WordPress 自定义帖子类型未显示在搜索结果中

    我在 WordPress 中遇到自定义帖子类型 测验 和搜索的问题 自定义帖子类型未显示在我的搜索结果页面中 我的搜索结果中仅显示默认的帖子内容 以下是我使用的代码 函数 php函数create posttype register post
  • 如果产品重量超过1000克,如何以公斤为单位显示

    在 Storefront 主题中 我使用下面的代码将格式化重量从 1000g 更改为 1kg add action woocommerce after shop loop item title show weight 10 function

随机推荐

  • Mac 版 Java 中的文件输入

    我们现在正在编程课上学习文件输入和输出 但我有一台 Macbook Pro 我了解如何执行此操作 并且可以在 Windows 上执行此操作 但我无法找到如何在 Mac 上执行此操作 我只是似乎不知道在 File Fred new File
  • 如何从 Java 调用 .NET 代码?

    我并不是在寻找像网络服务这样的常见答案 我正在寻找在同一台机器上运行的轻型解决方案 编辑 我正在寻找 Java 中调用 NET 方法的方法 我是作者jni4net http jni4net sf net JVM和CLR之间的开源进程间桥梁
  • 将 AppCompat 主题应用于 PreferenceFragment 中的个人首选项

    我一直在努力争取我的PreferenceFragment与我的应用程序的其余部分具有相同的基于材质的主题和样式 通过 AppCompat 这PreferenceFragment我用来管理所有应用程序设置的工具如下所示 正如您从上面的屏幕截图
  • 如何在布局中包含布局?

    如何在Android布局中包含布局 我正在创建通用布局 我想将该布局包含在另一个页面中 Edit 正如评论中正确要求的更多信息 使用include tag
  • JavaScript 中的匿名函数命名有何不同?

    我正在分析 John Resig 网站上的以下两个 url 但我不明白为匿名函数命名有何不同 我的理解是 赋予匿名函数的名称只能在函数定义内部使用 而不能在函数定义之外使用 但在以下链接中它会产生巨大的差异 http ejohn org a
  • 核心数据:迁移后,额外的迁移代码

    我希望从版本 1 数据模型迁移到版本 2 但迁移完成后我希望执行一些自定义迁移代码 我如何知道迁移是否 何时发生 是否有migrationHasCompleed委托方法或通知 为了兴趣 我希望执行调整数据库中 png 大小的自定义迁移代码
  • 包括函数已知参数的不确定性,以在 python 中使用 curve_fit 进行拟合

    我在Python中使用不确定性包 我有一个像 A x N 这样的函数 其中 N 是一个具有不确定性的固定参数 例如 N 1 0 0 1 我想通过将方程拟合到数据集 y 来获得参数 A 但有错误 yerr 我尝试使用 uncertaintie
  • 两个java库互相导入?

    我正在开发一个遗留框架 显然有两个相互依赖的库 我的意思是libA进口于libB and libB进口于libA 首先我认为这是一个糟糕的设计 但为什么有人会这样做呢 相反 哪些条件可以导致某人写下此内容 edit 每个库都依赖于另一个库中
  • ListTile 的 SelectedTileColor 不起作用

    我有一个ListView其中包含ListTile被选中时会改变颜色 然而 在下面的代码中 当有中间时Container or SizedBox在 之间ListView和Scaffold SelectedTileColor不起作用 我跟着这个
  • Flink 中复杂拓扑(多输入)的集成测试

    我需要为 flink 流拓扑编写单元测试 这基本上是一个CoFlatMapFunction 并且它有 2 个输入 我尝试从这个页面中获得一些灵感 https ci apache org projects flink flink docs s
  • 如何将依赖项传递给@auth0-angular-jwt?

    所以 我正在迁移使用的 旧 代码HttpModule and angular2 jwt lib 以前 我可以做angular2 jwt使用以下配置 export function authHttpServiceFactory http Ht
  • 如何管理同一条记录的多个版本

    我正在为一家公司做短期合同工作 该公司试图为其数据库记录实施签入 签出类型的工作流程 这是它应该如何工作的 用户在应用程序中创建一个新实体 除了主实体表之外 还将填充大约 20 个相关表 创建实体后 用户会将其标记为主实体 另一个用户只能通
  • openssl_seal问题

    我在加载公钥以使用 PHP 中的 openssl seal 函数进行加密时遇到一些问题 我使用 openSSL 命令行工具创建了公钥和私钥 openssl genrsa des3 out private pem 1024 openssl r
  • 如何按多个字段对对象数组进行排序?

    由此原问题 https stackoverflow com q 979256 178383 如何对多个字段应用排序 使用这种稍微调整的结构 我将如何对城市 升序 和价格 降序 进行排序 var homes h id 3 city Dalla
  • 从左侧隐藏/显示

    我有这个代码可以用来隐藏 显示 我希望 div 在向左移动时隐藏 我怎样才能做到这一点 这就是我的FIDDLE http jsfiddle net dRpWv 306 JavaScript document ready function b
  • 用户未登录时重定向

    我在 App js 中有以下路线
  • ldap3 python修改用过滤器替换对象

    在应用ldapmodify时我们如何进行过滤 例如 这就是我的用户对象的样子 dn email protected cdn cgi l email protection ou users dc dev dc com sn po givenN
  • WP8应用程序中的付款

    我目前正在制作一个 Windows Phone 8 silverlight 应用程序 在应用程序中 我们希望允许用户通过 PayPal 或其他付款方式付款 我还从开发中心查找了应用内付款 但没有在那里看到具有可变值的付款 任何有关使用什么的
  • 如何判断哪些应用程序在 GAC 中注册了给定的程序集?

    当尝试使用 gacutil exe 删除给定程序集 在本例中为 log4net dll 但它应该适用于任何类似情况 时 由于应用程序需要该程序集 操作会失败 但是 我不知道如何判断哪些应用程序实际需要它 由于输出似乎表明该要求已记录在 MS
  • PHP 水印 - Zubrag

    我正在使用 zubrags PHP 水印脚本 附在下面 它的效果很好 除非我尝试使用 PNG 24 作为我的水印 生成的图像带有乱码 不透明的水印 我想知道是否有人可以帮助解释我需要在下面的脚本中更改哪些内容 以便将 PNG 24 作为正确