如何使用 PHP 在请求的图像中重复水印?

2024-01-31

我正在尝试向目录中的所有图像添加水印,例如 www.example.com/private。其中一些图像具有很大的分辨率,而其他图像则相对正常,因此目前我的水印对于较小的图像效果很好。即使将水印居中,我仍然会留下较大图像的理想部分,容易被裁剪。

所以我的问题是我将如何编写一个 php 脚本来在整个图像中垂直和水平重复水印?我对后端开发不太了解,除了我知道它需要提供足够的水印保护,所以我一直在谷歌上四处寻找,只能找到这个http://www.regardadesign.co.uk/blog/post/php-image-manipulation/15 http://www.regardadesign.co.uk/blog/post/php-image-manipulation/15,这是行不通的。

到目前为止,我已将以下 .htaccess 文件放入 /private 目录中:

<IfModule mod_rewrite.c>
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule \.(gif|jpeg|jpg|png)$ /admin/watermark.php [QSA,NC]
</ifModule>"

这是 watermark.php 文件中的脚本:

<?php
ini_set('memory_limit','200M');
$path = $_SERVER['DOCUMENT_ROOT'].$_SERVER['REQUEST_URI'];
$image = imagecreatefromstring(file_get_contents($path));
$w = imagesx($image);
$h = imagesy($image);
$watermark = imagecreatefrompng('watermark.png');
$ww = imagesx($watermark);
$wh = imagesy($watermark);
imagecopy($image, $watermark, (($w/2)-($ww/2)), (($h/2)-($wh/2)), 0, 0, $ww, $wh);
header('Content-type: image/jpeg');
imagejpeg($image);
imagedestroy($image);
imagedestroy($watermark);
exit();
?>

发生这种情况是因为您只插入水印一次。如果你沿着图像区域重复水印,它就会起作用。

替换你的 imagecopy 行:

