php - 在 PHP 中解压缩二进制数据
问题描述
我正在使用第三方 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 中,所以我只能在第一个代码块上更正它。
解决方案
我对你正在做的事情做了一些修改,这对我有用:
$data = file_get_contents('test.png');
$u = unpack('C*', $data);
$bin = pack('C*', ...$u);
header('Content-type: image/png');
echo $bin;
exit();
我的假设是你的fopen
并且fread
没有返回你所期望的。
推荐阅读
- docker - 是否可以在不同的容器中运行领事模板然后在领事集群中运行
- python - 与多处理一起使用时 Pandasql 挂起
- excel - 通过 VBA 在 Excel 中删除换行符会导致溢出错误
- javascript - 浏览器检测所需的实际图像大小
- python - 如何遍历硒/数据中电子表格中存在的数据
- angular - 导入的类静态字段未定义
- excel - 表被重命名
- java - Java 8 流:java.lang.IllegalStateException:结束大小 84758 小于固定大小 84764
- python - 从 Django 启动的脚本中导入自定义模块
- java - 使用 eclipse microprofile-config 自定义配置文件