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 相关文章推荐
第十三节 对象串行化 [13]
Oct 09 PHP
PHP入门
Oct 09 PHP
php 生成随机验证码图片代码
Feb 08 PHP
分享一下贝贝成长进度的php代码
Sep 14 PHP
PHP时间格式控制符对照表分享
Jul 23 PHP
PHP计算百度地图两个GPS坐标之间距离的方法
Jan 09 PHP
php绘制一个矩形的方法
Jan 24 PHP
php使用CURL不依赖COOKIEJAR获取COOKIE的方法
Jun 17 PHP
thinkphp3.x自定义Action、Model及View的简单实现方法
May 19 PHP
PHP封装返回Ajax字符串和JSON数组的方法
Feb 17 PHP
thinkPHP5.0框架验证码调用及点击图片刷新简单实现方法
Sep 07 PHP
php学习笔记之字符串常见操作总结
Jul 16 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
1 Tube Radio
2021/03/02 无线电
PHP传参之传值与传址的区别
2015/04/24 PHP
YII使用url组件美化管理的方法
2015/12/28 PHP
CodeIgniter读写分离实现方法详解
2016/01/20 PHP
Yii使用migrate命令执行sql语句的方法
2016/03/15 PHP
Django中通过定时任务触发页面静态化的处理方式
2018/08/29 PHP
jquery 子窗口操作父窗口的代码
2009/09/21 Javascript
支持ie与FireFox的剪切板操作代码
2009/09/28 Javascript
JavaScript 编写匿名函数的几种方法
2010/02/21 Javascript
解析javascript 实用函数的使用详解
2013/05/10 Javascript
原生js的弹出层且其内的窗口居中
2014/05/14 Javascript
jquery ezUI 双击行记录弹窗查看明细的实现方法
2016/06/01 Javascript
基于CSS3和jQuery实现跟随鼠标方位的Hover特效
2016/07/25 Javascript
nodejs实例解析(输出hello world)
2017/01/03 NodeJs
利用node.js写一个爬取知乎妹纸图的小爬虫
2017/05/03 Javascript
浅谈Angular 中何时取消订阅
2017/11/22 Javascript
Javacript中自定义的map.js  的方法
2017/11/26 Javascript
JavaScript中join()、splice()、slice()和split()函数用法示例
2018/08/24 Javascript
微信小程序实现Session功能及无法获取session问题的解决方法
2019/05/07 Javascript
webpack常用配置总览(小结)
2019/11/18 Javascript
微信小程序实现自定义底部导航
2020/11/18 Javascript
[03:22]DSPL第一期精彩集锦:酷炫到底!
2014/11/07 DOTA
[46:59]完美世界DOTA2联赛PWL S2 GXR vs Ink 第二场 11.19
2020/11/20 DOTA
python利用paramiko连接远程服务器执行命令的方法
2017/10/16 Python
3分钟学会一个Python小技巧
2018/11/23 Python
Python selenium根据class定位页面元素的方法
2019/02/26 Python
python pygame实现五子棋小游戏
2020/10/26 Python
python的sorted用法详解
2019/06/25 Python
Python排序函数的使用方法详解
2020/12/11 Python
Pandas直接读取sql脚本的方法
2021/01/21 Python
css3实现画半圆弧线的示例代码
2017/11/06 HTML / CSS
html5 Canvas画图教程(10)—把面拆成线条模拟出圆角矩形
2013/01/09 HTML / CSS
库房主管岗位职责
2013/12/31 职场文书
群众路线专项整治方案
2014/10/27 职场文书
2019垃圾分类宣传口号汇总
2019/08/16 职场文书
python基础之while循环语句的使用
2021/04/20 Python