为了账号安全,请及时绑定邮箱和手机立即绑定

在 PHP 中解压二进制数据

在 PHP 中解压二进制数据

PHP
MM们 2023-08-19 10:44:13
我正在使用第三方 API,它允许我通过 POST 请求上传图像,并且参数需要采用二进制格式,例如[137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,3,...]我尝试使用该unpack()函数并获取要上传的二进制数据,但是当我尝试在上传服务器上查看它时,我只得到一个空白图像,但图像大小是正确的。所以我认为数据就在那里,我只是在解压时做错了什么。        if(!$fp = fopen ($image_url, 'rb')) return 0;        /* Read bytes from the top of the file */        if(!$data = fread ($fp, filesize($image_path))) return 0;        /* Unpack  data */        $data = unpack ('C*', $data);        //$data value: Array ( [1] => 137 [2] => 80 [3] => 78 [4] => 71 [5] => 13....为了测试它是否能正确转换回图像,我使用pack()如下函数:        $bin = pack('C*', ...$data);        header('Content-type: image/png');        header('Content-Disposition: inline; filename="test_image"');        header('Content-Transfer-Encoding: binary');        echo $bin;        exit();因此,这将输出一个空白的 png 文件,但其大小与原始图像完全相同。有没有办法修复解包函数,使其能够正确转换回来?我无法控制如何显示它,因为它是在第三方 API 中,所以我只能在第一个代码块上更正它。
查看完整描述

1 回答

?
精慕HU

TA贡献1845条经验 获得超8个赞

我对你正在做的事情做了一些修改,这对我有用:


$data = file_get_contents('test.png');

$u    = unpack('C*', $data);

$bin  = pack('C*', ...$u);


header('Content-type: image/png');

echo $bin;

exit();

我的假设是你的fopenandfread没有返回你所期望的。


查看完整回答
反对 回复 2023-08-19
  • 1 回答
  • 0 关注
  • 104 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信