php图片的二进制转换实现方法


Posted in PHP onDecember 15, 2014

本文实例讲述了php图片的二进制转换实现方法。分享给大家供大家参考。具体实现方法如下:

这里我们是在上传文件时把上传的文件转换成二进制然后保存到数据的字段中去,下次读读出我们也用同样的方法显示即可.

html代码如下:

<form action="insertPic.php" method="post" enctype="multipart/form-data" name="mainForm" id="mainForm"> 

<input type="file" name="myFile" /> 

<input type="submit" name="Submit" value="Submit"/> 

</form>

将图片保存到数据库,代码如下:
<?php 

//由于上传过来的图片被保存在一个临时文件中,所以 

//我们仅需要读取该文件就可以获取传过来的图片 

$fp = fopen($_FILES["myFile"]["tmp_name"],"rb"); 

$buf = addslashes(fread($fp,$_FILES["myFile"]["size"])); 

//创建一个PDO对象 

$dbh = new PDO("mysql:host=localhost;port= 

3306;dbname=test", "root", "123456″); 

//执行插入操作并将结果保存在一个变量中 

$result = $dbh->query("INSERT INTO img (images) VALUES (‘$buf')"); 

//获取影响的行数 

if ($result->rowCount() >0) { 

echo("数据已插入。"); 

} else { 

echo("不能执行插入操作。"); 

} 

//显式的关闭PDO连接 

$dbh = NULL; 

?>

显示图片show.php,代码如下:
<?php 

