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); www.111cn.net $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(empty($data)){ www.111cn.net $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'; } |
首页 index.php:
代码如下 | 复制代码 |
<!DOCTYPE html> |
抓取页面代码 grab.php:
代码如下 | 复制代码 |
<?PHP if(isset($_POST['url'])) { function grab($url) { if(($content = file_get_contents($url)) !== false) { if(isset($_POST['project'])) file_put_contents($_POST['project'].'/'.$file, $content); $pattern = '/<link.*?href=('|")(.*?.css)1.*?>/i'; $pattern = '/<script.*?src=('|")(.*?.js)1.*?>/i'; $pattern = '/<img.*?src=('|")(.*?)1.*?>/i'; $pattern = '/url(('|"|s)(.*?)1)/i'; return $data; www.111cn.net function vardump($obj) { |
保存css,js,img等资源的页面 save.php:
代码如下 | 复制代码 |
<?PHP if(isset($_POST['url']) && isset($_POST['project']) && isset($_POST['domain'])) { if($domain == 'http') { |
使用方法:
1. 打开index页,输入项目名和要抓取的网址,网址必须是文件名结尾,如index.html;
2. 点Get按钮,得到当前页面所有的css,js,img等资源列表;
3. 点击css链接会获取css文件中的背景资源图片,附加在列表后头;
4. 点击Save All即可保存列表中所有的文件,并按相对路径生成;
5. 如果网页上有http远程文件,将会直接保存在http文件夹下;
6. Get和Save有时会失败,没关系重试几次即可。
代码如下 | 复制代码 |
<?php curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); $param['app_id'] = "app_id=x"; $data = "app_id=x&access_token={$access_token['access_token']}&token={$code}&phone=15091421612&url=http://wx.podapi.com/test.php&exp_time=2×tamp={$timestamp}&sign=".$sign; |
因为我登陆了几次,连接速度巨慢,所以我就放弃了。当然留言插件也不胜枚举,比如现在比较火的多说,但对于没有注册多说的朋友,头像仍是个问题。对于多说的社交账号绑定,我测试多次,QQ,人人这些主流平台的绑定经常出错,而且有的朋友(像我)讨厌繁琐的授权。
鉴于此,我在想一个大众化的,比较简单的方法。我想到的是对于没有头像的朋友调用其QQ头像,因为QQ现在至少是人手一个,所以只需要留言时填写QQ号,然后调用其头像。这样一来就方便多了。
首先是获取QQ的头像了,这也是这个想法的第一步,即今天的主题:
第一种方法:
代码如下 | 复制代码 |
<?php |
第二种方法:
代码如下 | 复制代码 |
<?php |
这两种方法的区别:
第一种方法的优点是可以输出头像的原图,如果你的头像是动态的gif,那么输出的也是动态图。缺点是速度比较慢,不适合作为调用头像的方法。
第二种方法的优点是相比第一种速度比较快,但只抓取头像的静态图,不会显示动态头像,比较适合作为调用头像的方法。
在 php 获取图片尺寸的方法我们可以使用 getimagesize 获取图片尺寸的效率是很低的,首先需要获取整个的图片信息,然后再进行操作,下面的例子更科学算法更好,我们一起来看看吧。下方法可以用于快速获取图片尺寸信息
1.获取JPEG格式图片的尺寸信息
代码如下 | 复制代码 |
<?php * 获取JPEG格式图片的尺寸信息,并且不需要下载/读取整个图片。 * 经测试这个函数不是对所有JPEG格式的图片都有效。 * http://www.111cn.net */ // Retrieve JPEG width and height without downloading/reading entire image. function getjpegsize($img_loc) { $block_size = unpack("H*", $new_block[$i] . $new_block[$i+1]); $sof_marker = array("xC0", "xC1", "xC2", "xC3", "xC5", "xC6", "xC7", "xC8", "xC9", "xCA", "xCB", "xCD", "xCE", "xCF"); $size_data = $new_block[$i+2] . $new_block[$i+3] . $new_block[$i+4] . $new_block[$i+5] . $new_block[$i+6] . $new_block[$i+7] . $new_block[$i+8]; $i += 2; |
2.
代码如下 | 复制代码 |
$url='http://www.111cn.net /images/201203/08/1331189004_28093400.jpg'; |
相关文章
- 这篇文章主要介绍了Python 图片转数组,二进制互转操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-09
- 这篇文章主要介绍了C# 16 进制字符串转 int的方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下...2020-06-25
- 在串口通讯过程中,经常要用到 16进制与字符串、字节数组之间的转换...2020-06-25
- c#下进制互转代码...2020-06-25
- <?php教程 /** *十进制转二进制、八进制、十六进制 不足位数前面补零* * * @param array $datalist 传入数据array(100,123,130) * @param int $bin 转换的...2016-11-25
- 这篇文章主要介绍了C#十六进制字符串转十进制int的方法,涉及C#操作数制转换的技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
- 下面小编就为大家带来一篇protobuf对象二进制序列化存储(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
php颜色转换函数hex-rgb(将十六进制格式转成十进制格式)
复制代码 代码如下:<?php function hex2rgb($colour) { if ($colour [0] == '#') { $colour = substr ( $colour, 1 ); } if (strlen ( $colour ) == 6) { list ( $r, $g,...2013-10-04- 这篇文章主要给大家介绍了C++中输出十六进制形式的字符串,文中给出了详细的介绍,有需要的朋友可以参考借鉴,下面来一起看看吧。...2020-04-25
- 这篇文章主要介绍了javascript常见数字进制转换,结合实例形式分析了JavaScript十进制,十六进制及二进制的相互转换原理与技巧,需要的朋友可以参考下...2016-04-23
- 这篇文章主要介绍了汇编语言进制转换之16进制转10进制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-08-16
- 在当前目录创建一个文件myfile.txt,对该文件具有读写权限...2020-06-25
- 这篇文章主要介绍了C#中图片、二进制与字符串的相互转换方法,涉及C#针对不同数据类型的解析与转换操作技巧,需要的朋友可以参考下...2020-06-25
- 这篇文章主要介绍了Python如何读写二进制数组数据,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下...2020-08-02
- 这篇文章介绍了C++ 十进制转换为二进制的实例代码,有需要的朋友可以参考一下...2020-04-25
- 这篇文章主要介绍了C#实现的基于二进制读写文件操作,结合具体实例形式分析了C#以二进制文件流形式针对文件进行读写操作的相关技巧,需要的朋友可以参考下...2020-06-25
- 这篇文章主要介绍了详解C++中十六进制字符串转数字(数值)的相关资料,这里提供两种实现方法,需要的朋友可以参考下...2020-04-25
- #中十六进制字符串的转换函数...2020-06-25
- 这篇文章主要介绍了C++二进制翻转,通过几个实例分析二进制翻转算法的实现技巧,需要的朋友可以参考下...2020-04-25
- 这篇文章主要介绍了C语言用栈实现十进制转换为二进制的方法,结合实例形式分析了C语言栈的定义及进制转换使用技巧,需要的朋友可以参考下...2020-04-25