$img_paste_x = 0;
while($img_paste_x < $w){
    $img_paste_y = 0;
    while($img_paste_y < $h){
        imagecopy($image, $watermark, $img_paste_x, $img_paste_y, 0, 0, $ww, $wh);
        $img_paste_y += $wh;
    }
    $img_paste_x += $ww;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 PHP 在请求的图像中重复水印? 的相关文章

  • PHP 中的文本版本控制,具有差异突出显示

    如果您曾经在 StackOverflow 上编辑过问题 您可能已经注意到它会跟踪问题所应用的确切更改 它以一种形式显示 突出显示文本中已删除的红色部分和自特定编辑以来添加的绿色部分 我的问题是如何自己实现这样一个系统 我正在尝试使用 PHP
  • Laravel 5.1 完成后如何捕获作业队列详细信息?

    在 Laravel 5 1 中 我希望在作业完成时收到通知 并提供有关作业的详细信息 具体来说 user id and customer id 我正在使用Queue after方法中的方法AppServiceProvider作为 Larav
  • DB_DEBUG 设置为 FALSE 的数据库连接设置

    我正在尝试连接到我的数据库 但收到以下消息 无法使用提供的设置连接到数据库服务器 文件名 core Loader php 线路号码 346 所以在阅读了很多之后 我发现在数据库连接中将 db default db debug 设置为 FAL
  • PHP 难以检查数组中的元素是否为整数类型

    我正在尝试检测一个或多个变量是否包含数字 我尝试了几种不同的方法 但并没有完全成功 这是我尝试过的
  • mysql utf8_general_ci 区分大小写

    我有一个 mysql 数据库 我使用 utf8 general ci 不区分大小写 在我的表中 我有一些列 例如 ID 和区分大小写的数据 例如 iSZ6fX 或 AscSc2 为了区分大写和小写 最好只在这些列上设置 utf8 bin 如
  • PHP 数组按月和总和分组

    我有一个 php 数组 如第一张图片所示 我想要的只是按月获取值的总和 如下所示 我知道这对我们大多数人来说可能很容易 但说实话 我找不到可行的方法来实现它 我尝试在谷歌上搜索 但我找到的所有结果都是关于对数据库查询结果进行分组和求和 而对
  • PHPUnit 测试套件包含路径

    使用 phpunit 时 我在包含路径方面遇到了一些麻烦 不是针对 phpunit 本身 而是针对我的代码和测试目录 我有以下代码结构 Application StringCalculator php tests StringCalcula
  • PHP PDF生成问题

    我使用 FPDF 在 PHP 中创建 pdf 我使用会话变量将变量在一种表单之间传递到另一种表单 当我提供一个值时 Report php
  • 为什么我的 PHP 字符串比较失败?

    我有以下代码片段 if summary CFD funding Interest Paid summary Commissions summary Closing trades print summary date reference de
  • 对模型使用 Zend_Autoloader

    有人知道如何使用 新 Zend Autoloader 来加载模型吗 目前我的配置如下所示 应用程序 ini Autoloader Namespace autoloadernamespaces 0 Sl Bootstrap php Start
  • AsyncTask加载图像RecyclerView

    我正在尝试创建一个与该应用程序类似的应用程序 一个在回收视图中包含一些图像和描述 卡片视图 的应用程序 https lh5 ggpht com At pHbZqdzlgmAqY0jbiztDYIAts1wOYWGTOHibmFHuq8CFA
  • Aptana PHP Formatter - 使用自定义格式规则

    我在 PHP 文档中使用 Apatana 的格式化功能 它运行良好 但它转换的数组除外 data array email gt params email username gt params username 进入这个 data array
  • htaccess 文件中的动态重写

    我正在我的 htaccess 文件中进行一些重写和重定向 我这样做的原因是因为我正在为现有网站开发新的设计和布局 因此我需要重定向以保持谷歌排名等 所以旧的 现有的 URL 看起来像这样 news internet shopper numb
  • PHP中如何找出特定进程仍在运行

    我正在编写一个脚本 该脚本构建其他脚本的队列 并应该管理它们的启动 管理器脚本应该知道哪个子进程已经完成 因此它可以启动在队列中等待的其他脚本 我添加了一个 echo 获取每个子进程的进程 ID 所以我有我的子进程进程 ID 现在正在使用系
  • 我想知道像tineye.com这样的反向图像搜索服务是如何工作的......?

    像 TinEye 这样的反向图像搜索引擎如何工作 我的意思是进行图像搜索需要哪些参数 不知道 TinEye 是否使用这个 但是SURF http en wikipedia org wiki SURF是用于此目的的常用算法 在这里您可以看到一
  • 通过 Laravel 框架集成现有项目?

    我已经从 github 克隆了一个项目 现在我需要集成该项目 那么如何使用 laravel 框架 我是否需要创建一个新项目然后需要替换文件夹 或任何其他替代方案 因为我是这个框架的新手 帮助我 这是一个广泛的问题 因为这取决于您的项目 而我
  • 如何正确转义 CSV 中的双引号?

    我的 CSV 中有这样一行 Samsung U600 24 10000003409 1 10000003427 旁边引用24用于表示英寸 而该引号旁边的引号则关闭该字段 我正在读这行fgetcsv但解析器犯了一个错误 并将该值读取为 Sam
  • symfony2 选择单选框的默认值

    我的项目是使用 Silex 和 Symfony 组件 即表单组件 编写的 我尝试创建一组从类中构建的单选按钮 并且我想预先选择其中一个单选按钮 我创建这样的表格 form app form factory gt createBuilder
  • 通过 XMLHttpRequest 将数据从 JavaScript 发送到 PHP

    再会 我正在尝试将一段简单的数据从一个 php 文件 manage php 发送到另一个 view php 我无法通过表单发送数据 我想通过 JS 脚本发送数据 这是我的尝试 var read function id xmlhttp new
  • 在php中获取二进制数据大小的正确方法是什么?

    我已阅读文件的一部分 现在想确保该部分的大小正确 我怎样才能在 php 中做到这一点 part fread file 1024 return some function part 1024 我已经阅读了这些示例 但我怀疑是否要使用 strl

随机推荐

  • 限制变量范围

    我正在尝试编写一个函数 它限制 R 变量的范围 例如 source LimitScope R y 0 f function Raises an error as y is a global variable x y 我想过测试可变环境 但不
  • 我应该如何更新“热门”表?

    我有一个带有 热 表的 postgres 数据库 这意味着它每秒都会收到许多更新 删除 我想运行一个查询UPDATE大约 10 的行 我没有 10 标准的索引 隔离级别设置为SERIALIZABLE作为数据库标志 影响所有事务 我希望这个查
  • Elixir Phoenix 生产服务器出现 Letscrypt 续订问题

    我有一个使用 Elixir Phoenix 框架构建的网站 该网站在开发和生产模式下都运行良好 当phoenix服务器在开发模式下运行时 我更新Let s Encrypt证书没有问题 但是当完全一样应用程序正在生产模式下运行 尝试更新时我不
  • 为什么Java的Area#equals方法不覆盖Object#equals?

    我刚刚遇到了一个由Java引起的问题java awt geom Area equals Area 方法 该问题可以简化为以下单元测试 org junit Test public void testEquals java awt geom A
  • Oracle 中数字的默认精度和小数位数是多少?

    在 Oracle 中创建 NUMBER 类型的列时 您可以选择不指定精度或小数位数 如果您不指定这些默认值 它们会做什么 数字 精度 小数位数 如果未指定精度 则该列将存储给定的值 如果未指定比例 则比例为零 更多信息请访问 http do
  • 检测iframe是否跨域的万无一失的方法

    我正在尝试确定是否有任何 iframe 是跨域的 根据这个问题中接受的答案 检测iframe何时跨域 然后退出它 https stackoverflow com questions 2365822 detect when iframe is
  • 在 C 中查找列表的基数

    我怎样才能只找到列表中出现一次的元素并返回基数 例如 如果我的列表由 3 2 1 1 2 4 组成 我期望返回计数器为 4 而不是6 因为我们不计算重复的数字 这是我到目前为止编写的代码 struct Node int data struc
  • 如何在 Android 中使用 LocationManager#getCurrentLocation

    我需要获取当前位置信息 目前 我正在使用获取最后的已知位置 https developer android com reference android location LocationManager getLastKnownLocatio
  • ASP.NET Core 中的通用存储库在 Startup.cs 中的每个表中没有单独的 AddScoped 行?

    我的项目中有一个通用存储库 考虑以下控制器片段 public class Lookup1Controller Controller readonly MyDbContext db public Lookup1Controller MyDbC
  • 如何在不阻塞 UI 线程的情况下继续执行多个任务?

    在我的 MVVM 应用程序中 我的视图模型调用 3 个不同的服务方法 将每个方法的数据转换为通用格式 然后使用属性通知 可观察集合等更新 UI 服务层的每个方法都会启动一个新的Task并返回Task到视图模型 这是我的一种服务方法的示例 p
  • 未选取 EF 的 Azure 网站连接字符串

    我正在将 ASP NET Web 应用程序部署到 Azure 网站 该网站使用实体框架 当我在中包含以下内容时Web config它运行良好
  • 如何使 Java 和 Objective-C (iPhone) 之间的 AES 加密相同?

    我正在使用 Objective C 加密一个字符串 并使用 AES 在 Java 中加密相同的字符串 并且看到一些奇怪的问题 结果的第一部分在一定程度上匹配 但随后就不同了 因此当我将结果从 Java 解码到 iPhone 上时 它无法解密
  • C++ 中的 std::async 和 lambda 函数没有给出关联状态

    我试图在方便的时候通过使用异步来获得更好的性能 我的程序可以编译 但每次使用包含异步调用的函数时都会出现以下错误 C exception with description No associated state 我尝试使用 lambda 调
  • C++ 中访问器方法(getter 和 setter)的约定

    关于 C 中的访问器方法的几个问题已经在 SO 上被问到了 但没有一个能够满足我对此问题的好奇心 我尽可能避免访问器 因为像 Stroustrup 和其他著名程序员一样 我认为一个类中有很多访问器是糟糕的 OO 的标志 在 C 中 在大多数
  • 使用 Promise 作为回调来反应 setState [重复]

    这个问题在这里已经有答案了 我在 React 中尝试使用 Promise 作为回调来 SetState 时收到错误 这可能是由于我的错误造成的 并且希望对 React 中的 set State 进行一些澄清 我收到的错误消息如下 错误 作为
  • 用户个人资料信息权限对话框中显示“未注册的 Android 应用程序”文本

    我已将 Google 登录集成到我的应用程序中 我每次都能成功登录 但是当我在设备中添加新的谷歌帐户并尝试使用该帐户登录时 我会看到附加的弹出对话框 我不明白为什么它说 未注册的 Android 应用程序 在这种情况下如何注册应用程序 附加
  • 将链接附加到当前 url 的末尾

    当我将 HTML 文件上传到我的网站时 a href 标签 链接将链接中的 URL 附加到当前 URL 的末尾 例如 如果我的网站是example com并且index html文件被放置在example com test链接是google
  • 如何在动态选择中使用表达式创建“内联 if 语句”以进行 null 检查

    如何在动态选择中使用表达式创建 内联 if 语句 以进行 null 检查 我为对象的嵌套属性编写了一个动态选择 LINQ 表达式 但当它为 null 时 它会引发异常 所以我想检查该属性是否为空 就这么简单 这就是我的意思 X Where
  • golang 中“Mon Jan 2 15:04:05 MST 2006”的起源

    在戈朗中文档 http golang org pkg time pkg constants 指出 这些是在 Time Format 和 Time Parse 中使用的预定义布局 布局中使用的参考时间是 Mon Jan 2 15 04 05
  • 如何使用 PHP 在请求的图像中重复水印?

    我正在尝试向目录中的所有图像添加水印 例如 www example com private 其中一些图像具有很大的分辨率 而其他图像则相对正常 因此目前我的水印对于较小的图像效果很好 即使将水印居中 我仍然会留下较大图像的理想部分 容易被裁