ImageMagick 的PHP(图片处理)

Stella981
• 阅读 679

这次的任务是要做一个图片变成圆形的任务,将上传的图片切割成固定大小的圆形。

首先很屌丝的在自己的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();

任务结束

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
3个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
PHP创建多级树型结构
<!lang:php<?php$areaarray(array('id'1,'pid'0,'name''中国'),array('id'5,'pid'0,'name''美国'),array('id'2,'pid'1,'name''吉林'),array('id'4,'pid'2,'n
Wesley13 Wesley13
3年前
Java日期时间API系列36
  十二时辰,古代劳动人民把一昼夜划分成十二个时段,每一个时段叫一个时辰。二十四小时和十二时辰对照表:时辰时间24时制子时深夜11:00凌晨01:0023:0001:00丑时上午01:00上午03:0001:0003:00寅时上午03:00上午0
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Java服务总在半夜挂,背后的真相竟然是... | 京东云技术团队
最近有用户反馈测试环境Java服务总在凌晨00:00左右挂掉,用户反馈Java服务没有定时任务,也没有流量突增的情况,Jvm配置也合理,莫名其妙就挂了
Python进阶者 Python进阶者
9个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这