将数据存成png文件

dengkz1 2012-10-31 09:14:04
现有$tmpBytes

$i = 1;
foreach($tmpBytes as $k)
{
echo "<br>".dechex($tmpBytes[$i]);
}

循环得到的是
89
50
4e
47
d
a
1a
...

与对应png格式文件的内容是一样的。
1,请问怎样保存成png图片
2,请问这$i为什么要从1开始才是正确的(难道不是从0开始)


以下不成功
$path = "1.png";
$file = fopen($path,"wb");//打开文件准备写入
fwrite($file,pack('H*', $tmpBytes));//写入
fclose($file);//关闭
...全文
165 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
luluxiu010 2012-11-04
  • 打赏
  • 举报
回复
呃呃呃,路过,混点经验
xuzuning 2012-11-01
  • 打赏
  • 举报
回复
由 dechex($tmpBytes[$i]) 可知:
$tmpBytes 是一个与字节数组等价的数组,每一项的值在 0~255 范围里

考虑到有 $i为什么要从1开始 一问,这个数组应该是由 unpack('C*',...) 得到的

还原回去可以
$s = '';
foreach($tmpBytes as $ch) $s .= pack('C', $ch);

可以
$s = '';
foreach($tmpBytes as $ch) $s .= chr($ch);

可以
$s = join('', array_map('chr', $tmpBytes));

还可以
array_unshift($tmpBytes, 'C*');
$s = call_user_func_array('pack', $tmpBytes);


总之使用 H 参数是错误的
pack('H*'... 是将十六进制表示的串转换成机器码
unpack('H*'... 是将机器码转换成十六进制表示的串
acabin 2012-10-31
  • 打赏
  • 举报
回复
unset($tmpByte[0]);
fwrite($file,pack('H*', implode('',$tmpBytes)));

看看
改一下昵称 2012-10-31
  • 打赏
  • 举报
回复
没仔细看:
$i = 1;
foreach($tmpBytes as $k)
{
echo "<br>".dechex($tmpBytes[$i]);
}
会得到你说的结果吗?
dengkz1 2012-10-31
  • 打赏
  • 举报
回复
谢谢dream1206,这种也是不可以的,写入的结果是Array
改一下昵称 2012-10-31
  • 打赏
  • 举报
回复
.
$path = "1.png";
$file = fopen($path,"wb");//打开文件准备写入
fwrite($file, $tmpBytes);//写入 $tmpBytes不就是二进制吗?
fclose($file);//关闭


2,从0开始才是正确的。

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