# 圖像處理類
CodeIgniter 的圖像處理類可以使你完成以下的操作:
* 調整圖像大小
* 創建縮略圖
* 圖像裁剪
* 圖像旋轉
* 添加圖像水印
可以很好的支持三個主流的圖像庫:GD/GD2、NetPBM 和 ImageMagick 。
注解
添加水印操作僅僅在使用 GD/GD2 時可用。另外,即使支持其他的圖像處理庫, 但是為了計算圖像的屬性,GD 仍是必需的。然而在進行圖像處理操作時, 還是會使用你指定的庫。
* [初始化類](http://codeigniter.org.cn/user_guide/libraries/image_lib.html#id2)
* [處理圖像](http://codeigniter.org.cn/user_guide/libraries/image_lib.html#id3)
* [處理函數](http://codeigniter.org.cn/user_guide/libraries/image_lib.html#id4)
* [參數](http://codeigniter.org.cn/user_guide/libraries/image_lib.html#processing-preferences)
* [在配置文件中設置參數](http://codeigniter.org.cn/user_guide/libraries/image_lib.html#id6)
* [添加圖像水印](http://codeigniter.org.cn/user_guide/libraries/image_lib.html#id7)
* [水印的兩種類型](http://codeigniter.org.cn/user_guide/libraries/image_lib.html#id8)
* [給圖像添加水印](http://codeigniter.org.cn/user_guide/libraries/image_lib.html#watermarking)
* [水印處理參數](http://codeigniter.org.cn/user_guide/libraries/image_lib.html#id10)
* [Text 參數](http://codeigniter.org.cn/user_guide/libraries/image_lib.html#text)
* [Overlay 參數](http://codeigniter.org.cn/user_guide/libraries/image_lib.html#overlay)
* [類參考](http://codeigniter.org.cn/user_guide/libraries/image_lib.html#id11)
## [初始化類](http://codeigniter.org.cn/user_guide/libraries/image_lib.html#id12)
跟 CodeIgniter 中的其他類一樣,可以在你的控制器中使用?$this->load->library()?方法加載圖像處理類:
~~~
$this->load->library('image_lib');
~~~
一旦加載,圖像處理類就可以像下面這樣使用:
~~~
$this->image_lib
~~~
### [處理圖像](http://codeigniter.org.cn/user_guide/libraries/image_lib.html#id13)
不管你想進行何種圖像處理操作(調整大小,圖像裁剪,圖像旋轉,添加水印), 通常過程都是一樣的。你會先設置一些你想進行的圖像操作的參數, 然后調用四個可用方法中的一個。例如,創建一個圖像縮略圖:
~~~
$config['image_library'] = 'gd2';
$config['source_image'] = '/path/to/image/mypic.jpg';
$config['create_thumb'] = TRUE;
$config['maintain_ratio'] = TRUE;
$config['width'] = 75;
$config['height'] = 50;
$this->load->library('image_lib', $config);
$this->image_lib->resize();
~~~
以上代碼告訴 image_resize 函數去查找位于 source_image 目錄下的名為 mypic.jpg 的圖片,然后運用 GD2 圖像庫創建一個 75 X 50 像素的縮略圖。 當 maintain_ratio 選項設為 TRUE 時,生成的縮略圖將保持圖像的縱橫比例,同時盡可能的在寬度和 高度上接近所設定的 width 和 height 。 縮略圖將被命名為類似 mypic_thumb.jpg 的形式。
注解
為了讓圖像類能進行所有操作,包含圖片的文件夾必須開啟可寫權限。
注解
圖像處理的某些操作可能需要大量的服務器內存。如果在處理圖像時, 你遇到了內存不足錯誤,您可能需要限制圖像大小的最大值, 和/或調整 PHP 的內存限制。
### [處理函數](http://codeigniter.org.cn/user_guide/libraries/image_lib.html#id14)
有五個處理函數可以調用:
* $this->image_lib->resize()
* $this->image_lib->crop()
* $this->image_lib->rotate()
* $this->image_lib->watermark()
當調用成功時,這些函數會返回 TRUE ,否則會返回 FALSE 。 如果調用失敗時,用以下函數可以獲取錯誤信息:
~~~
echo $this->image_lib->display_errors();
~~~
下面是一個好的做法,將函數調用放在條件判斷里,當調用失敗時顯示錯誤的信息:
~~~
if ( ! $this->image_lib->resize())
{
echo $this->image_lib->display_errors();
}
~~~
注解
你也可以給錯誤信息指定 HTML 格式,像下面這樣添加起始和結束標簽:
~~~
$this->image_lib->display_errors('<p>', '</p>');
~~~
### [參數](http://codeigniter.org.cn/user_guide/libraries/image_lib.html#id15)
你可以用下面的參數來對圖像處理進行配置,滿足你的要求。
注意,不是所有的參數都可以應用到每一個函數中。例如,x/y 軸參數只能被圖像裁剪使用。 但是,寬度和高度參數對裁剪函數是無效的。下表的 "可用性" 一欄將指明哪些函數可以使用對應的參數。
"可用性" 符號說明:
* R - 調整圖像大小
* C - 圖像裁剪
* X - 圖像旋轉
* W - 添加圖像水印
| 參數 | 默認值 | 選項 | 描述 | 可用性 |
| --- | --- | --- | --- | --- |
| **image_library** | GD2 | GD, GD2, ImageMagick, NetPBM | 設置要使用的圖像庫 | R, C, X, W |
| **library_path** | None | None | 設置 ImageMagick 或 NetPBM 庫在服務器上的路徑。 要使用它們中的其中任何一個,你都需要設置它們的路徑。 | R, C, X |
| **source_image** | None | None | 設置原始圖像的名稱和路徑。 路徑只能是相對或絕對的服務器路徑,不能使用URL 。 | R, C, S, W |
| **dynamic_output** | FALSE | TRUE/FALSE (boolean) | 決定新生成的圖像是要寫入硬盤還是內存中。 注意,如果是生成到內存的話,一次只能顯示一副圖像,而且 不能調整它在你頁面中的位置,它只是簡單的將圖像數據以及圖像的 HTTP 頭發送到瀏覽器。 | R, C, X, W |
| **file_permissions** | 0644 | (integer) | 設置生成圖像文件的權限。 注意:權限值為八進制表示法。 | R, C, X, W |
| **quality** | 90% | 1 - 100% | 設置圖像的品質。品質越高,圖像文件越大。 | R, C, X, W |
| **new_image** | None | None | 設置目標圖像的名稱和路徑。 創建圖像副本時使用該參數,路徑只能是相對或絕對的服務器路徑, 不能使用URL 。 | R, C, X, W |
| **width** | None | None | 設置你想要的圖像寬度。 | R, C |
| **height** | None | None | 設置你想要的圖像高度。 | R, C |
| **create_thumb** | FALSE | TRUE/FALSE (boolean) | 告訴圖像處理函數生成縮略圖。 | R |
| **thumb_marker** | _thumb | None | 指定縮略圖后綴,它會被插入到文件擴展名的前面, 所以 mypic.jpg 文件會變成 mypic_thumb.jpg | R |
| **maintain_ratio** | TRUE | TRUE/FALSE (boolean) | 指定是否在縮放或使用硬值的時候 使圖像保持原始的縱橫比例。 | R, C |
| **master_dim** | auto | auto, width, height | 指定一個選項作為縮放和創建縮略圖時的主軸。 例如,你想要將一張圖片縮放到 100×75 像素。 如果原來的圖像的大小不能完美的縮放到這個尺寸, 那么由這個參數決定把哪個軸作為硬值。 "auto" 依據圖片到底是過高還是過長自動設定軸。 | R |
| **rotation_angle** | None | 90, 180, 270, vrt, hor | 指定圖片旋轉的角度。 注意,旋轉是逆時針的,如果想向右轉 90 度, 就得把這個參數定義為 270 。 | X |
| **x_axis** | None | None | 為圖像的裁剪設定 X 軸上的長度。 例如,設為 30 就是將圖片左邊的 30 像素裁去。 | C |
| **y_axis** | None | None | 為圖像的裁剪設定Y軸上的長度。 例如,設為30就是將圖片頂端的30像素裁去。 | C |
### [在配置文件中設置參數](http://codeigniter.org.cn/user_guide/libraries/image_lib.html#id16)
如果你不喜歡使用上面的方法來設置參數,你可以將參數保存到配置文件中。你只需簡單的創建一個文件 image_lib.php 并將 $config 數組放到該文件中,然后保存文件到?**config/image_lib.php**?,這些參數將會自動被使用。 如果你在配置文件中設置參數,那么你就不需要使用$this->image_lib->initialize()?方法了。
## [添加圖像水印](http://codeigniter.org.cn/user_guide/libraries/image_lib.html#id17)
水印處理功能需要 GD/GD2 庫的支持。
### [水印的兩種類型](http://codeigniter.org.cn/user_guide/libraries/image_lib.html#id18)
你可以使用以下兩種圖像水印處理方式:
* **Text**:水印信息將以文字方式生成,要么使用你所指定的 TrueType 字體, 要么使用 GD 庫所支持的內部字體。如果你要使用 TrueType 版本, 那么你安裝的 GD 庫必須是以支持 TrueType 的形式編譯的(大多數都是,但不是所有)。
* **Overlay**:水印信息將以圖像方式生成,新生成的水印圖像 (通常是透明的 PNG 或者 GIF)將覆蓋在原圖像上。
### [給圖像添加水印](http://codeigniter.org.cn/user_guide/libraries/image_lib.html#id19)
類似使用其他類型的圖像處理函數(resizing、cropping 和 rotating), 你也要對水印處理函數進行參數設置來生成你要的結果,例子如下:
~~~
$config['source_image'] = '/path/to/image/mypic.jpg';
$config['wm_text'] = 'Copyright 2006 - John Doe';
$config['wm_type'] = 'text';
$config['wm_font_path'] = './system/fonts/texb.ttf';
$config['wm_font_size'] = '16';
$config['wm_font_color'] = 'ffffff';
$config['wm_vrt_alignment'] = 'bottom';
$config['wm_hor_alignment'] = 'center';
$config['wm_padding'] = '20';
$this->image_lib->initialize($config);
$this->image_lib->watermark();
~~~
上面的例子是使用 16 像素 True Type 字體來生成文本水印 "Copyright 2006 - John Doe" , 該水印將出現在離圖像底部 20 像素的中下部位置。
注解
當調用圖像類處理圖像時,所有的目標圖片必須有 "寫入" 權限, 例如:777
### [水印處理參數](http://codeigniter.org.cn/user_guide/libraries/image_lib.html#id20)
下表列舉的參數對于兩種水印處理方式(text 或 overlay)都適用。
| 參數 | 默認值 | 選項 | 描述 |
| --- | --- | --- | --- |
| **wm_type** | text | text, overlay | 設置想要使用的水印處理類型。 |
| **source_image** | None | None | 設置原圖像的名稱和路徑,路徑必須是相對或絕對路徑,不能是 URL 。 |
| **dynamic_output** | FALSE | TRUE/FALSE (boolean) | 決定新生成的圖像是要寫入硬盤還是內存中。 注意,如果是生成到內存的話,一次只能顯示一副圖像,而且 不能調整它在你頁面中的位置,它只是簡單的將圖像數據以及圖像的 HTTP 頭發送到瀏覽器。 |
| **quality** | 90% | 1 - 100% | 設置圖像的品質。品質越高,圖像文件越大。 |
| **wm_padding** | None | A number | 內邊距,以像素為單位,是水印與圖片邊緣之間的距離。 |
| **wm_vrt_alignment** | bottom | top, middle, bottom | 設置水印圖像的垂直對齊方式。 |
| **wm_hor_alignment** | center | left, center, right | 設置水印圖像的水平對齊方式。 |
| **wm_hor_offset** | None | None | 你可以指定一個水平偏移量(以像素為單位), 用于設置水印的位置。偏移量通常是向右移動水印, 除非你把水平對齊方式設置為 "right" ,那么你的偏移量將會向左移動水印。 |
| **wm_vrt_offset** | None | None | 你可以指定一個垂直偏移量(以像素為單位), 用于設置水印的位置。偏移量通常是向下移動水印, 除非你把垂直對齊方式設置為 "bottom",那么你的偏移量將會向上移動水印。 |
#### [Text 參數](http://codeigniter.org.cn/user_guide/libraries/image_lib.html#id21)
下表列舉的參數只適用于 text 水印處理方式。
| 參數 | 默認值 | 選項 | 描述 |
| --- | --- | --- | --- |
| **wm_text** | None | None | 你想作為水印顯示的文本。通常是一份版權聲明。 |
| **wm_font_path** | None | None | 你想使用的 TTF 字體(TrueType)在服務器上的路徑。 如果你沒有使用這個選項,系統將使用原生的GD字體。 |
| **wm_font_size** | 16 | None | 字體大小。 說明:如果你沒有使用上面的 TTF 字體選項, 那么這個數值必須是 1-5 之間的一個數字,如果使用了 TTF , 你可以使用任意有效的字體大小。 |
| **wm_font_color** | ffffff | None | 字體顏色,以十六進制給出。 注意,你必須給出完整的 6 位數的十六進制值(如:993300), 而不能使用 3 位數的簡化值(如:fff)。 |
| **wm_shadow_color** | None | None | 陰影的顏色, 以十六進制給出。如果此項為空,將不使用陰影。 注意,你必須給出完整的 6 位數的十六進制值(如:993300), 而不能使用 3 位數的簡化值(如:fff)。 |
| **wm_shadow_distance** | 3 | None | 陰影與文字之間的距離(以像素為單位)。 |
#### [Overlay 參數](http://codeigniter.org.cn/user_guide/libraries/image_lib.html#id22)
下表列舉的參數只適用于 overlay 水印處理方式。
| 參數 | 默認值 | 選項 | 描述 |
| --- | --- | --- | --- |
| **wm_overlay_path** | None | None | 你想要用作水印的圖片在你服務器上的路徑。 只在你使用了 overlay 方法時需要。 |
| **wm_opacity** | 50 | 1 - 100 | 圖像不透明度。你可以指定你的水印圖片的不透明度。 這將使水印模糊化,從而不會掩蓋住底層原始圖片,通常設置為 50 。 |
| **wm_x_transp** | 4 | A number | 如果你的水印圖片是一個 PNG 或 GIF 圖片, 你可以指定一種顏色用來使圖片變得 "透明" 。這項設置 (以及下面那項)將允許你指定這種顏色。它的原理是,通過指定 "X" 和 "Y" 坐標值(從左上方開始測量)來確定圖片上對應位置的某個像素, 這個像素所代表的顏色就是你要設置為透明的顏色。 |
| **wm_y_transp** | 4 | A number | 與前一個選項一起,允許你指定某個像素的坐標值, 這個像素所代表的顏色就是你要設置為透明的顏色。 |
## [類參考](http://codeigniter.org.cn/user_guide/libraries/image_lib.html#id23)
classCI_Image_lib
initialize([$props = array()])
參數:
* **$props**?(array) -- Image processing preferences
返回: TRUE on success, FALSE in case of invalid settings
返回類型: bool
初始化圖像處理類。
resize()
返回: TRUE on success, FALSE on failure
返回類型: bool
該函數讓你能調整原始圖像的大小,創建一個副本(調整或未調整過的), 或者創建一個縮略圖。
創建一個副本和創建一個縮略圖之間沒有實際上的區別, 除了縮略圖的文件名會有一個自定義的后綴(如:mypic_thumb.jpg)。
所有列在上面?[參數](http://codeigniter.org.cn/user_guide/libraries/image_lib.html#processing-preferences)?表中的參數對這個函數都可用, 除了這三個:?rotation_angle?、?x_axis?和?y_axis?。
**創建一個縮略圖**
resize 函數能用來創建縮略圖(并保留原圖),只要你把這個參數設為 TRUE
~~~
$config['create_thumb'] = TRUE;
~~~
這一個參數決定是否創建一個縮略圖。
**創建一個副本**
resize 函數能創建一個圖像的副本(并保留原圖), 只要你通過以下參數設置一個新的路徑或者文件名:
~~~
$config['new_image'] = '/path/to/new_image.jpg';
~~~
注意以下規則:
* 如果只指定新圖像的名字,那么它會被放在原圖像所在的文件夾下。
* 如果只指定路徑,新圖像會被放在指定的文件夾下,并且名字和原圖像相同。
* 如果同時定義了路徑和新圖像的名字,那么新圖像會以指定的名字放在指定的文件夾下。
**調整原圖像的大小**
如果上述兩個參數(create_thumb 和 new_image)均未被指定, resize 函數的處理將直接作用于原圖像。
crop()
返回: TRUE on success, FALSE on failure
返回類型: bool
crop 函數的用法與 resize 函數十分接近,除了它需要你設置用于裁剪的 X 和 Y 值 (單位是像素),如下:
~~~
$config['x_axis'] = 100;
$config['y_axis'] = 40;
~~~
前面那張?[參數](http://codeigniter.org.cn/user_guide/libraries/image_lib.html#processing-preferences)?表中所列的所有參數都可以用于這個函數, 除了這些:rotation_angle?、width?、height?、create_thumb?、new_image?。
這是一個如何裁剪一張圖片的示例:
~~~
$config['image_library'] = 'imagemagick';
$config['library_path'] = '/usr/X11R6/bin/';
$config['source_image'] = '/path/to/image/mypic.jpg';
$config['x_axis'] = 100;
$config['y_axis'] = 60;
$this->image_lib->initialize($config);
if ( ! $this->image_lib->crop())
{
echo $this->image_lib->display_errors();
}
~~~
注解
如果沒有一個可視化的界面,是很難裁剪一張圖片的。 因此,除非你打算制作這么一個界面,否則這個函數并不是很有用。 事實上我們在自己開發的 CMS 系統 ExpressionEngine 的相冊模塊中 添加的一個基于 JavaScript 的用戶界面來選擇裁剪的區域。
rotate()
返回: TRUE on success, FALSE on failure
返回類型: bool
rotate 函數需要通過參數設置旋轉的角度:
~~~
$config['rotation_angle'] = '90';
~~~
以下是 5 個可選項:
1. 90 - 逆時針旋轉90度。
2. 180 - 逆時針旋轉180度。
3. 270 - 逆時針旋轉270度。
4. hor - 水平翻轉。
5. vrt - 垂直翻轉。
下面是旋轉圖片的一個例子:
~~~
$config['image_library'] = 'netpbm';
$config['library_path'] = '/usr/bin/';
$config['source_image'] = '/path/to/image/mypic.jpg';
$config['rotation_angle'] = 'hor';
$this->image_lib->initialize($config);
if ( ! $this->image_lib->rotate())
{
echo $this->image_lib->display_errors();
}
~~~
watermark()
返回: TRUE on success, FALSE on failure
返回類型: bool
在圖像上添加一個水印,更多信息請參考?[給圖像添加水印](http://codeigniter.org.cn/user_guide/libraries/image_lib.html#watermarking)?。
clear()
返回類型: void
clear 函數重置所有之前用于處理圖片的值。當你用循環來處理一批圖片時,你可能會想使用它。
~~~
$this->image_lib->clear();
~~~
display_errors([$open = '[,?$close = '']])
參數:
* **$open**?(string) -- Error message opening tag
* **$close**?(string) -- Error message closing tag
返回: Error messages
返回類型: string
返回所有檢測到的錯誤信息。
~~~
echo $this->image_lib->diplay_errors();
~~~
- 歡迎使用 CodeIgniter
- 安裝說明
- 下載 CodeIgniter
- 安裝說明
- 從老版本升級
- 疑難解答
- CodeIgniter 概覽
- CodeIgniter 將從這里開始
- CodeIgniter 是什么?
- 支持特性
- 應用程序流程圖
- 模型-視圖-控制器
- 設計與架構目標
- 教程 - 內容提要
- 加載靜態內容
- 讀取新聞條目
- 創建新聞條目
- 結束語
- 常規主題
- CodeIgniter URL
- 控制器
- 保留名稱
- 視圖
- 模型
- 輔助函數
- 使用 CodeIgniter 類庫
- 創建類庫
- 使用 CodeIgniter 驅動器
- 創建驅動器
- 創建核心系統類
- 創建附屬類
- 鉤子 - 擴展框架核心
- 自動加載資源
- 公共函數
- 兼容性函數
- URI 路由
- 錯誤處理
- 網頁緩存
- 程序分析
- 以 CLI 方式運行
- 管理你的應用程序
- 處理多環境
- 在視圖文件中使用 PHP 替代語法
- 安全
- PHP 開發規范
- 類庫參考
- 基準測試類
- 緩存驅動器
- 日歷類
- 購物車類
- 配置類
- Email 類
- 加密類
- 加密類(新版)
- 文件上傳類
- 表單驗證類
- FTP 類
- 圖像處理類
- 輸入類
- Javascript 類
- 語言類
- 加載器類
- 遷移類
- 輸出類
- 分頁類
- 模板解析類
- 安全類
- Session 類
- HTML 表格類
- 引用通告類
- 排版類
- 單元測試類
- URI 類
- 用戶代理類
- XML-RPC 與 XML-RPC 服務器類
- Zip 編碼類
- 數據庫參考
- 數據庫快速入門: 示例代碼
- 數據庫配置
- 連接你的數據庫
- 查詢
- 生成查詢結果
- 查詢輔助函數
- 查詢構造器類
- 事務
- 數據庫元數據
- 自定義函數調用
- 數據庫緩存類
- 數據庫工廠類
- 數據庫工具類
- 數據庫驅動器參考
- 輔助函數參考
- 數組輔助函數
- 驗證碼輔助函數
- Cookie 輔助函數
- 日期輔助函數
- 目錄輔助函數
- 下載輔助函數
- 郵件輔助函數
- 文件輔助函數
- 表單輔助函數
- HTML 輔助函數
- 語言輔助函數
- Inflector 輔助函數
- 數字輔助函數
- 路徑輔助函數
- 安全輔助函數
- 表情輔助函數
- 字符串輔助函數
- 文本輔助函數
- 排版輔助函數
- URL 輔助函數
- XML 輔助函數
- 向 CodeIgniter 貢獻你的力量