这次的任务是要做一个图片变成圆形的任务,将上传的图片切割成固定大小的圆形。
首先很屌丝的在自己的windows上安装imagemagick,很好TMD整了老子一上午发现死活搞不定,phpinfo里面死活看不到php_imagick这个扩展,很好我放弃,线上有一个测试环境是linux的我TM用测试环境搞,不用本地的还不行?
这里有个帖子 http://www.111cn.net/sys/linux/48986.htm
yum install ImageMagick
yum install ImageMagick-devel
yum install php-pear
yum -y install php-devel
yum install gcc
pecl install imagick
然后说是加载imagick到php
然后在php.ini里面增加那个扩展的 .so文件
很好,一路爽到底,结果我TM尿了,已启动php就报类似于
Starting php-fpm [07-Sep-2016 16:35:24] NOTICE: PHP message: PHP Warning: PHP Startup: imagick: Unable to initialize module
Module compiled with module API=20100525
PHP compiled with module API=20131226
These options need to match
in Unknown on line 0
done
这个鬼样子的东西是啥?,后来上网一阵查说是什么扩展的版本和php版本不对应,这TM搞的我心情很是不愉悦。本来还想着pecl这东西好啊,方便啊,这TM第一次用就这么不给面子。
顺便说一下用pecl安装后的.so文件并不在你那个php所在的目录就是类似于 /usr/local/php/lib/php/extensions/no-debug-non-zts-20131226 这样的目录,而在它自己定义的一个目录,这个目录安装完后能看到,千万要记住,否则就去find,装完后还要手动将.so文件移动到扩展目录。
现在这个环境是lnmp的一键安装包,系统是centos7.0,php是5.6,但我用php -v看php竟然是5.4,很好不知道给我搞出了什么幺蛾子。我删!
pecl uninstall imagick
yum remove ImageMagick
我觉得这应该是个好东西,装的这么爽,删的这么爽,应该是本人能力问题,或者运气不好。
很好下面用老办法
1,安装ImageMagick这个步骤的确很烦,还要管那些图片的包,所以我直接yum安装了
yum install ImageMagick
并且要安装
yum install ImageMagick-devel
不然后面编译的时候会报
imaconfigure: error: not found. Please provide a path to MagickWand-config or Wand-config program.
2,然后安装php扩展 Imagick
去 http://pecl.php.net/package/imagick 找一个
我用的 http://pecl.php.net/get/imagick-3.1.1.tgz
wget http://pecl.php.net/get/imagick-3.1.1.tgz
tar -xzvf imagick-3.1.0RC1
cd imagick-3.1.1
phpize
./configure --with-php-config=/usr/local/php/bin/php-config --with-imagick=/usr/local/imagemagick
make
make install
配置文件个路径根据自己的来
之后再我的 /usr/local/php/lib/php/extensions/no-debug-non-zts-20131226下面会多一个imagick.so
然后给该so增加权限
cd /usr/local/php/lib/php/extensions/no-debug-non-zts-20131226
chmod 755 ./imagick.so
下面重启php
service php-fpm restart
不出意外地话(已经出了很多意外了)就能看到这个扩展了。
很好这TM才是开始,我还没有吧图片变成圆形。
$headimg是我图片上传后的路径,框架用的tp
$image = new \Imagick( $_SERVER['DOCUMENT_ROOT'] . $headimg);
$image->setImageFormat('png');
//因为需求所以将图片缩放成 84*84,后面两个参数我也不知道啥意思,随便填的。
$image->resizeImage( 84, 84, \Imagick::FILTER_UNDEFINED, 1 );
//然后变成圆形
$image->roundCorners($image->getImageWidth() / 2, $image->getImageHeight() / 2);
//最后重新写入图片
$image->writeImage();
//销毁
$image->destroy();
任务结束