如何在php中将字节数组转换为图像?

如何在php中将字节数组转换为图像?,php,image,image-processing,bytearray,Php,Image,Image Processing,Bytearray,我想将字节数组从Web服务转换为映像。webservice响应数组如下所示,但我不知道如何将此数组渲染回图像。请帮帮我 'MemberImage' => array (size=151745) 0 => int 255 1 => int 216 2 => int 255 3 => int 224 4 => int 0 5 => int 16 6 => in

我想将字节数组从Web服务转换为映像。webservice响应数组如下所示,但我不知道如何将此数组渲染回图像。请帮帮我

'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 ...
用于将数据转换为二进制字符串,例如:

$data = implode('', array_map(function($e) {
    return pack("C*", $e);
}, $MemberImage));

// header here
// ...

// body
echo $data;

如果要将该数组转换为实际的字节数组(即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));
或者使用PHP5.6+

pack('C*', ...$arr);
这样,理论上,你就可以使用二进制字符串作为图像了。因此,例如,假设您想要输出原始图像数据,并且图像是a
PNG
,您可以结合上面的代码执行以下操作

header('Content-type: image/png');
echo arrayToBinaryString($myArray);
只需确保使用实际图像的任何类型编辑
内容类型
标题即可。如果您不知道,可以在二进制字符串上使用类似于
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);

我试过这段代码,但图像不是生成的,而是生成这样的输出,����JFIFHH��Photoshop 3.08BIM�HH8BIM� 8分钟�H/FFFF/ff���2Z5-8BIM�P���我们如何解决这个问题?当我运行它时,它显示“调用未定义的函数tmpnam()”@GokulBasnet Yea,函数名为
tempnam
,这是一个输入错误。我会改正的。