php开发Flash在线裁剪图片生成图片的程序,通过Flash POST 图片的二进制数据给php,由php生成图片保存。
用$_POST接收数据是不行的,PHP默认只识别application/x-www.form-urlencoded标准的数据类型。
因此,对型如text/xml 或者 soap 或者 application/octet-stream 之类的内容无法解析,如果用$_POST数组来接收就会失败!
故保留原型,交给$GLOBALS['HTTP_RAW_POST_DATA'] 来接收。
另外,php://input 也可以实现此功能。
php://input 允许读取 POST 的原始数据。和 $HTTP_RAW_POST_DATA 比起来,它给内存带来的压力较小,并且不需要任何特殊的 php.ini 设置。php://input和
$HTTP_RAW_POST_DATA 不能用于 enctype=”multipart/form-data”。
在Flash中使用JPGEncoder把BitMapData转成二进制,然后post给php代码。
1,php页面代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <?php /** * 生成图片,接收二进制数据 * edit by www.jb200.com */ $filename= "teststream.jpg" ; //要生成的图片名字 $xmlstr = $GLOBALS[HTTP_RAW_POST_DATA]; if (empty($xmlstr)) $xmlstr = <a href= "http://www.jb200.com/zt/file_get_contents/" target= "_blank" class= "infotextkey" >file_get_contents</a>( 'php://input' ); $jpg = $xmlstr; //得到post过来的二进制原始数据 $file = fopen( "cache/pic/" .$filename, "w" ); //打开文件准备写入 fwrite($file,$jpg); //写入 fclose($file); //关闭 ?> |
2,在thinkphp中的应用;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <?php //保存头像 public function saveAvatar(){ $filename = intval($_GET[ 'id' ]). '.jpg' ; $xmlstr = $GLOBALS[ 'HTTP_RAW_POST_DATA' ]; if (empty($xmlstr)) { $xmlstr = file_get_contents( 'php://input' ); } if (!$xmlstr){ exit( '没有接收到数据流.' ); } //by www.jb200.com $jpg = $xmlstr; //得到post过来的二进制原始数据 $file = fopen( "./Public/Uploads/AVATAR/" .$filename, "w" ); //打开文件准备写入 fwrite($file,$jpg); //写入 fclose($file); //关闭 } ?> |