操作二进制数据的有效方法

时间:2014-02-20 09:39:23

标签: php binary-data

我有一个包含位图数据的字符串。基本上,它为图像中的每个像素保存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(chrfloorord初始化300万个函数调用。在我的服务器上,对于示例图片,这相当于大约1.4秒。

1 个答案:

答案 0 :(得分:1)

PHP字符串本质上是字节数组。最快的方法就是:

for ($i = 0, $length = strlen($data); $i < $length; $i++) {
    $byte = $data[$i];

    ...
}

如果使用按位运算符操作字节,则几乎不会比这更有效。您可以使用$data[$i] = $newValue将字节写回字符串。如果您需要将单个字节转换为int,请使用ord(),反之则使用chr()