$conn=@mysql_connect("localhost","root","123456″) or die("服务器连接错误!"); //链接数据库 

@mysql_select_db("test",$conn) or die("未发现数据库!"); 

$query="select * from img where Id=".$_GET['id']; 

$result=mysql_query($query);

$num=mysql_num_rows($result); 

$data = mysql_result($result,0,"images"); 

header("Content-type: image/" . $num['imgType']); 

echo $data; 

?>

或者,代码如下:
<img src="show.php?id=5″ />

补充:

1、fopen函数.

fopen()函数用于打开文件或者URL,语法如下:

int fopen(string filename, string mode);

字符串参数mode可以是下列的情形:

"r"开文件方式为只读,文件指针指到开始处.

"r+"开文件方式为可读写,文件指针指到开始处。

"w"开文件方式为写入,文件指针指到开始处,并将原文件的长度设为0。若文件不存在,则建立新文件。

"w+"开文件方式为可读写,文件指针指到开始处,并将原文件的长度设为0。若文件不存在,则建立新文件。

"a"开文件方式为写入,文件指针指到文件最后。若文件不存在,则建立新文件。

"a+"开文件方式为可读写,文件指针指到文件最后。若文件不存在,则建立新文件。

"b"若操作系统的文字及二进位文件不同,则可以用此参数,UNIX系统不需要使用本参数。

2、Addslashes函数

Addslashes函数用于将字符串加入斜线,语法如下,注:我测试的时候是把这个函数去掉后成功了,道理你懂的,自己试下就明白了.

string addslashes(string str);

该函数使需要让数据库处理的字符串,引号的部份加上斜线,以供数据库查询(query)能顺利运作,这些会被改的字符包括单引号(')、双引号(")、反斜线backslash()以及空字符NULL(the null byte).

3、fread函数

fread函数用于读到指定长度的位组或到文件尾EOF,语法如下:

string fread(int fp, int length);可安全用于二进制文件

fread() 从文件指针 file 读取最多 length 个字节,该函数在读取完最多 length 个字节数,或到达 EOF 的时候,或(对于网络流)当一个包可用时,或(在打开用户空间流之后)已读取了 8192 个字节时就会停止读取文件,视乎先碰到哪种情况.

二进制转换成图片

注:$newFilePath 对生成的图片名和路径做处理,这里自己去实现,代码如下:

$newFilePath='1.jpg';

$data = $GLOBALS[HTTP_RAW_POST_DATA];//得到post过来的二进制原始数据

if(emptyempty($data)){

$data=file_get_contents("php://input");

}

$newFile = fopen($newFilePath,"w");//打开文件准备写入

fwrite($newFile,$data);//写入二进制流到文件

fclose($newFile);//关闭文件

可以把读取到的二进制流存到数据库,也可以直接写入成一个图片,获取二进制头文件,从而得知属于什么类型文件,代码如下:
$bin = substr($content,0,2);

$strInfo = @unpack("C2chars", $bin); 

$typeCode = intval($strInfo['chars1'].$strInfo['chars2']); 

$fileType = '';

switch ($typeCode) 

{ 

 case 7790: 

     $fileType = 'exe'; 

     break; 

 case 7784: 

     $fileType = 'midi'; 

     break; 

 case 8297: 

     $fileType = 'rar'; 

     break; 

 case 255216: 

     $fileType = 'jpg'; 

     break; 

 case 7173: 

     $fileType = 'gif'; 

     break; 

 case 6677: 

     $fileType = 'bmp'; 

     break; 

 case 13780: 

     $fileType = 'png'; 

     break; 

 default: 

     echo 'unknown'; 

}

希望本文所述对大家的PHP程序设计有所帮助。

PHP 相关文章推荐
说明的比较细的php 正则学习实例
Jul 30 PHP
怎样给PHP源代码加密?PHP二进制加密与解密的解决办法
Apr 22 PHP
有关于PHP中常见数据类型的汇总分享
Jan 06 PHP
让CodeIgniter的ellipsize()支持中文截断的方法
Jun 12 PHP
PHP语法自动检查的Vim插件
Aug 11 PHP
深入解析PHP的Laravel框架中的event事件操作
Mar 21 PHP
PHP7+Nginx的配置与安装教程详解
May 10 PHP
[原创]php集成安装包wampserver修改密码后phpmyadmin无法登陆的解决方法
Nov 23 PHP
Yii2 批量插入、更新数据实例
Mar 15 PHP
Laravel学习教程之View模块详解
Sep 18 PHP
详解在YII2框架中使用UEditor编辑器发布文章
Nov 02 PHP
Laravel 使用查询构造器配合原生sql语句查询的例子
Oct 12 PHP
php第一次无法获取cookie问题处理
Dec 15 #PHP
php_imagick实现图片剪切、旋转、锐化、减色或增加特效的方法
Dec 15 #PHP
php实现按指定大小等比缩放生成上传图片缩略图的方法
Dec 15 #PHP
php实现可用于mysql,mssql,pg数据库操作类
Dec 13 #PHP
PHP中Memcache操作类及用法实例
Dec 12 #PHP
PHP实现PDO的mysql数据库操作类
Dec 12 #PHP
PHP实现的sqlite数据库连接类
Dec 12 #PHP
You might like
php写的简易聊天室代码
2011/06/04 PHP
PHP使用GIFEncoder类生成gif动态滚动字幕
2014/07/01 PHP
redirect_uri参数错误的解决方法(必看)
2017/02/16 PHP
PHP+Ajax实现的博客文章添加类别功能示例
2018/03/29 PHP
PHP中strtr与str_replace函数运行性能简单测试示例
2019/06/22 PHP
正则表达式判断是否存在中文和全角字符和判断包含中文字符串长度
2008/09/27 Javascript
比较简单的异步加载JS文件的代码
2009/07/18 Javascript
JavaScript isArray()函数判断对象类型的种种方法
2010/10/11 Javascript
jquery 结合C#后台的数组对文章的关键字自动添加链接的代码
2011/07/15 Javascript
javascript与有限状态机详解
2014/05/08 Javascript
判断浏览器的内核及版本号方法汇总
2015/01/05 Javascript
JS+CSS实现大气的黑色首页导航菜单效果代码
2015/09/10 Javascript
input点击后placeholder中的提示消息消失
2016/01/15 Javascript
js监听input输入框值的实时变化实例
2017/01/26 Javascript
Bootstrap警告框(Alert)插件使用方法
2017/03/21 Javascript
详解vue mint-ui源码解析之loadmore组件
2017/10/11 Javascript
JS封装的模仿qq右下角消息弹窗功能示例
2018/08/22 Javascript
PostgreSQL Node.js实现函数计算方法示例
2019/02/12 Javascript
jquery实现加载更多&quot;转圈圈&quot;效果(示例代码)
2020/11/09 jQuery
haskell实现多线程服务器实例代码
2013/11/26 Python
全面了解python中的类,对象,方法,属性
2016/09/11 Python
Python断言assert的用法代码解析
2018/02/03 Python
Python列表推导式与生成器表达式用法示例
2018/02/08 Python
python re模块的高级用法详解
2018/06/06 Python
Python基于最小二乘法实现曲线拟合示例
2018/06/14 Python
Python wxPython库使用wx.ListBox创建列表框示例
2018/09/03 Python
解决python线程卡死的问题
2019/02/18 Python
Django中如何防范CSRF跨站点请求伪造攻击的实现
2019/04/28 Python
python实现趣味图片字符化
2019/04/30 Python
Django保护敏感信息的方法示例
2019/05/09 Python
Python实现遗传算法(二进制编码)求函数最优值方式
2020/02/11 Python
matplotlib 对坐标的控制,加图例注释的操作
2020/04/17 Python
html5中的一些标签学习(心得)
2016/10/18 HTML / CSS
什么是Remote Module
2016/06/10 面试题
心碎乌托邦的创业计划书范文
2013/12/26 职场文书
浅谈Python数学建模之固定费用问题
2021/06/23 Python