phpapi圖片
『壹』 php中GD庫是做什麼用的
GD庫,是php處理圖形的擴展庫,GD庫提供了一系列用來處理圖片的API,使用GD庫可以處理圖片,或者生成圖片。
在網站上GD庫通常用來生成縮略圖,或者用來對圖片加水印,或者用來生成漢字驗證碼,或者對網站數據生成報表等。在PHP處理圖像,可使用GD庫,而GD庫開始時是支持GIF的,但由於GIF使用了有版權爭議的LZW演算法,會引起法律問題,於是從 GD 庫 1.6 版起所有的 GIF 支持都移除了,但是又在 GD 庫 2.0.28 版起又加了回來。如果使用二者之間版本的 GD 庫時 GIF 相關函數不可用。
安裝與配置
編輯
如果是 win 的伺服器,比較簡單,步驟如下:
1. 用dos命令(也可以手動操作,拷貝dlls文件夾里所有dll文件到system32目錄下) c:phpdlls*.dll c:windowssystem32
2. 打開php.ini
設置extension_dir = "c:/php/extensions/";
3. 在「;extension=php_gd2.dll」一行,把extension前面的分號去掉,如果沒有php_gd2.dll,php_gd.dll也一樣,保證確實存在這一文件c:/php/extensions/php_gd2.dll.
linux伺服器上配置方法:
yum install php-gd* #適用於32bit操作系統安裝命令;
yum install php-gd.x86_64 #適用於64bit操作系統安裝命令;
『貳』 如何在PHP中開啟GD庫支持詳解
開啟GD庫是php中一個重要的參數,常用來處理圖像,像圖片的任何處理都需要GD庫的支持,下面我來介紹各種系統中GD庫的開啟方法與命令,大家可參考。
Windows下開啟PHP的GD庫支持
找到php.ini,打開內容,找到:
;extension=php_gd2.dll
把最前面的分號「;」去掉,再保存即可,如果本來就沒有分號,那就是已經開啟了。
Linux下開啟PHP的GD庫支持
#開啟GD庫支持有以下幾種方法
##檢測GD庫是否安裝命令
php5 -m | grep -i gd
或者
php -i | grep -i --color gd
##如未安裝GD庫,則為伺服器安裝,方法如下
### 如果是源碼安裝,則加入參數
--with-gd
### 如果是debian系的linux系統,用apt-get安裝,如下
apt-get install php5-gd
### 如果是CentOS系的系統,用yum安裝,如下
yum install php-gd
### 如果是suse系的linux系統,用yast安裝,如下
yast -i php5_gd
### 如果嫌這個世界不夠蛋疼呢,可以在原先編譯PHP不支持GD的情況下附加
先下zlib源碼,libpng源碼,gd源碼
解壓後到源碼目錄
zlib目錄
./configure --prefix=/usr/local/zlib
make ; make install
make clean
libpng目錄
cp scripts/makefile.linux ./makefile
./configure --prefix=/usr/local/libpng
make ; make install
make clean
gd目錄
./configure --prefix=/usr/local/libgd --with-png=/usr/local/libpng
make ; make install
make clean
最後在php.ini中,搜到[gd]後,在下面加一行
extension=/usr/local/libgdgd.so
然後重啟php服務,如果不行,試試reboot
好了,不過最後提醒一下,要知道這個世界很多意外的,源碼安裝,只添加gd庫這一個情況下,PHP版本和庫的版本各異
,所以:
- 不保證這么付出了這么多後有回報
- 不保證能夠成功載入gd.so
- 不保證不懷孕
所以如果是源碼安裝,最好還是在編譯PHP的時候加參數--with-gd
GD庫函數
GetImageSize
作用:取得圖片的大小[即長與寬] 用法:array GetImageSize(string filename, array [imageinfo]);
ImageArc
作用:畫弧線 用法:int ImageArc(int im, int cx, int cy, int w, int h, int s, int e, int col);
ImageChar
作用:寫出橫向字元 用法:int ImageChar(int im, int font, int x, int y, string c, int col);
ImageCharUp
作用:寫出豎式字元 用法:int ImageCharup(int im, int font, int x, int y, string c, int col);
ImageColorAllocate
作用:匹配顏色 用法:int ImageColorAllocate(int im, int red, int green, int blue);
ImageColorTransparent
作用:指定透明背景色 用法:int ImageColorTransparent(int im, int [col]);
ImageCopyResized
作用:復制新圖並調整大小 用法:int ImageCopyResized(int dst_im, int src_im, int dstX, int dstY, int srcX,
int srcY, int dstW, int dstH, int srcW, int srcH);
ImageCreate
作用:建立新圖 用法:int ImageCreate(int x_size, int y_size);
ImageDashedLine
作用:繪虛線 用法:int ImageDashedLine(int im, int x1, int y1, int x2, int y2, int col);
ImageDestroy 作用:結束圖形 用法解釋:int ImageDestroy(int im);
ImageFill
作用:圖形著色 用法:int ImageFill(int im, int x, int y, int col);
ImageFilledPolygon作用:多邊形區域著色 用法:int ImageFilledPolygon(int im, array points, int num_points,
int col);
ImageFilledRectangle作用:矩形區域著色 用法:int ImageFilledRectangle(int im, int x1, int y1, int x2, int
y2, int col);
ImageFillToBorder作用:指定顏色區域內著色 用法:int ImageFillToBorder(int im, int x, int y, int border,
int col);
ImageFontHeight
作用:取得字型的高度 用法:int ImageFontHeight(int font);
ImageFontWidth作用:取得字型的寬度 用法:int ImageFontWidth(int font);
ImageInterlace作用:使用交錯式顯示與否 用法:int ImageInterlace(int im, int [interlace]);
ImageLine作用:繪實線 用法:int ImageLine(int im, int x1, int y1, int x2, int y2, int col);
ImageLoadFont作用:載入點陣字型 用法:int ImageLoadFont(string file);
ImagePolygon作用:繪多邊形 用法:int ImagePolygon(int im, array points, int num_points, int col);
ImageRectangle作用:繪矩形 用法:int ImageRectangle(int im, int x1, int y1, int x2, int y2, int col);
ImageSetPixel作用:繪點 用法:int ImageSetPixel(int im, int x, int y, int col); ImageString 作用:繪橫式
字元串 用法:int ImageString(int im, int font, int x, int y, string s, int col);
ImageStringUp作用:繪直式字元串 用法:int ImageStringUp(int im, int font, int x, int y, string s, int
col);
ImageSX
作用:取得圖片的寬度 用法:int ImageSX(int im);
ImageSY
作用:取得圖片的高度 用法:int ImageSY(int im);
ImageTTFBBox
作用:計算 TTF 文字所佔區域 用法:array ImageTTFBBox(int size, int angle, string fontfile, string text);
ImageTTFText作用:寫 TTF 文字到圖中 用法:array ImageTTFText(int im, int size, int angle, int x, int y,
int col, string fontfile, string text); ImageColorAt 作用:取得圖中指定點顏色的索引值 用法:int
ImageColorAt(int im, int x, int y);
ImageColorClosest
作用:計算色表中與指定顏色最接近者 用法:int ImageColorClosest(int im, int red, int green, int blue);
ImageColorExact
作用:計算色表上指定顏色索引值 用法:int ImageColorExact(int im, int red, int green, int blue);
ImageColorResolve
作用:計算色表上指定或最接近顏色的索引值 用法:int ImageColorResolve(int im, int red, int green, int
blue);
ImageColorSet
作用:設定色表上指定索引的顏色 用法:boolean ImageColorSet(int im, int index, int red, int green, int
blue); ImageColorsForIndex 作用:取得色表上指定索引的顏色 用法:array ImageColorsForIndex(int im, int
index);
ImageColorsTotal
作用:計算圖的顏色數 用法:int ImageColorsTotal(int im); ImagePSLoadFont 作用:載入 PostScript 字型 用法
:int ImagePSLoadFont(string filename);
ImagePSFreeFont
作用:卸下 PostScript 字型 用法:void ImagePSFreeFont(int fontindex);
ImagePSEncodeFont
作用:PostScript 字型轉成向量字 用法:int ImagePSEncodeFont(string encodingfile);
ImagePSText作用:寫 PostScript 文字到圖中 用法:array ImagePSText(int image, string text, int font, int
size, int foreground, int background, int x, int y, int space, int tightness, float angle, int
antialias_steps);
ImagePSBBox作用:計算 PostScript 文字所佔區域 用法: array ImagePSBBox(string text, int font, int size,
int space, int width, float angle);
ImageCreateFromPNG作用:取出 PNG 圖型 用法:int ImageCreateFromPng(string filename);
ImagePNG作用:建立 PNG 圖型 用法:int ImagePng(int im, string [filename]);
ImageCreateFromGIF作用:取出 GIF 圖型 用法:int ImageCreateFromGif(string filename);
ImageGIF作用:建立 GIF 圖型 用法:int ImageGif(int im, string [filename]);
『叄』 php表單上傳圖片到七牛雲存儲並返回地址……求具體流程~有代碼更好
有的,我最近研究了一下,寫了一篇記錄,如下
原文地址:http://cuiqingcai.com/?p=157
網上關於七牛雲存儲的教程除了官網上的API文檔,其他的資料太少了。研究了下API之後,現在已經能實現圖片的上傳和下載及上傳之後的重定向。
首先本篇文章實現的功能如下:
1.利用表單上傳功能,用戶可以點擊選擇文件按鈕,選擇本地的一個文件,同時設定上傳的圖片的名稱,點擊上傳按鈕可以上傳並存儲到七牛雲存儲。
2.在點擊上傳時會檢測文件的後綴名,限制為jpg和png格式存儲。
3.上傳成功後跳轉到自己設定的一個URL,並傳迴文件信息,如文件名。而不是顯示七牛白花花的json顯示頁面。
好啦,那我們開始吧,首先我們要有一個七牛雲存儲賬號,如果沒有的就自己去申請吧。
七牛雲存儲傳送門:http://www.qiniu.com/
一.SDK下載
https://github.com/qiniu/php-sdk/tags
戳這個網址下載一下SDK吧,裡面封裝了文件上傳下載等等的方法,我們引入之後可以直接調用。
SDK之中有一個qiniu的文件夾,這是所有的SDK實貨,這個是最重要的。我們首先要把這個文件夾及裡面的文件放到項目文件夾中,比如我放到這里。
大家可以看到有一個qiniu文件夾。好啦,資源支持就是這樣。接下來我們要實現代碼咯。
二.文件的上傳。
1.首先把你七牛雲存儲的密鑰照出來,點擊賬號設置可以看到有一個AccessKey和SecretKey,留著備用。
2.上傳憑證生成。
在這里我們首先要引入rs.php文件,自己找一對應路徑,代碼如下:
require_once(dirname(__FILE__)."/../../qiniu/rs.php");
dirname()是指的絕對路徑,有時相對路徑會出現問題,建議在前面加上dirname方法獲取絕對路徑。
require_once是引入文件,表示該文件只引入一次。
然後,傳入你的AccessKey和SecretKey
代碼如下:
$accessKey='';//換成你自己的密鑰
$secretKey='';//換成你自己的密鑰
Qiniu_SetKeys($accessKey, $secretKey);
然後建一個上傳策略對象,將你的bucket傳入,bucket 就是你的空間名。
$bucket = 'designpartners';
$putPolicy = new Qiniu_RS_PutPolicy($bucket);
然後調用此方法來生成上傳憑證。
$upToken = $putPolicy->Token(null);
接下來就寫一個html表單
<formmethod="post"action="http://up.qiniu.com"name="form"enctype="multipart/form-data">
<ul>
<inputtype="hidden"id="token"name="token"value=<?phpecho$upToken?>>
<li>
<labelfor="key">key:</label>
<inputname="key"value="">
</li>
<li>
<labelfor="bucket">照片:</label>
<inputname="file"type="file"/>
</li>
<li>
<inputtype="submit"value="提交">
</li>
</ul>
</form>
action就填寫up.qiniu.com,表單提供了一個輸入框key,用來輸入你想保存的圖片名稱,上傳到七牛之後就是這個名字。
然後一個文件選擇,一個提交按鈕。運行結果如下:
輸入key值和選擇照片即可實現照片的上傳。哈哈哈有沒有很簡單。
三、文件下載
原理和文件上傳功能相仿。
引入文件
require_once(dirname(__FILE__)."/../../qiniu/rs.php");
聲明你的七牛雲存儲域名和兩個密鑰以及向下載的文件名稱
$key='00000';
$domain='designpartners.qiniudn.com';
$accessKey='';
$secretKey='';
注意:1.key值即為文件名,不要加後綴
2.domain即為bucket加上qiniudn.com,例子中的designpartners就是我在上傳圖片時用的bucket名。
3.accessKey和secretKey換成你自己的,直接用我的不行的..因為我修改了.
Qiniu_SetKeys($accessKey,$secretKey);
$baseUrl=Qiniu_RS_MakeBaseUrl($domain,$key);
$getPolicy=newQiniu_RS_GetPolicy();
$privateUrl=$getPolicy->MakeRequest($baseUrl,null);
echo$privateUrl." ";
傳入這四個值即可生成一樣url,直接訪問url即可實現圖片的下載。
在引入圖片時直接
<img src = "<?php echo $privateUrl; ?>"/>
即可引入圖片咯,很簡單的吧。
四、303重定向
在上面的方法中,我們上傳圖片成功後跳轉到up.qiniu.com下,會顯示白白的網頁,顯示一個json字元串,但是在實際網站開發中我們肯定 不能讓用戶看到這種網頁,所以我們用到了303跳轉。SDK中也為我們封裝了這個方法。使用其實非常簡單。在上傳文件的代碼中添加兩行代碼即可
$putPolicy=newQiniu_RS_PutPolicy($bucket);
$putPolicy->ReturnUrl=site_url()."/upload/receiveInfo";
$putPolicy->ReturnBody='{"key":$(key)}';
注意:1.ReturnUrl和ReturnBody必須指定,並且首字母要大寫,很多人都小寫開頭,這樣會跳轉不成功。
2.ReturnUrl必須是一個公網可以訪問的網址,在本地測試是不可能通過的。比如你寫成localhost,七牛伺服器是定位不到的。
3.這個ReturnUrl的鏈接後會跟著一個?upload_ret=XXX,可以用get方法獲取這個upload_ret。upload_ret的內容是base64安全編碼的json形式的key值。
值的解析:比如我上傳的文件名是555
upload/receiveInfo?upload_ret=eyJrZXkiOiAiNTU1In0=
網址後綴如上所示,把那個upload_ret復制下來,用base64解碼可以出現如下結果:
{"key": "555"}
所以,我們要獲取555這個值的代碼如下,即解析代碼如下:
$upload_ret=$_GET['upload_ret'];
$json_ret=base64_decode($upload_ret);
$result=json_decode($json_ret);
echo"key".$result->key;
好啦,獲取到這個key值之後,你可以選擇存到資料庫或者進行其他的操作咯。
五、上傳前文件類型的驗證
我們可以用js來驗證文件的後綴名,
在form的屬性里加上
onsubmit="return isValidateFile('file');"
加上一個js方法
<script>
functionisValidateFile(obj){
varextend=document.form.file.value.substring(document.form.file.value.lastIndexOf(".")+1);
if(extend==""){
alert("請選擇頭像");
returnfalse;
}
else{
if(!(extend=="jpg"||extend=="png")){
alert("請上傳後綴名為jpg或png的文件!");
returnfalse;
}
}
returntrue;
}
</script>
即可驗證它的類型是否合法。
附:CI代碼實現:
獲取Uptoken:
functiongetUptoken(){
require_once(dirname(__FILE__)."/../../qiniu/rs.php");
//遠程存儲空間名稱
$bucket='designpartners';
$accessKey='';
$secretKey='';
Qiniu_SetKeys($accessKey,$secretKey);
$putPolicy=newQiniu_RS_PutPolicy($bucket);
echosite_url();
$putPolicy->ReturnUrl=site_url()."/upload/receiveInfo";
$putPolicy->ReturnBody='{"key":$(key)}';
$upToken=$putPolicy->Token(null);
return$upToken;
}
文件上傳:
publicfunctionuploadPic(){
$upToken=$this->getUptoken();
$data['upToken']=$upToken;
$this->load->view('upload',$data);
}
303重定向解析:
publicfunctionreceiveInfo(){
$upload_ret=$_GET['upload_ret'];
$json_ret=base64_decode($upload_ret);
$result=json_decode($json_ret);
echo"key".$result->key;
}
文件下載:
publicfunctiondownloadPic(){
require_once(dirname(__FILE__)."/../../qiniu/rs.php");
$key='00000';
$domain='designpartners.qiniudn.com';
$accessKey='';
$secretKey='';
Qiniu_SetKeys($accessKey,$secretKey);
$baseUrl=Qiniu_RS_MakeBaseUrl($domain,$key);
$getPolicy=newQiniu_RS_GetPolicy();
$privateUrl=$getPolicy->MakeRequest($baseUrl,null);
echo"====>getPolicyresult: ";
echo$privateUrl." ";
}
表單:
<script>
functionisValidateFile(obj){
varextend=document.form.file.value.substring(document.form.file.value.lastIndexOf(".")+1);
if(extend==""){
alert("請選擇頭像");
returnfalse;
}
else{
if(!(extend=="jpg"||extend=="png")){
alert("請上傳後綴名為jpg或png的文件!");
returnfalse;
}
}
returntrue;
}
</script>
<formmethod="post"action="http://up.qiniu.com"name="form"enctype="multipart/form-data"onsubmit="returnisValidateFile('file');">
<ul>
<inputtype="hidden"id="token"name="token"value=<?phpecho$upToken?>>
<li>
<labelfor="key">key:</label>
<inputname="key"value="">
</li>
<li>
<labelfor="bucket">照片:</label>
<inputname="file"type="file"/>
</li>
<li>
<inputtype="submit"value="提交">
</li>
</ul>
</form>