MacOS 安装 PHP的图片裁剪扩展Tclip


Posted in PHP onMarch 25, 2015

Tclip 用于图片裁剪,有以下特点:

能进行人脸识别。图片中有人脸,将自动视为人脸区域为重要区域,将不会被裁剪掉。
自动识别其它重要区域。如果图片中未识别出人脸,则会根据特征分布计算出重区域。
总而言之,自动识别图片中的重要区域,并且在图片裁剪时保留重要区域。
源码地址:https://github.com/exinnet/tclip

安装opencv

根据github上的说明,在CentOS上安装没有问题,但在我的MacOS上就挂了。

首先遇到的问题就是,opencv安装不过去。还好,上github下载最新的opencv-2.4.11 安装成功。

下载地址:https://github.com/Itseez/opencv/releases

使用当前最新版本 OpenCV 2.4.11

安装依赖

在安装opencv之前,先安装一些依赖包:

brew install gtk+  pkgconfig libpng zlib libjpeg libtiff cmake

提示: brew的安装使用请参考 http://brew.sh/

安装opencv

开始安装 opencv:

tar zxf opencv-2.4.11.tar.gz

cd opencv-2.4.11

cmake CMakeLists.txt 

make && make install

安装php tclip

先下载:https://github.com/exinnet/tclip/archive/master.zip

然后继续:

unzip tclip-master.zip 

cd tclip-master/php_ext

phpize

./configure

如果不出意外,到这一步,应该就挂掉了,提示:

checking for opencv.pc file in default path... found in /usr/lib/pkgconfig

found in /usr/local/lib/pkgconfig

configure: error: no result from pkg-config opencv --libs --cflags opencv

在 Tclip 作者的页面上 http://www.bo56.com/tclip%E4%BA%BA%E8%84%B8%E8%AF%86%E5%88%AB%E5%9B%BE%E7%89%87%E8%A3%81%E5%89%AA/#download

评论中,也有网友遇到了类似的问题,提出修改办法为:

将 config.m4 中的 判断语句test ${i:${#i}-3} = “.so”,改为 test ${i:${#i}-6} = ".dylib”,并尝试将46行的.so 也改称 .dylib
依然提示no result的错误~

再翻翻config.m4的代码和执行 pkg-config opencv --libs --cflags opencv的输出结果:

-I/usr/local/include/opencv -I/usr/local/include -L/usr/local/lib -lopencv_calib3d -lopencv_contrib -lopencv_core -lopencv_features2d -lopencv_flann -lopencv_gpu -lopencv_highgui -lopencv_imgproc -lopencv_legacy -lopencv_ml -lopencv_nonfree -lopencv_objdetect -lopencv_ocl -lopencv_photo -lopencv_stitching -lopencv_superres -lopencv_ts -lopencv_video -lopencv_videostab

感觉怎么对不上,于是跑到Linux安装成功的服务器执行了一下,输出结果如下:

-I/usr/local/include/opencv -I/usr/local/include /usr/local/lib/libopencv_calib3d.so /usr/local/lib/libopencv_contrib.so /usr/local/lib/libopencv_core.so /usr/local/lib/libopencv_features2d.so /usr/local/lib/libopencv_flann.so /usr/local/lib/libopencv_gpu.so /usr/local/lib/libopencv_highgui.so /usr/local/lib/libopencv_imgproc.so /usr/local/lib/libopencv_legacy.so /usr/local/lib/libopencv_ml.so /usr/local/lib/libopencv_nonfree.so /usr/local/lib/libopencv_objdetect.so /usr/local/lib/libopencv_photo.so /usr/local/lib/libopencv_stitching.so /usr/local/lib/libopencv_ts.so /usr/local/lib/libopencv_video.so /usr/local/lib/libopencv_videostab.so

再看他的判断代码:

OPENCV_FLAGS="`pkg-config opencv --libs --cflags opencv`"

for i in $OPENCV_FLAGS;do

if test ${i:0:2} = "-I" ;then

PHP_ADD_INCLUDE(${i:2})

elif test ${i:${#i}-3} = ".so" ;then

dir_name=`dirname $i`

file_name=${i/$dir_name/}

file_name=${file_name/\/lib/}

file_name=${file_name/.so/}

PHP_ADD_LIBRARY_WITH_PATH($file_name,$dir_name,TCLIP_SHARED_LIBADD)

else

AC_MSG_ERROR([no result from pkg-config opencv --libs --cflags opencv])

fi

done

我立刻就明白了,Linux上输出的都是具体的.so路径,MacOS上都是相对的路径,而config.m4中是根据具体路径和扩展名判断的,明白了问题,解决就简单了。

将 pkg-config opencv --libs --cflags opencv 的执行结果修改为具体的路径,并替换到config.m4中:

OPENCV_FLAGS="-I/usr/local/include/opencv -I/usr/local/include /usr/local/lib/libopencv_calib3d.dylib /usr/local/lib/libopencv_contrib.dylib /usr/local/lib/libopencv_core.dylib /usr/local/lib/libopencv_features2d.dylib /usr/local/lib/libopencv_flann.dylib /usr/local/lib/libopencv_gpu.dylib /usr/local/lib/libopencv_highgui.dylib /usr/local/lib/libopencv_imgproc.dylib /usr/local/lib/libopencv_legacy.dylib /usr/local/lib/libopencv_ml.dylib /usr/local/lib/libopencv_nonfree.dylib /usr/local/lib/libopencv_objdetect.dylib /usr/local/lib/libopencv_photo.dylib /usr/local/lib/libopencv_stitching.dylib /usr/local/lib/libopencv_ts.dylib /usr/local/lib/libopencv_video.dylib /usr/local/lib/libopencv_videostab.dylib"

再继续执行:

phpize

./configure

make

make install

顺利安装完成。

以上所述就是本文的全部内容了,希望大家能够喜欢。

请您花一点时间将文章分享给您的朋友或者留下评论。我们将会由衷感谢您的支持!

PHP 相关文章推荐
不用GD库生成当前时间的PNG格式图象的程序
Oct 09 PHP
PHP生成便于打印的网页
Oct 09 PHP
php不用内置函数对数组排序的两个算法代码
Feb 08 PHP
调试一段PHP程序时遇到的三个问题
Jan 17 PHP
PHP中header和session_start前不能有输出原因分析
Jan 11 PHP
如何在php中正确的使用json
Aug 06 PHP
PHP使用GIFEncoder类生成gif动态滚动字幕
Jul 01 PHP
PHP学习笔记(二) 了解PHP的基本语法以及目录结构
Aug 04 PHP
PHP 实现判断用户是否手机访问
Jan 21 PHP
php把大写命名转换成下划线分割命名
Apr 27 PHP
PHP 开发者该知道的 5 个 Composer 小技巧
Feb 03 PHP
PHP6新特性分析
Mar 03 PHP
php编写的一个E-mail验证类
Mar 25 #PHP
php取得字符串首字母的方法
Mar 25 #PHP
PHP判断IP并转跳到相应城市分站的方法
Mar 25 #PHP
PHP使用in_array函数检查数组中是否存在某个值
Mar 25 #PHP
PHP+MYSQL实现用户的增删改查
Mar 24 #PHP
php创建多级目录的方法
Mar 24 #PHP
php简单获取目录列表的方法
Mar 24 #PHP
You might like
php xml文件操作实现代码(二)
2009/03/20 PHP
PHP5 的对象赋值机制介绍
2011/08/02 PHP
PHP实现C#山寨ArrayList的方法
2015/07/16 PHP
PHP魔术方法使用方法汇总
2016/02/14 PHP
自制PHP框架之设计模式
2017/05/07 PHP
可输入的下拉框
2006/06/19 Javascript
JavaScript 拖拉缩放效果
2008/12/10 Javascript
js 加载并解析XML字符串的代码
2009/12/13 Javascript
javascript之学会吝啬 精简代码
2010/04/25 Javascript
javascript动态设置样式style实例分析
2015/05/13 Javascript
详解JavaScript中循环控制语句的用法
2015/06/03 Javascript
代码分析jQuery四种静态方法使用
2015/07/23 Javascript
js仿搜狐视频记录片列表展示效果
2020/05/30 Javascript
JS 实现百度搜索功能
2018/02/01 Javascript
通过jquery toggleClass()属性制作文章段落更改背景颜色
2018/05/21 jQuery
.vue文件 加scoped 样式不起作用的解决方法
2018/05/28 Javascript
Javascript删除数组里的某个元素
2019/02/28 Javascript
关于vue里页面的缓存详解
2019/11/04 Javascript
用smtplib和email封装python发送邮件模块类分享
2014/02/17 Python
Python while 循环使用的简单实例
2016/06/08 Python
解决Pandas的DataFrame输出截断和省略的问题
2019/02/08 Python
Python 实现平台类游戏添加跳跃功能
2020/03/27 Python
Python基于numpy模块实现回归预测
2020/05/14 Python
tensorflow pb to tflite 精度下降详解
2020/05/25 Python
Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?
2014/07/27 面试题
幼儿教师培训感言
2014/03/08 职场文书
《骑牛比赛》教后反思
2014/04/22 职场文书
全国优秀辅导员事迹材料
2014/05/14 职场文书
七夕相亲活动策划方案
2014/08/31 职场文书
立案决定书范文
2015/06/24 职场文书
2019年关于小学生课外阅读情况的分析报告
2019/12/02 职场文书
浅谈哪个Python库才最适合做数据可视化
2021/06/28 Python
基于Python实现将列表数据生成折线图
2022/03/23 Python
python创建字典及相关管理操作
2022/04/13 Python
基于Python实现西西成语接龙小助手
2022/08/05 Golang
Nginx 502 bad gateway错误解决的九种方案及原因
2022/08/14 Servers