php 接收二进制流转换成图片
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 接收二进制流转换成图片的更多相关文章
- php接收二进制数据流转换成图片
<?php /** * 图片类 * @author Haroldphp@163.com * @version 1.0 * PHP默认只识别application/x-www.form-urlen ...
- Android将图像转换成流存储与将流转换成图像
1.将图片转换成二进制流 public byte[] getBitmapByte(Bitmap bitmap){ ByteArrayOutputStream out = new ByteArrayOu ...
- delphi 怎么将一个文件流转换成字符串(String到流,String到文件,相互转化)
//from http://kingron.myetang.com/zsfunc0d.htm (*// 标题:充分利用pascal字符串类型 说明:和PChar不同,string可以保存# ...
- c# 图片转二进制/字符串 二进制/字符串反转成图片
protected void Button1_Click(object sender, EventArgs e) { //图片转二进制 byte[] imageByte = GetPictureDat ...
- C# 将字符串转化成流,将流转换成字符串
using System; using System.IO; using System.Text; namespace CSharpConvertString2Stream { class Progr ...
- 将border 边框换成图片 border-image
<template> <div class="heart"></div> </template> <script> ...
- Gson字符串编码,字符串转换成图片保存,二进制转换成图片保存
import java.io.BufferedInputStream; import java.io.ByteArrayInputStream; import java.io.File; import ...
- 文件流转换(一般用于axios设置接收文件流设置时responseType: 'blob')
文件流转换 一般用于axios设置接收文件流设置时responseType: 'blob'当接口报错时,前端因已设置responseType: 'blob'无法再接收json格式数据,会把json格式 ...
- C#图片转成流,流转成图片,字节转图片,图片转字节的方法
图片转成流 Bitmap b = new Bitmap(Server.MapPath(ppath)); Stream ms = new MemoryStream(); b.Save(ms, Syste ...
随机推荐
- jbpm与spring hibernate struts整合
applicationContext.xml <?xml version="1.0" encoding="UTF-8"?> <beans xm ...
- android ORMlite的应用
ORMLite -轻量级的对象关系映射(ORM) 如果你需要在android中使用ORMLite 你需要进入官方网站http://ormlite.com/ 中下载 下载了这两个包以后,你还需要在对应的 ...
- DAS 原文出自【比特网】
http://www.360doc.com/content/13/1114/11/10504424_329109113.shtml
- Spring.NET学习笔记
http://www.cnblogs.com/GoodHelper/archive/2009/11/20/SpringNet_Index.html
- java并发 使用ScheduledExecutor的温室控制器--thinking in java 21.7.5
package org.rui.thread.newc; import java.text.DateFormat; import java.text.SimpleDateFormat; import ...
- [Angular 2] ROUTING IN ANGULAR 2 REVISITED
Let's say we have a list of contacts, click each contact, we can render a new route to get the detai ...
- cocos2d-x jsb + cocosbuider 适配iphone5 尺寸
最简单的适配iphone5的方案,应该算是直接用一块图片补上多出来的区域了: 1:Iphone5分辨率为 1136* 640 , 需要在cocosbuilder中将ccb修改为对应的尺寸: Docum ...
- SAXParser 解析器和 XMLEventReader(读取XML文档)
import javax.xml.parsers.ParserConfigurationException;import javax.xml.parsers.SAXParser;import java ...
- 微信小程序的一些限制
小程序的一些限制: 不支持HTML.没有 Dom.网页用的 JS.CSS 基本要全部重写,WXML 的语法和 HTML 差异还挺大,基本是一个个照着手册的属性去改.CSS 选择器不支持级联. 小程序源 ...
- 写出一条Sql语句:取出表A中第31到第40记录(SQLServer,以自动增长的ID作为主键,注意:ID可能不是连续的。
答:解1: select top 10 * from A where id not in (select top 30 id from A) 解2: select top 10 * from A ...