php二进制流转bmp图片,php图片的二进制转换实例
這里我們是在上傳文件時(shí)把上傳的文件轉(zhuǎn)換成二進(jìn)制然后保存到數(shù)據(jù)的字段中去,下次讀讀出我們也用同樣的方法顯示即可.
html,代碼如下:
將圖片保存到數(shù)據(jù)庫,代碼如下:
//由于上傳過來的圖片被保存在一個(gè)臨時(shí)文件中,所以
//我們僅需要讀取該文件就可以獲取傳過來的圖片
$fp=fopen($_FILES["myFile"]["tmp_name"],”rb”);
$buf=addslashes(fread($fp,$_FILES["myFile"]["size"]));
//創(chuàng)建一個(gè)PDO對象
$dbh=newPDO(“mysql:host=localhost;port=
3306;dbname=test”,?“root”,?“123456″);
//執(zhí)行插入操作并將結(jié)果保存在一個(gè)變量中
$result=$dbh->query(“INSERT?INTO?img?(images)?VALUES?(‘$buf’)”);
//獲取影響的行數(shù)
if($result->rowCount()?>0)?{
echo(“數(shù)據(jù)已插入?!?;
}?else{
echo(“不能執(zhí)行插入操作?!?;
}
//顯式的關(guān)閉PDO連接
$dbh=?NULL;
?>
顯示圖片,show.php,代碼如下:
$conn=@mysql_connect(“l(fā)ocalhost”,”root”,”123456″)ordie(“服務(wù)器連接錯(cuò)誤!”);//鏈接數(shù)據(jù)庫
@mysql_select_db(“test”,$conn)ordie(“未發(fā)現(xiàn)數(shù)據(jù)庫!”);
$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;
?>
或者,代碼如下:
1、fopen函數(shù).
fopen()函數(shù)用于打開文件或者URL,語法如下:
int fopen(string filename, string mode);
字符串參數(shù)mode可以是下列的情形:
“r”開文件方式為只讀,文件指針指到開始處.
“r+”開文件方式為可讀寫,文件指針指到開始處。
“w”開文件方式為寫入,文件指針指到開始處,并將原文件的長度設(shè)為0。若文件不存在,則建立新文件。
“w+”開文件方式為可讀寫,文件指針指到開始處,并將原文件的長度設(shè)為0。若文件不存在,則建立新文件。
“a”開文件方式為寫入,文件指針指到文件最后。若文件不存在,則建立新文件。
“a+”開文件方式為可讀寫,文件指針指到文件最后。若文件不存在,則建立新文件。
“b”若操作系統(tǒng)的文字及二進(jìn)位文件不同,則可以用此參數(shù),UNIX系統(tǒng)不需要使用本參數(shù)。
2、Addslashes函數(shù)
Addslashes函數(shù)用于將字符串加入斜線,語法如下,注:我測試的時(shí)候是把這個(gè)函數(shù)去掉后成功了,道理你懂的,自己試下就明白了.
string addslashes(string str);
該函數(shù)使需要讓數(shù)據(jù)庫處理的字符串,引號的部份加上斜線,以供數(shù)據(jù)庫查詢(query)能順利運(yùn)作,這些會被改的字符包括單引號(’)、雙引號(”)、反斜線backslash()以及空字符NULL(the null byte).
3、fread函數(shù)
fread函數(shù)用于讀到指定長度的位組或到文件尾EOF,語法如下:
string fread(int fp, int length);可安全用于二進(jìn)制文件
fread() 從文件指針 file 讀取最多 length 個(gè)字節(jié),該函數(shù)在讀取完最多 length 個(gè)字節(jié)數(shù),或到達(dá) EOF 的時(shí)候,或(對于網(wǎng)絡(luò)流)當(dāng)一個(gè)包可用時(shí),或(在打開用戶空間流之后)已讀取了 8192 個(gè)字節(jié)時(shí)就會停止讀取文件,視乎先碰到哪種情況.
二進(jìn)制轉(zhuǎn)換成圖片
注:$newFilePath 對生成的圖片名和路徑做處理,這里自己去實(shí)現(xiàn),代碼如下:
$newFilePath='1.jpg';
$data=$GLOBALS[HTTP_RAW_POST_DATA];//得到post過來的二進(jìn)制原始數(shù)據(jù)
if(emptyempty($data)){
$data=file_get_contents("php://input");
}
$newFile=fopen($newFilePath,"w");//打開文件準(zhǔn)備寫入
fwrite($newFile,$data);//寫入二進(jìn)制流到文件
fclose($newFile);//關(guān)閉文件
可以把讀取到的二進(jìn)制流存到數(shù)據(jù)庫,也可以直接寫入成一個(gè)圖片,獲取二進(jìn)制頭文件,從而得知屬于什么類型文件,代碼如下:
$bin=substr($content,0,2);
$strInfo=?@unpack("C2chars",$bin);
$typeCode=intval($strInfo['chars1'].$strInfo['chars2']);
$fileType='';//開源代碼phpfensi.com
switch($typeCode)
{
case7790:
$fileType='exe';
break;
case7784:
$fileType='midi';
break;
case8297:
$fileType='rar';
break;
case255216:
$fileType='jpg';
break;
case7173:
$fileType='gif';
break;
case6677:
$fileType='bmp';
break;
case13780:
$fileType='png';
break;
default:
echo'unknown';
}
總結(jié)
以上是生活随笔為你收集整理的php二进制流转bmp图片,php图片的二进制转换实例的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 长安欧尚x5豪华型可以安装高配车机总成吗
- 下一篇: 汽车压缩机电磁阀坏了会造成制冷剂不足吗?