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中利用XML技术构造远程服务(下)
Oct 09 PHP
PHP开发文件系统实例讲解
Oct 09 PHP
优化php效率,提高php性能的一些方法
Mar 24 PHP
使用php 获取时间今天明天昨天时间戳的详解
Jun 20 PHP
PHP连接局域网MYSQL数据库的简单实例
Aug 26 PHP
zf框架的校验器InArray使用示例
Mar 13 PHP
ThinkPHP CURD方法之order方法详解
Jun 18 PHP
新浪SAE搭建PHP项目教程
Jan 28 PHP
支持中文的PHP按字符串长度分割成数组代码
May 17 PHP
PHP面向对象学习之parent::关键字
Jan 18 PHP
PHP实现执行外部程序的方法详解
Aug 17 PHP
Laravel 默认邮箱登录改成用户名登录的实现方法
Aug 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
怎么使 Mysql 数据同步
2006/10/09 PHP
ASP知识讲座四
2006/10/09 PHP
PHP 转义使用详解
2013/07/15 PHP
简单谈谈PHP中的include、include_once、require以及require_once语句
2016/04/23 PHP
怎么让脚本或里面的函数在所有图片都载入完毕的时候执行
2006/10/17 Javascript
用js遍历 table的脚本
2008/07/23 Javascript
javascript天然的迭代器
2010/10/29 Javascript
js导出txt示例代码
2014/01/14 Javascript
JSON+HTML实现国家省市联动选择效果
2014/05/18 Javascript
JavaScript实现的简单拖拽效果
2015/06/01 Javascript
jQuery实现的表格展开伸缩效果实例
2016/09/07 Javascript
函数四种调用模式以及其中的this指向
2017/01/16 Javascript
10道典型的JavaScript面试题
2017/03/22 Javascript
BootStrap模态框和select2合用时input无法获取焦点的解决方法
2017/09/01 Javascript
javascript匿名函数中的'return function()'作用
2018/10/15 Javascript
Bootstrap 按钮样式与使用代码详解
2018/12/09 Javascript
微信小程序动态添加和删除组件的现实
2020/02/28 Javascript
jquery实现简单每周轮换的日历
2020/09/10 jQuery
浅谈nuxtjs校验登录中间件和混入(mixin)
2020/11/06 Javascript
python 的列表遍历删除实现代码
2020/04/12 Python
python 出现SyntaxError: non-keyword arg after keyword arg错误解决办法
2017/02/14 Python
python cs架构实现简单文件传输
2020/03/20 Python
python使用matplotlib画饼状图
2018/09/25 Python
Python3爬虫教程之利用Python实现发送天气预报邮件
2018/12/16 Python
Python开启线程,在函数中开线程的实例
2019/02/22 Python
Python使用python-docx读写word文档
2019/08/26 Python
docker-py 用Python调用Docker接口的方法
2019/08/30 Python
法拉利英国精品店:Ferraris Boutique UK
2019/07/20 全球购物
Erwin Müller穆勒家居瑞士官网:您整个家庭的邮购公司
2019/12/28 全球购物
如果Session Bean得Remove方法一直都不被调用会怎么样
2012/07/14 面试题
阿德的梦教学反思
2014/02/06 职场文书
2014年导购员工作总结
2014/11/18 职场文书
小学生成绩单评语
2014/12/31 职场文书
会计工作岗位职责
2015/02/03 职场文书
MySQL连接控制插件介绍
2021/09/25 MySQL
CSS子盒子水平和垂直居中的五种方法
2022/07/23 HTML / CSS