现有$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);//关闭

解决方案 »

  1.   

    .
    $path = "1.png";
    $file = fopen($path,"wb");//打开文件准备写入
    fwrite($file, $tmpBytes);//写入 $tmpBytes不就是二进制吗?
    fclose($file);//关闭2,从0开始才是正确的。
      

  2.   

    谢谢dream1206,这种也是不可以的,写入的结果是Array
      

  3.   

    没仔细看:
    $i = 1;
    foreach($tmpBytes as $k)
    {
      echo "<br>".dechex($tmpBytes[$i]);
    }会得到你说的结果吗?
      

  4.   

    unset($tmpByte[0]);
    fwrite($file,pack('H*', implode('',$tmpBytes)));看看
      

  5.   

    由 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*'... 是将机器码转换成十六进制表示的串