两个不常见的PHP运算符一起使用来获取图像像素颜色,请解释

2023-12-29

The PHP 图像颜色() http://www.php.net/manual/en/function.imagecolorat.php函数可用于获取图像像素的 RGB 值,如文档中所示:

$im = imagecreatefrompng("php.png");
$rgb = imagecolorat($im, 10, 15);
$r = ($rgb >> 16) & 0xFF;
$g = ($rgb >> 8) & 0xFF;
$b = $rgb & 0xFF;

我根本不明白最后三行;我知道它们返回正确的值,但我不知道如何>> and &运营商共同努力做到这一点。有人可以解释一下吗?

作为参考,当$rgb = 9750526,RGB 值变为(148,199,254).

感谢您的任何回复。


& 和 >> 是两个不同的按位运算符 http://en.wikipedia.org/wiki/Bitwise_operation (PHP 中的位运算符 http://php.net/manual/en/language.operators.bitwise.php)。它们使用值的位表示,这为我们提供了一些有用(且快速!)的可能性。

>> is 右移 http://en.wikipedia.org/wiki/Logical_shift。如果右移一个值,则会将表示形式中的所有位移至右侧。如果你有“11100”并将其右移两位,则剩下“111”(右端移出的位消失)。 >> 右侧的数字表示要移位的位数。

& is 按位和 http://en.wikipedia.org/wiki/Bitwise_operation#AND。如果您有两个表示为 111000 和 101011 的值,并决定对它们进行按位求和,则最终会得到 101000(两个值中相同位设置的位将为 1,否则为 0)。

现在我们已经有了理解上面代码所需的一切。 $rgb 包含一个整数值(该值并不有趣,但位模式很有趣),它表示 24 位(RGBA 为 32 位,但我们在这里忽略它)。该值由 8 位红色、8 位绿色和 8 位蓝色组成。然而,我们并不关心这 24 位一起代表什么数字,而是关心单独的 R、G 和 B 值是什么。

我们的值代表颜色的以下位:

rrrrrrrr gggggggg bbbbbbbb 

如果我们用 >> 16 移动这个位掩码,我们将得到:

                  rrrrrrrr

这就是 >> 16 所做的,只留下代表红色的位。由于我们现在已将位一直向下移动,因此该值表示 [0, 255] 中的数字。然后我们添加 & 255(此处以十六进制表示法写为 0xFF)以删除我们感兴趣的 8 以上的任何杂散位。当我们查看如何获取 G 值时,我们现在将了解这是如何发生的:

我们的价值观依然勇敢地代表着不同的颜色:

rrrrrrrr gggggggg bbbbbbbb 

如果我们用 >> 8 将该位掩码移动 8 位,我们将得到:

         rrrrrrrr gggggggg

可是等等!这不仅仅是代表g的位,还有代表r的位!这不是我们想要的值(因为我们只想要 g)。在前面的例子中我们很幸运,因为我们没有在 r 之上设置任何位,但是这一次我们真的完成了我们的工作。但我们了解 &,现在是时候真正了解它的内容了。

我们现在有:

         rrrrrrrr gggggggg

然后我们应用&255(代码中的0xFF),它以位值表示为:

         00000000 11111111

由于 & 只保留两个操作数中设置的位,因此我们最终只会得到 g 值:

                  gggggggg

移位后的值中表示红色的位现在为 0,我们只剩下表示原始颜色的绿色的位。由于它们已被移位到表示 [0, 255] 的相同 8 位,因此我们再次获得了值。

最后一个值更容易,因为它已经位于我们想要的位置:在表示 [0, 255] 的位中。我们可以在这里只进行 & 操作,然后从另一边退出:

rrrrrrrr gggggggg bbbbbbbb & 
00000000 00000000 11111111

最终结果是:

                  bbbbbbbb

我们也得到了蓝色值。

希望能解释一下!

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

