php 接收二进制流转换成图片,图片类imageUpload.php如下:

<?php
/**
* 图片类
* @author http://blog.csdn.net/haiqiao_2010
* @version 1.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"。
*/
class imageUpload {
const ROOT_PATH = './';
const FAIL_WRITE_DATA = 'Fail to write data';
//没有数据流
const NO_STREAM_DATA = 'The post data is empty';
//图片类型不正确
const NOT_CORRECT_TYPE = 'Not a correct image type';
//不能创建文件
const CAN_NOT_CREATE_FILE = 'Can not create file';
//上传图片名称
public $image_name;
//图片保存名称
public $save_name;
//图片保存路径
public $save_dir;
//目录+图片完整路径
public $save_fullpath; /**
* 构造函数
* @param String $save_name 保存图片名称
* @param String $save_dir 保存路径名称
*/
public function __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
public function image($save_name) {
$this->__construct ( $save_name );
} public function stream2Image() {
//二进制数据流
$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 );
}
}
/**
* 创建文件夹
* @param String $dirName 文件夹路径名
*/
public function create_dir($dirName, $recursive = 1,$mode=0777) {
! is_dir ( $dirName ) && mkdir ( $dirName,$mode,$recursive );
}
/**
* 获取图片信息,返回图片的宽、高、类型、大小、图片mine类型
* @param String $imageName 图片名称
*/
public function getimageInfo($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 {
//不是合法的图片
return false;
} } /*private function error_handler($a, $b) {
echo $a, $b;
}*/ }
?>

转载:http://blog.csdn.net/haiqiao_2010/article/details/12946841

php 接收二进制流转换成图片的更多相关文章

  1. php接收二进制数据流转换成图片

    <?php /** * 图片类 * @author Haroldphp@163.com * @version 1.0 * PHP默认只识别application/x-www.form-urlen ...

  2. Android将图像转换成流存储与将流转换成图像

    1.将图片转换成二进制流 public byte[] getBitmapByte(Bitmap bitmap){ ByteArrayOutputStream out = new ByteArrayOu ...

  3. delphi 怎么将一个文件流转换成字符串(String到流,String到文件,相互转化)

    //from   http://kingron.myetang.com/zsfunc0d.htm (*//   标题:充分利用pascal字符串类型   说明:和PChar不同,string可以保存# ...

  4. c# 图片转二进制/字符串 二进制/字符串反转成图片

    protected void Button1_Click(object sender, EventArgs e) { //图片转二进制 byte[] imageByte = GetPictureDat ...

  5. C# 将字符串转化成流,将流转换成字符串

    using System; using System.IO; using System.Text; namespace CSharpConvertString2Stream { class Progr ...

  6. 将border 边框换成图片 border-image

    <template>   <div class="heart"></div> </template> <script> ...

  7. Gson字符串编码,字符串转换成图片保存,二进制转换成图片保存

    import java.io.BufferedInputStream; import java.io.ByteArrayInputStream; import java.io.File; import ...

  8. 文件流转换(一般用于axios设置接收文件流设置时responseType: 'blob')

    文件流转换 一般用于axios设置接收文件流设置时responseType: 'blob'当接口报错时,前端因已设置responseType: 'blob'无法再接收json格式数据,会把json格式 ...

  9. C#图片转成流,流转成图片,字节转图片,图片转字节的方法

    图片转成流 Bitmap b = new Bitmap(Server.MapPath(ppath)); Stream ms = new MemoryStream(); b.Save(ms, Syste ...

随机推荐

  1. opencl 在vs2015上遇见的问题

    严重性 代码 说明 项目 文件 行 禁止显示状态 错误 C4996 'clCreateCommandQueue': 被声明为已否决 Project2 d:... 解决方法:#pragma warnin ...

  2. Chrome 插件vimium快捷键大全

    vimium是一款让你在chrome浏览器能方便地使用键盘操作浏览器的插件. 转自:http://www.cnblogs.com/liuyangnuts/p/3474905.html 在当前页中导航 ...

  3. WINFORM跟随WPF窗体移动

    <Window x:Name="mainWindow1" x:Class="WpfApplication9.MainWindow"         xml ...

  4. careercup-递归和动态规划 9.5

    9.5 编写一个方法,确定某字符串的所有排列组合. 类似leetcode:Permutations 解法: 跟许多递归问题一样,简单构造法非常管用.假设有个字符串S,以字符序列a1a2a...an表示 ...

  5. Android SmsManager 发送短信

    SmsManager可以在后台发送短信,无需用户操作,开发者就用这个SmsManager功能在后台偷偷给SP发短信,导致用户话费被扣.必须添加android.permission.SEND_SMS权限 ...

  6. TCP/IP协议原理与应用笔记14:电路交换 和 分组交换

    1. 电路交换: (1)建立连接 (2)数据传输 (3)拆除连接 2. 分组交换 (1)数据报: 根据网络的特性,将数据报分成不同大小的部分,经过不同网路传递到相同的目的地.如下: 这里A--X  和 ...

  7. Block块

    block的标志:^ 特点: 1.可以保存代码 2.有返回值 3.有形参 4.调用方式和c语言一样 5.可以访问外部变量,但不能修改变量的值:如果使用__block关键字修饰的变量才可以. 1)创建 ...

  8. 利用ORACLE ADV 功能完成SQL TUNING 调优(顾问培训) “让DBA失业还是解脱?”

    oracle自动判断SQL性能功能. 11G的ADV,建议.SNAPSHOT,数据集合, 存储在oracle sys $_开头的表(10几条).  创建SNAPSHOT时选择天数, 默认14天. sq ...

  9. OI路上-NOIP100天冲刺计划

    学OI已经9个月了,可是自己水平还是那样的弱QWQ. 现在离NOIP还有差不多100天的时间. 晚上辗转反侧发现了自己的一些问题: (1)DP还经常没思路. (2)搜索恶心题还不想写. (3)有时候也 ...

  10. 263. Ugly Number(C++)

    263. Ugly Number Write a program to check whether a given number is an ugly number. Ugly numbers are ...