PHP实现接收二进制流转换成图片的方法
本文实例讲述了PHP实现接收二进制流转换成图片的方法。分享给大家供大家参考,具体如下:
这里实现php接收二进制流转换成图片,所使用的图片类imageUpload.php如下:
<?php /** *图片类 *@version1.0 * *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"。 */ classimageUpload{ constROOT_PATH='./'; constFAIL_WRITE_DATA='Failtowritedata'; //没有数据流 constNO_STREAM_DATA='Thepostdataisempty'; //图片类型不正确 constNOT_CORRECT_TYPE='Notacorrectimagetype'; //不能创建文件 constCAN_NOT_CREATE_FILE='Cannotcreatefile'; //上传图片名称 public$image_name; //图片保存名称 public$save_name; //图片保存路径 public$save_dir; //目录+图片完整路径 public$save_fullpath; /** *构造函数 *@paramString$save_name保存图片名称 *@paramString$save_dir保存路径名称 */ publicfunction__construct($save_name,$save_dir){ //set_error_handler($this->error_handler()); //设置保存图片名称,若未设置,则随机产生一个唯一文件名 $this->save_name=$save_name?$save_name:md5(mt_rand(),uniqid()); //设置保存图片路径,若未设置,则使用年/月/日格式进行目录存储 $this->save_dir=$save_dir?self::ROOT_PATH.$save_dir:self::ROOT_PATH.date('Y/m/d'); //创建文件夹 @$this->create_dir($this->save_dir); //设置目录+图片完整路径 $this->save_fullpath=$this->save_dir.'/'.$this->save_name; } //兼容PHP4 publicfunctionimage($save_name){ $this->__construct($save_name); } publicfunctionstream2Image(){ //二进制数据流 $data=file_get_contents('php://input')?file_get_contents('php://input'):gzuncompress($GLOBALS['HTTP_RAW_POST_DATA']); //数据流不为空,则进行保存操作 if(!empty($data)){ //创建并写入数据流,然后保存文件 if(@$fp=fopen($this->save_fullpath,'w+')){ fwrite($fp,$data); fclose($fp); $baseurl="http://".$_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].dirname($_SERVER["SCRIPT_NAME"]).'/'.$this->save_name; if($this->getimageInfo($baseurl)){ echo$baseurl; }else{ echo(self::NOT_CORRECT_TYPE); } }else{ } }else{ //没有接收到数据流 echo(self::NO_STREAM_DATA); } } /** *创建文件夹 *@paramString$dirName文件夹路径名 */ publicfunctioncreate_dir($dirName,$recursive=1,$mode=0777){ !is_dir($dirName)&&mkdir($dirName,$mode,$recursive); } /** *获取图片信息,返回图片的宽、高、类型、大小、图片mine类型 *@paramString$imageName图片名称 */ publicfunctiongetimageInfo($imageName=''){ $imageInfo=getimagesize($imageName); if($imageInfo!==false){ $imageType=strtolower(substr(image_type_to_extension($imageInfo[2]),1)); $imageSize=filesize($imageInfo); return$info=array('width'=>$imageInfo[0],'height'=>$imageInfo[1],'type'=>$imageType,'size'=>$imageSize,'mine'=>$imageInfo['mine']); }else{ //不是合法的图片 returnfalse; } } /*privatefunctionerror_handler($a,$b){ echo$a,$b; }*/ } ?>
PS:这里再为大家推荐几款比较实用的图片处理工具供大家参考使用:
在线图片转换BASE64工具:
http://tools.jb51.net/transcoding/img2base64
ICO图标在线生成工具:
http://tools.jb51.net/aideddesign/ico_img
在线Email邮箱图标制作工具:
http://tools.jb51.net/email/emaillogo
在线图片格式转换(jpg/bmp/gif/png)工具:
http://tools.jb51.net/aideddesign/picext
更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP图形与图片操作技巧汇总》、《PHP基本语法入门教程》、《PHP运算与运算符用法总结》、《php面向对象程序设计入门教程》、《PHP网络编程技巧总结》、《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。