[TOC]
>[success]PHP很強大可以輕松快捷的處理多種數據格式,在圖像處理上也擁有 強大而且簡單的實現方式
PHP處理圖像需要擴展庫GD庫的支持
可以通過PHPINFO()函數查看GD庫是否開啟,如果沒有開啟在 PHP.INI中開啟
檢測擴展庫是否加載:
~~~
extension_loaded("GD")
~~~
## 圖像處理步驟
1. 發送HTTP頭文件,聲明內容為圖像
2. 創建畫布
3. 創建繪圖所需要的顏色
4. 繪圖(填充畫布、畫圓、畫方塊、畫線條、畫布上寫字)
5. 輸出圖像
6. 釋放圖像資源
### 發送HTTP頭文件
發送圖像文件給瀏覽器,我們首先需要告訴Web瀏覽器我們輸出的是一 個圖像而不是文本或HTML。這可以通過調用header()函數指定圖像的 MIME類型輸出完成。
~~~
<?php
header("Content-type: image/gif");
header("Content-type: image/gif");
header("Content-type: image/jpeg");
header("Content-type: image/png");
?>
~~~
### 創建畫布
~~~
<?php
$src = imageCreateTrueColor(200,100);
?>
~~~
傳入的兩個參數分別為畫布的寬和高,在繪圖時超出寬高的部分將 不予顯示,且此尺寸即為生成圖片文件時的尺寸。返回值為資源類型。
### 設置顏色
~~~
<?php
$color = imageColorAllocate($src,255,255,255);
?>
~~~
顏色從屬于某個圖像資源而存在。顏色實際上是一個整形數值。顏色的后三個參數需傳入值的范圍是0~255,返回布爾值。
### 填充顏色
~~~
<?php
imageFill($src,0,0,$color);
?>
~~~
### 繪制空心矩形
~~~
bool imagerectangle ( resource $image , int $x1 , int $y1 , int $x2 , int $y2 , int $col )
~~~
imagerectangle() 用 col 顏色在 image 圖像中畫一個矩形,其左上角坐標為 x1, y1,右下角坐標為 x2, y2。圖像的左上角坐標為 0, 0。
### 繪制實心矩形
~~~
bool imagefilledrectangle ( resource $image , int $x1 , int $y1 , int $x2 , int $y2 , int $color )
~~~
imagefilledrectangle() 在 image 圖像中畫一個用 color 顏色填充了的矩形,其左上角坐標為 x1,y1,右下角坐標為 x2,y2。0, 0 是圖像的最左上角。
### 繪制空心圓形
~~~
bool imageellipse ( resource $image , int $cx , int $cy , int $width , int $height , int $color )
~~~
在指定的坐標上畫一個橢圓。
### 繪制實心圓
~~~
bool imagefilledellipse ( resource $image , int $cx , int $cy , int $width , int $height , int $color )
~~~
畫一橢圓并填充到指定的 image。
### 繪制線條
~~~
bool imageline ( resource $image , int $x1 , int $y1 , int $x2 , int $y2 , int $color )
~~~
imageline() 用 color 顏色在圖像 image 中從坐標 x1,y1 到 x2,y2(圖像左上角為 0, 0)畫一條線段
### 繪制單一像素
~~~
bool imagesetpixel ( resource $image , int $x , int $y , int $color )
~~~
imagesetpixel() 在 image 圖像中用 color 顏色在 x,y 坐標(圖像左上角為 0,0)上畫一個點。
### 用特殊字體輸入文本
~~~
array imagettftext ( resource $image , float $size , float $angle , int $x , int $y , int $color , string $fontfile , string $text )
~~~
使用 TrueType 字體將 指定的 text 寫入圖像。
### 輸出圖像
~~~
<?php
//輸出不同格式的圖像用不同的方法:
imagegif(img_resource[,filename]);
imagejpeg(img_resource[,filename]);
imagepng(img_resource[,filename]);
imagebmp(img_resource[,filename]);
//第二個可選參數為文件名時,文件被另存同名會覆蓋
?>
~~~
### 釋放圖像資源
~~~
<?php
imageDestroy(img_resource)
//圖像輸出完畢及時釋放資源,把內存空間留給更需要的程序。
?>
~~~
## 操作已有圖像
通過我們需要對圖片進行剪切,加水印,縮放等。
### 打開外部圖像
~~~
<?php
imageCreateFromgd(filename/url);
imageCreateFromgif(filename/url);
imageCreateFromjpeg(filename/url);
imageCreateFrompng(filename/url);
imageCreateFrombmp(filename/url);
//返回一個資源類型
?>
~~~
### 獲得圖像信息
~~~
<?php
imagesx(img_resource)//取得圖像寬度
imagesy(img_resource)//取得圖像高度
getimagesize(img_file)//取得圖像詳細信息,數組形式
?>
~~~
### 拷貝圖像的一部分
~~~
bool imagecopy ( resource $dst_im , resource $src_im , int $dst_x , int $dst_y , int $src_x , int $src_y , int $src_w , int $src_h )
~~~
將 src_im 圖像中坐標從 src_x,src_y 開始,寬度為 src_w,高度為 src_h 的一部分拷貝到 dst_im 圖像中坐標為 dst_x 和 dst_y 的位置上。
### 拷貝并合并圖像的一部分
~~~
bool imagecopymerge ( resource $dst_im , resource $src_im , int $dst_x , int $dst_y , int $src_x , int $src_y , int $src_w , int $src_h , int $pct )
~~~
將 src_im 圖像中坐標從 src_x,src_y 開始,寬度為 src_w,高度為 src_h 的一部分拷貝到 dst_im 圖像中坐標為 dst_x 和 dst_y 的位置上。兩圖像將根據 pct 來決定合并程度,其值范圍從 0 到 100。當 pct = 0 時,實際上什么也沒做,當為 100 時對于調色板圖像本函數和 imagecopy() 完全一樣,它對真彩色圖像實現了 alpha 透明。
### 拷貝部分圖像并調整大小
~~~
bool imagecopyresized ( resource $dst_image , resource $src_image , int $dst_x , int $dst_y , int $src_x , int $src_y , int $dst_w , int $dst_h , int $src_w , int $src_h )
~~~
imagecopyresized() 將一幅圖像中的一塊矩形區域拷貝到另一個圖像中。dst_image 和 src_image 分別是目標圖像和源圖像的標識符。
>[danger] 練習:創建網站驗證碼類。
- 序言
- 第一章:準備工作
- 寫在學習之前的話
- web應用開發結構
- 開發工具/環境
- 第二章:展現層面(HTML/CSS)
- HTML簡介
- HTML基礎
- HTML編碼
- HTML鏈接
- HTML圖像
- HTML列表
- HTML表單
- HTML表格(分水嶺)
- HTML 實體
- HTML框架
- CSS層疊樣式表
- CSS選擇器
- CSS文本/字體
- CSS繼承和疊加
- CSS框模型
- CSS浮動(分水嶺)
- CSS定位
- CSS背景
- CSS圖標字體
- CSS補充
- 開發技巧
- 第三章:展現層面(Javascript)
- JS簡介
- JS實現
- JS輸出交互
- JS變量
- JS數據類型
- JS運算符
- JS流程控制(分水嶺)
- JS函數
- JS數組
- JS對象(分水嶺)
- JS數組對象
- JS字符串對象
- JS數學對象
- JS日期對象
- JS BOM對象(分水嶺)
- JS DOM對象
- JS事件對象
- JS元素對象
- JS DOM節點
- 第四章:展現層面(Jquery)
- JQ簡介
- JQ使用
- JQ選擇器
- JQ篩選
- JQ屬性
- JQ-CSS
- JQ事件
- JQ文檔處理
- JQ效果
- JQ-ajax
- 第五章:邏輯/業務層面(PHP)
- PHP簡介
- PHP變量
- PHP數據類型
- PHP常量
- PHP運算符
- PHP流程控制
- PHP函數(分水嶺)
- PHP日期
- PHP數學
- PHP數組
- PHP字符串
- PHP正則表達式(分水嶺)
- PHP目錄操作
- PHP文件
- PHP上傳/下載
- PHP面向對象(分水嶺)
- PHP圖像處理
- PHP會話控制
- Ajax異步處理
- PHPMysql擴展
- PHPMysqli擴展
- PHPPdo擴展
- PHP接口
- PHP命名空間
- 第六章:邏輯/業務層面(框架設計)
- 第七章:存儲層面(mysql)
- Mysql基礎
- Mysql Sql簡介
- Mysql數據庫
- Mysql數據類型
- Mysql數據表
- Mysql操作記錄
- Mysql查詢
- Mysql修改表結構
- Mysql日期與時間
- Mysql分組統計
- Mysql多表查詢
- Mysql安全
- Mysql存儲引擎
- Mysql事務
- Mysql視圖
- Mysql觸發器
- Mysql存儲過程
- Mysql存儲函數
- Mysql優化
- 第八章:服務器(Linux)
- Linux介紹與安裝
- Shell
- 目錄與文件操作
- VIM編輯器使用
- 帳號管理
- SUDO
- 權限控制
- 壓縮與打包
- 軟件安裝
- 計劃任務
- 進程管理
- 寶塔Linux面板