溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

怎么在php項(xiàng)目中對(duì)圖片進(jìn)行二進(jìn)制轉(zhuǎn)換

發(fā)布時(shí)間:2020-12-15 16:33:40 來源:億速云 閱讀:138 作者:Leah 欄目:開發(fā)技術(shù)

這篇文章將為大家詳細(xì)講解有關(guān)怎么在php項(xiàng)目中對(duì)圖片進(jìn)行二進(jìn)制轉(zhuǎn)換,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。

具體實(shí)現(xiàn)方法如下:

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>

將圖片保存到數(shù)據(jù)庫,代碼如下:

<?php 
//由于上傳過來的圖片被保存在一個(gè)臨時(shí)文件中,所以 
//我們僅需要讀取該文件就可以獲取傳過來的圖片 
$fp = fopen($_FILES["myFile"]["tmp_name"],"rb"); 
$buf = addslashes(fread($fp,$_FILES["myFile"]["size"])); 
//創(chuàng)建一個(gè)PDO對(duì)象 
$dbh = new PDO("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,代碼如下:

<?php 
$conn=@mysql_connect("localhost","root","123456″) or die("服務(wù)器連接錯(cuò)誤!"); //鏈接數(shù)據(jù)庫 
@mysql_select_db("test",$conn) or die("未發(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; 
?>

或者,代碼如下:

<img src="show.php?id=5″ />

補(bǔ)充:

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ù)庫處理的字符串,引號(hào)的部份加上斜線,以供數(shù)據(jù)庫查詢(query)能順利運(yùn)作,這些會(huì)被改的字符包括單引號(hào)(')、雙引號(hào)(")、反斜線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í)候,或(對(duì)于網(wǎng)絡(luò)流)當(dāng)一個(gè)包可用時(shí),或(在打開用戶空間流之后)已讀取了 8192 個(gè)字節(jié)時(shí)就會(huì)停止讀取文件,視乎先碰到哪種情況.

二進(jìn)制轉(zhuǎn)換成圖片

注:$newFilePath 對(duì)生成的圖片名和路徑做處理,這里自己去實(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 = '';
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';
}

關(guān)于怎么在php項(xiàng)目中對(duì)圖片進(jìn)行二進(jìn)制轉(zhuǎn)換就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI