前兩天蠻說有一個PHP擴展,tclip圖片裁剪程序,Tclip致力于人臉識別和圖片顯著性區域的識別,它與其他圖片裁剪程序最大的不同之處在于,在裁剪后的圖片中保留人臉和其他圖片顯著性區域,不過還是圖片裁剪.
tclip這個擴展依賴開源的opencv庫,百科:OpenCV的全稱是:Open Source Computer Vision Library。OpenCV是一個基于(開源)發行的跨平臺計算機視覺庫,可以運行在Linux、Windows和Mac OS操作系統上,它輕量級而且高效——由一系列 C 函數和少量 C++ 類構成,同時提供了Python、Ruby、MATLAB等語言的接口,實現了圖像處理和計算機視覺方面的很多通用算法。
回到正題,tclip這個小程序,只用到了opencv中一小部分功能,就是圖片顯著性區域的識別.
具體的裁剪算法,不做多的研究.
現在的問題是,想實現從內存中通過PHP讀取圖片的二進制數據(這部分數據是先準備好的)傳遞給opencv,通過查看opencv的API文檔,看到了imdecode方法,可以從內存中載入圖片,那么可以解決這個問題了.
關于安裝tclip擴展的介紹:https://github.com/exinnet/tclip
但是要注意的是,opencv-2.4.9應該有bug,編譯不成功,另外ubuntu-14.0.4的編譯安裝之后調用tclip函數報錯,我測試的版本是:
centos-6.4,PHP-5.4.31,opencv-2.4.4
安裝步驟:
下載opencv源碼:http://www.bo56.com/download/opencv2.tar.bz2
下載Tclip源碼:
http://code.taobao.org/p/tclip/src/
https://github.com/exinnet/tclip
安裝opencv2:
此擴展依賴于opencv2.0 之上版本,因此安裝前先安裝opencv。opencv的安裝步驟如下.
1.安裝如下依賴包:gtk+ gtk+-devel pkgconfig libpng zlib libjpeg libtiff cmake
如果是centos可以執行如下命令進行安裝依賴包:
yum install gtk+ gtk+-devel pkgconfig libpng zlib libjpeg libtiff cmake
2.安裝opencv2,步驟如下.
解壓安裝包
cd 進入安裝包文件夾內。
- cmake CMakeLists.txt
- make && make install
- vim /etc/profile
注意:在編譯opencv時,要使用gcc的4.4版本或者之上,否則會報錯.
3.設相關環境變量
在 unset i 前增加
export PKG_CONFIG_PATH=/usr/lib/pkgconfig/:/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
保持退出后,執行如下命令:
- source /etc/profile
- echo “/usr/local/lib/” > /etc/ld.so.conf.d/opencv.conf
- ldconfig
安裝php圖片裁剪tclip擴展
cd 到源代碼目錄中的php_ext文件夾
- phpize
- ./configure
- make //開源軟件:Vevb.com
cp modules/tclip.so 到 extension 目錄
修改php.ini,加入 extension=tclip.so
重啟fpm
安裝命令行
如果想使用命令行方式,可以進行如下安裝
cd 進入安裝包soft文件夾內
chmod +x ./tclip.sh
./tclip.sh
使用方法說明
第一種:在php中圖片裁剪使用格式:
tclip(文件原路徑,裁剪后的圖片保存路徑,裁剪后的圖片寬度,裁剪后的圖片高度)
示例:
- $source_file = “/tmp/a.jpg”;
- $dest_file = “/www/a_dest.jpg”;
- $width = 400;
- $height = 200;
- $ret =tclip($source_file, $dest_file, $width, $height);
執行成功$ret 為true,否則為false
第二種:命令行
參數說明:
-s 原圖路徑
-d 裁剪后的圖片保存路徑
-w 裁剪后的圖片寬度
-h 裁剪后的圖片高度
./tclip -s a.jpg -d a_dest.jpg -w 400 -h 200
最后,雖然PHP中已經直接可以傳遞圖片的二進制數據了,但是發現opencv源碼中,也會先將二進制數據保存到一個臨時文件,再讀取的,并且在opencv-2.4.2版本中臨時文件不會被刪除,這就有點坑了,但是還是可以減少PHP的邏輯,所以支持二進制的圖片數據還是有必要的.
新聞熱點
疑難解答