我有一个包含位图数据的字符串。基本上,它为图像中的每个像素保存1个字节的红色,绿色,蓝色循环。
我想操纵位图中每个颜色通道的8位整数值。目前我使用unpack('C'.strlen($string))
执行此操作,它为我提供了一个整数数组。这很慢,因为它转换了大量数据。
有没有更有效的方法来访问和修改字符串中的数据作为整数?
效率更高,我的意思是比这更有效:
for($i = 0, $l = strlen($string); $i < $l; $i++)
$string[$i] = chr(floor(ord($string[$i]) / 2));
我除以2的操作只是一个例子。在一个真实的例子中,操作会更加先进。
上述示例的问题在于,对于100万像素,您可以从PHP(chr
,floor
,ord
初始化300万个函数调用。在我的服务器上,对于示例图片,这相当于大约1.4秒。
答案 0 :(得分:1)
PHP字符串本质上是字节数组。最快的方法就是:
for ($i = 0, $length = strlen($data); $i < $length; $i++) {
$byte = $data[$i];
...
}
如果使用按位运算符操作字节,则几乎不会比这更有效。您可以使用$data[$i] = $newValue
将字节写回字符串。如果您需要将单个字节转换为int,请使用ord()
,反之则使用chr()
。