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

 更新时间:2014年12月15日 12:19:48   投稿:shichen2014   我要评论
这篇文章主要介绍了php图片的二进制转换实现方法,详细介绍了图片与二进制之间转换的原理与实现技巧,非常具有实用价值,需要的朋友可以参考下

本文实例讲述了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数组式访问接口ArrayAccess用法分析

    PHP数组式访问接口ArrayAccess用法分析

    这篇文章主要介绍了PHP数组式访问接口ArrayAccess用法,结合实例形式分析了数组式访问接口ArrayAccess的概念、功能、实现与使用方法,需要的朋友可以参考下
    2017-12-12
  • PHP简单读取PDF页数的实现方法

    PHP简单读取PDF页数的实现方法

    这篇文章主要介绍了PHP简单读取PDF页数的实现方法,涉及php针对文件的读取及正则运算等相关操作技巧,需要的朋友可以参考下
    2016-07-07
  • php强制下载文件函数

    php强制下载文件函数

    这篇文章主要为大家详细介绍了php强制下载文件函数,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-08-08
  • php加密之discuz内容经典加密方式实例详解

    php加密之discuz内容经典加密方式实例详解

    这篇文章主要介绍了php加密之discuz内容经典加密方式,结合具体实例形式详细分析了discuz加密的使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2017-02-02
  • php设计模式 Adapter(适配器模式)

    php设计模式 Adapter(适配器模式)

    将一个类的接口转换成客户希望的另外一个接口,使用原本不兼容的而不能在一起工作的那些类可以在一起工作
    2011-06-06
  • 利用php绘制饼状图的实现代码

    利用php绘制饼状图的实现代码

    本篇文章是对使用php绘制饼状图的方法进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • PHP标准类(stdclass)用法示例

    PHP标准类(stdclass)用法示例

    这篇文章主要介绍了PHP标准类(stdclass)用法,结合实例形式分析了php内置标准类的原理与使用方法,需要的朋友可以参考下
    2016-09-09
  • php针对cookie操作的队列操作类实例

    php针对cookie操作的队列操作类实例

    这篇文章主要介绍了php针对cookie操作的队列操作类,以实例形式分析了设置cookie的常见方法,以及队列操作cookie的方法,最后给出了针对常见问题的总结,需要的朋友可以参考下
    2014-12-12
  • thinkphp查询,3.X 5.0方法(亲试可行)

    thinkphp查询,3.X 5.0方法(亲试可行)

    下面小编就为大家带来一篇thinkphp查询,3.X 5.0方法(亲试可行)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06
  • 解析file_get_contents模仿浏览器头(user_agent)获取数据

    解析file_get_contents模仿浏览器头(user_agent)获取数据

    本篇文章是对file_get_contents模仿浏览器头(user_agent)获取数据进行了详细的分析介绍,需要的朋友参考下
    2013-06-06

最新评论