两个不常见的PHP运算符一起使用来获取图像像素颜色,请解释 的相关文章

  • Laravel 集成测试:如何断言一个 URL 已被调用但另一个 URL 没有

    我想测试一个向某个 URL 发出请求的控制器 例如 http example com api say hello 但它不会向另一个 URL 发出请求 例如 http example com api say bye bye 我想测试的控制器功
  • 运行没有扩展名的 PHP 页面

    我想在 apache Web 服务器上运行我的 PHP 网页 而不需要 php扩大 所以我添加了以下代码 RewriteEngine on RewriteBase Rewritecond REQUEST URI NC RewriteRule
  • 如何在 Laravel 查询中使用多个 OR,AND 条件

    我需要 Laravel 查询帮助 我的自定义查询 返回正确结果 Select FROM events WHERE status 0 AND type public or type private 如何写这个查询Laravel Event w
  • 使用 php 获取当前月份的最后 3 个月

    我想获取当前月份最近 3 个月的名称 例如当前月份是八月 所以 我想要六月 七月 八月这样的数据 我已经尝试过这段代码echo date F strtotime 3 months 它只返回六月 如何使用 php 获取当前月份的最后 3 个月
  • 在值中包含换行符

    我有一个 Word 模板 其中 php 代码中定义了值 在PHP代码中 document gt setValue Value1 value1 在word模板中 Value1 如何将包含两个值之间的断线的值包含在单词的值中 Replace n
  • .htaccess 异常导致主目录出现问题

    这是我的目录结构 localhost or livehost app bootstrap public vendor code demo 这是我的 htaccess
  • PHP 开发相当于 Mongrel/Webrick 吗?

    PHP 开发中是否有与 Rails 开发期间使用 Mongrel Webrick 等效的方法 我通常在端口 3000 上使用 Mongrel 在开发过程中为我的 Rails 应用程序提供服务 我从事 PHP 开发已经有几年了 据我所知 方法
  • zip 文件的校验和

    我目前正在开发一个工具 它上传一组文件 然后使用 md5 校验和将文件与上一批上传的文件进行比较 并告诉您哪些文件已更改 对于常规文件 这工作正常 但某些上传的文件是 zip 存档 即使其中的文件相同 它们几乎总是会发生变化 有没有一种方法
  • 阻止注销页面后的后退按钮

    我有 php 注销页面 当用户单击注销链接时 请参阅此页面并重定向到索引页面 但是当单击后退按钮时 我会看到带有用户数据的上一页 当然 当我刷新页面时 我看不到以前的页面和数据 我在单击注销并单击后退按钮后检查了其他代码 drupal 但我
  • 如何通过php的require()或include()函数传递变量?

    当我使用这个时 require diggstyle code php page page no 警告是 无法打开流 第 198 行 C xampp htdocs 4ajax gallery core php 中没有错误 错误是 Failed
  • 使用 php 在多维数组中按键排序[重复]

    这个问题在这里已经有答案了 可能的重复 在 PHP 中对多维数组进行排序 https stackoverflow com questions 2059255 sorting multidimensional array in php 如何在
  • 为什么验证不起作用并跳转到另一个页面?

    我写了一个customer display php来验证数据 到目前为止只有名字 但无论名字字段是否为空 网页都会跳转到customer search php并且没有更改数据库中的信息 为什么
  • PHP:读取字体文件的 TrueType/OpenType 元数据

    如何阅读字体详细信息 例如 字体在其元数据中包含版权 姓氏 设计者 版本等信息 我还希望脚本能够计算文件中的字形数量 并返回字体支持的语言 例如 典型的字体可能包含西方语言 瑞典语和罗马语言支持 并具有数百个字形 它应该支持 truetyp
  • 如何解码 eval( gzinflate( base64_decode(

    我已将此代码注入到我的网站中 如何解码尾随字符串 我需要知道发生了什么以及其背后的代码是什么 这应该输出将被执行的代码eval 我希望这就是您正在寻找的
  • 为什么我的 if 语句没有按我预期的方式工作?

    我正在尝试实现以下目标 我向我的 SQL 数据库询问使用SELECT FROM subjects 这样做之后我要求使用数组mysqli fetch assoc 在那之前一切都很好 现在的问题是 当我尝试在每个循环中修改 genero 的值
  • 如何仅使用 PHP5 RecursiveDirectoryIterator 类递归显示具有特定文件类型的文件夹和子文件夹

    您好 我正在尝试使用 FilterIterator 上的扩展来获取 RecursiveDirectoryIterator 类 但由于某种原因 它仅在根目录上进行迭代 我的代码是这样的 class fileTypeFilter extends
  • WordPress 插件中的类自动加载器

    我想编写一个类自动加载器以在 WordPress 插件中使用 该插件将安装在多个站点上 我想尽量减少与其他插件发生冲突的机会 自动加载器将是这样的 function autoload name some code here 我的主要问题是
  • 从支付网关重定向回时用户会话丢失

    我已将 Cyber source 配置为我的支付网关 我能够导航到 cybersource 并进行付款 并能够成功重定向回该网站 我也可以取消付款并重定向回我的网站 我收到来自支付网关的响应 但是 用户在从支付网关重定向回来时会被注销 我正
  • 如何使用 PHP 对字符串进行 rot13 处理?

    我有一个很大的 php 代码 我想手动对其进行编码和解码 我的问题是 php 代码里面有很多单引号和双引号 因此我在使用时出现错误str rot13 功能如下 那么正确的语法是什么以及如何使用下面的函数进行编码 str rot13 That
  • 使用 php-ews(Exchange Web 服务)在特定日期后获取电子邮件

    在我的 PHP 脚本中 我需要弄清楚如何检索指定消息 ID 之后或特定日期之后的所有电子邮件 两者都可以 我只需要检索自上次抓取收件箱以来的新电子邮件 这个收件箱每天收到数千封电子邮件 而且我在 30 天内无法删除任何电子邮件 对于初始导入

随机推荐

  • 当 alpha =0 时画布会损坏 RGB

    我正在使用 HTML 画布来投影图像 当我尝试操纵图像数据的 Alpha 通道时 我发现只要将其归零 像素中的其他值就会发生变化 即使设置为较低的数字 它们似乎也会发生变化 从控制台执行此操作 canvas document getElem
  • CXF BusException 命名空间没有 DestinationFactory http://cxf.apache.org/transports/http

    我正在尝试支持 basic cxf rs example 1 但使用我自己的服务impl这更简单 我的所有方法都返回字符串 当我尝试运行该服务器时 出现此异常 我建立了一个干净的项目 所以我要重新开始 大师 pom http maven a
  • StemDocument R 文本挖掘

    我的数据是一个txt文件 如下所示 字数 doc概述1客户1 store 1 marge 1 price 2 stock 2经济学2 文档的编号已排序 从最小到最大 现在我想要每个文档属于该文档的所有单词 现在它们站在一列中 但我想要文本文
  • 我应该使用一个大的 SQL Select 语句还是几个小的 SQL Select 语句?

    我正在使用从 MySQL 发送的数据构建一个 PHP 页面 是不是更好有 1 SELECT具有 4 个表连接的查询 或者 4 small SELECT没有表连接的查询 我确实从 ID 中选择 哪种方法更快 每种方法的优缺点是什么 我只需要每
  • 导入二维数据的 Python 和内存高效方法

    我正在尝试运行一些使用 Python 分析数据的脚本 我很快就对它占用的 RAM 空间感到惊讶 我的脚本从文件中读取两列整数 它通过以下方式导入它 import numpy as N from sys import argv infile
  • Antd - 有没有办法改变卡片标题的背景颜色?

    通过添加 style 属性 我只能更改 Card 组件主体部分的颜色 我怎样才能更改标题部分
  • 我是否需要内存屏障来访问已完成的线程修改的内存?

    以下为 C 术语 我有一个线程 A 和线程 B 共享对整数值 P 的访问 线程 A 初始化该值并在运行时更新它 然后线程A完成 线程 B 等待线程 A 完成 标准操作系统 API 调用 无论使用什么操作系统 并想要读取 P 线程 B 是否需
  • MySQL 更新并从另一个表中选择

    我有3张桌子 Kommuner 和 Fylker 公司 公司表有一个空字段forretningsadresse fylke但另一个领域forretningsadresse kommune有一个值 所以基本上 我需要填写forretnings
  • 表与两个相关表的总和

    我在这里提出这个 我确信是 简单的问题 我不知道如何解决 我有这个架构 有了这个数据 我的预期结果是 对于 约翰 纳什 PERSON NAME TOTAL FRUIT TOTAL COOKIE JOHN NASH 10 38 对于 奥斯卡
  • 包装一个对象

    我有一个对象 它有一堆公共属性 没有 getter 和 setter 坏的 因此 我创建了一个包含属性的类 并为它们创建了 getter 和 setter 我的计划是将对象包装在我的类中 因此这意味着不能直接访问属性 我有点不确定该怎么做
  • 如何在 Web Api 操作中锁定长异步调用?

    我有这样的场景 我有一个 WebApi 和一个端点 触发时会执行大量工作 大约 2 5 分钟 这是一个具有副作用的 POST 端点 我想限制执行 以便如果向此端点发送 2 个请求 不应该发生 但安全总比遗憾更好 其中一个请求将必须等待以避免
  • Android手机与穿戴模块之间共享文件

    几个月前 我最初只使用移动模块开始我的项目 现在我也有兴趣为可穿戴设备配置我的应用程序 也就是说 我的所有文件 Java XML drawables 等 都在移动模块中 所以我是否需要将我想要在移动模块和可穿戴模块之间共享的所有文件传输到新
  • 如何获取 Tensorflow seq2seq 嵌入输出

    我正在尝试使用张量流训练序列到序列模型 并一直在查看他们的示例代码 我希望能够访问编码器创建的向量嵌入 因为它们似乎具有一些有趣的属性 然而 我真的不清楚这是怎么回事 在单词的向量表示示例中 他们详细讨论了这些嵌入的用途 但似乎没有提供访问
  • 如何在开发机器上使用ansible模板本地创建文件

    我从 ansible 开始 正在寻找一种方法来使用 ansible 剧本在服务器和本地环境上创建样板项目 我想在本地使用 ansible 模板来创建一些通用文件 但是我如何使用ansible在本地执行某些操作呢 我读了一些 local ac
  • SSRS 报告每个参数值的重复表

    大家对这里的一般性问题感到抱歉 但我一直在互联网上查找 但找不到解决方案 我有一份 SSRS 报告 在运行之前用户必须输入一个参数 Location 在查询中 指定仅返回该位置匹配的结果 IE where Company location
  • 在reactjs中切换下拉菜单

    我的导航栏上有一个简单的下拉菜单的以下代码 https jsfiddle net jL3yyk98 10 https jsfiddle net jL3yyk98 10 索引 html div div 导航菜单 js var NavMenu
  • Polymer:在纸张按钮按“确定”后获取纸张对话框内的纸张输入值

    我需要在按下 确定 纸张按钮后获取纸张对话框内某些纸张输入字段的值 I have
  • 检查时间是否在某一分钟内的最佳方法是什么?

    我想编写一个简单的 python 脚本 它将检查是否是给定小时 分钟之前的 2 分钟 然后每天或在给定时间的给定日期调用我的函数 该脚本将在 cronjob 中每分钟运行一次 所以执行myfunction 的两种情况 每天 10 55201
  • 如何更改 Tkinter 按钮周围框的颜色?

    我尝试了在 Stackoverflow 上找到的一些东西 例如在按钮周围放置一个框架并为其指定颜色 就像所说的那样here https stackoverflow com questions 53101307 how do i change
  • 两个不常见的PHP运算符一起使用来获取图像像素颜色,请解释

    The PHP 图像颜色 http www php net manual en function imagecolorat php函数可用于获取图像像素的 RGB 值 如文档中所示 im imagecreatefrompng php png