如何在php中将字节数组转换为图像?
How to convert byte array to image in php?
我想将字节数组从网络服务转换为图像。 Web 服务响应数组如下所示,但我不知道如何将此数组渲染回图像。请帮助我
'MemberImage' =>
array (size=151745)
0 => int 255
1 => int 216
2 => int 255
3 => int 224
4 => int 0
5 => int 16
6 => int 74
7 => int 70
8 => int 73
9 => int 70
10 => int 0
11 => int 1
12 => int 1
13 => int 1
14 => int 0
15 => int 72
16 => int 0
17 => int 72
18 => int 0
19 => int 0
20 => int 255 ...
使用pack将数据转换成二进制字符串,es:
$data = implode('', array_map(function($e) {
return pack("C*", $e);
}, $MemberImage));
// header here
// ...
// body
echo $data;
如果您想将该数组转换为实际字节数组(即 二进制字符串 in PHP),您可以使用以下函数...
function arrayToBinaryString(Array $arr) {
$str = "";
foreach($arr as $elm) {
$str .= chr((int) $elm);
}
return $str;
}
你也可以使用 pack
而不是上面的函数来做同样的事情...
call_user_func_array('pack', array_merge(['C*'], $arr));
或 PHP 5.6+
pack('C*', ...$arr);
有了它,您就可以 - 理论上 - 使用二进制字符串作为图像。因此,例如,假设您要输出原始图像数据,并且图像是 PNG
,您可以结合上面的代码执行以下操作...
header('Content-type: image/png');
echo arrayToBinaryString($myArray);
请务必使用实际图像的任何类型编辑 Content-type
header。如果您不知道,您可以在二进制字符串上使用类似 getimagesize
的内容来从图像数据中提取 MIME 类型。
$tmpFile = tempnam("/tmp");
$image = arrayToBinaryString($myArray);
file_put_conetnts($tmpFile, $image);
$imageData = getimagesize($tmpFile);
header("Content-type: {$imageData['mime']}");
echo $image;
unlink($tmpFile);
我想将字节数组从网络服务转换为图像。 Web 服务响应数组如下所示,但我不知道如何将此数组渲染回图像。请帮助我
'MemberImage' =>
array (size=151745)
0 => int 255
1 => int 216
2 => int 255
3 => int 224
4 => int 0
5 => int 16
6 => int 74
7 => int 70
8 => int 73
9 => int 70
10 => int 0
11 => int 1
12 => int 1
13 => int 1
14 => int 0
15 => int 72
16 => int 0
17 => int 72
18 => int 0
19 => int 0
20 => int 255 ...
使用pack将数据转换成二进制字符串,es:
$data = implode('', array_map(function($e) {
return pack("C*", $e);
}, $MemberImage));
// header here
// ...
// body
echo $data;
如果您想将该数组转换为实际字节数组(即 二进制字符串 in PHP),您可以使用以下函数...
function arrayToBinaryString(Array $arr) {
$str = "";
foreach($arr as $elm) {
$str .= chr((int) $elm);
}
return $str;
}
你也可以使用 pack
而不是上面的函数来做同样的事情...
call_user_func_array('pack', array_merge(['C*'], $arr));
或 PHP 5.6+
pack('C*', ...$arr);
有了它,您就可以 - 理论上 - 使用二进制字符串作为图像。因此,例如,假设您要输出原始图像数据,并且图像是 PNG
,您可以结合上面的代码执行以下操作...
header('Content-type: image/png');
echo arrayToBinaryString($myArray);
请务必使用实际图像的任何类型编辑 Content-type
header。如果您不知道,您可以在二进制字符串上使用类似 getimagesize
的内容来从图像数据中提取 MIME 类型。
$tmpFile = tempnam("/tmp");
$image = arrayToBinaryString($myArray);
file_put_conetnts($tmpFile, $image);
$imageData = getimagesize($tmpFile);
header("Content-type: {$imageData['mime']}");
echo $image;
unlink($tmpFile);