Windows+PHP5.6环境下安装imagick扩展和imagemagick 三五行代码实现PHP抠图

查看phpinfo()信息

  其实回过头看,安装过程中最容易出错的反而是下载阶段,一定要将imagemagick和imagick的版本和phpinfo的信息对应好!
下图中几点需要注意,每个人的信息可能不同,根据你自己的phpinfo来选择接下来的下载的程序及扩展版本:

  • PHP Version: PHP版本
  • compiler: MSVC11
  • Architecture: x86
  • Thread Safety: disabled 非线程安全,也就是NTS,相反的则是线程安全TS

    image.png

一. Imagemagick部分

1. 下载

  • 下载Imagemagick程序
    下载地址:Imagemagick程序下载地址
    打开链接,找到Imagemagick的下载区域,根据phpinfo我应该选择vc11,32位的下载链接,也就是下图中圈出的部分

    image.png

2. 安装

  • 解压缩 将下载后的压缩包,直接解压到你想放置的目录下,不要有中文和特殊字符,我把它放在了D:\install_dir\imagemagick下,并且记住不要忘记这个路径

  • 环境变量配置 为了更方便,全局都可以使用,我们需要配置下环境变量,进入刚才解压缩的目录,再进入/bin目录下,复制当前路径,我的路径为D:\install_dir\imagemagick\bin,右击我的电脑(计算机),按照下图依次打开环境变量配置位置,将路径粘贴进去(注意:Path中可能有多个路径,多个路径间用;分号分割就好)

    image.png

     

  • 导入DLL文件 进入imagemagickbin目录下,复制所有.dll后缀的文件到你的php根目录下(我使用的是Phpstudy建的环境,我的php路径为:D:\phpStudy\php\php-5.6.27-nts)我的版本有147个文件,这里有个小技巧,在文件管理器右上角搜索.dll,然后全选复制,会方便一点

    image.png

     

二. Imagick扩展部分

  首先imagick一个php扩展,可以使用php控制imagemagick程序

1. 下载

2. 安装

  • php_imagick.dll 找到刚下载的压缩包,解压后,找到php_imagick.dll文件,将其复制粘贴到php根目录下的ext目录下
  • 其他.DLL文件 将解压后的imagick目录下的其他.dll后缀的文件全部复制粘贴到php根目录下
  • php.ini 找到php.ini文件并打开编辑,加入extension=php_imagick.dll这一行

三. 重启

到这里基本上可以成功安装了,imagemagick需要重启电脑后才会生效,重启电脑后,查看phpinfo,如果成功安装了,会看到下图中的部分

image.png



作者:大熊BIGBEAR
链接:https://www.jianshu.com/p/c2ff6c9c43e3
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

 

 

前写了一个项目需要使用PHP的Imagick类进行图像的操作;个人感觉目前关于Imagick的文档虽然很多,但是比较乱。我会通过一个范例解释Imagick的简单的使用;


(1).创建一个新图片,宽500px,高300px,黑色,格式为png的图片

$img =new Imagick();
$img->newImage(500,300,'black','png')

图片描述

(2).图片的叠加;

假设我们选取范例1中的$img作为背景,这个时候我们把第二张图片叠加到图片上;
选一张马刺gdp组合;

知道图片二的路径假定为$imageSrc="/home/XXXX/spurs.png";

第一步我们实例化这个图片

imageSrc);

因为是要叠加,就需要把两张图的大小设置一样;
首先要获取第一张图片的大小(ps:这里我们也可以指定大小).

$height=$img->getImageHeight();//获取图片1高度
$width=$img->getImageWidth();//获取图片1宽度

第二步,对图片进行大小调整

$imgtwo->resizeImage($width,$height,Imagick::FILTER_LANCZOS,1);

resizeImage参数说明

bool Imagick::resizeImage ( int $columns , int $rows , int $filter , float $blur [, bool $bestfit = false ] )

参数解释:

  • columns 图片的宽度
  • rows 图片高度
  • filter 过滤器,用于过滤图片,有高斯filte根据情况而定
  • blur blur=1 为虚化, blur =-1 为锐化

第三部,叠加图片

使用compositeImage();

bool Imagick::compositeImage ( Imagick composite , int y [, int $channel = Imagick::CHANNEL_ALL ] )

参数说明:

  • composite_object :用于合并的图片的Imagick对象
  • composite:合并操作,定义操作常量。 具体请查看 合并操作常量列表
  • x:相对图像顶点左上位置(0,0)的横坐标
  • y:相对图像顶点左上位置(0,0)的纵坐标
  • channel:通过传入一个通道常量,来开启通道模式。为了支持多个通道,可以通过二进制运算的操作来合并多个通道常量。

ps:这里是把图片二覆盖到图片一上

$img->compositeImage($imgtwo,$image->getImageCompose(),0,0)

生成图片如下:
图片描述
最后

  • 1.我们可以直接在网页上查看图片,但是要加一个header信息;
header("Content-Type: image/png");
echo $img;
  • 2.可以把图片在指定目录中生成;
在当前目录下生成img.png
$file="./img.png";
$img->writeImage($file);
这样就会在当前目录下生成图片img.png;

(3).在图片上配置文字

需要使用 ImagickDraw类;

第一步实例化ImagickDraw类:

$draw=new ImagickDraw();

设置字体颜色

$draw->setFillColor(new ImagickPixel('white'));

设置字体大小

$draw->setFontSize('25');

设置字体

$draw->setFont("../fonts/Arial.ttf");

设置字体方向

$draw->setTextAlignment(Imagick::ALIGN_RIGHT);

ps:

  • Imagick::ALIGN_RIGHT 朝右边
  • Imagick::ALIGN_LEFT 左边
  • Imagick::ALIGN_CENTER 中间

设置字体编码格式

$draw->setTextEncoding("utf-8")

画出文字

$draw->annotation(200,200,'GDP');

在底板上画出;

$img->drawImage($draw);

图片描述
NBA历史上最伟大的组合GDP

(4).裁剪图片

这个夏天邓肯退役了,GDP组合解体。我们只能把邓肯去掉

$img->cropImage(300, 300, 0, 20);
  • 第一个参数是图片的宽度
  • 第二个是高度
  • 图片裁剪的x轴位置
  • 图片裁剪Y轴位置
  • 然后我们再把生成一个圆角
$img->roundCorners(60, 60);

就生成了少了邓肯现在马刺,外加一个伦纳德

ps:这里我重新写了文字,变成了GP;

图片描述

三五行代码实现PHP抠图,混合模式与剪切蒙版!

张蛋蛋

张蛋蛋

富士康流水线质检员

5 人赞同了该文章

PS:本文所述所有内容都需要ImageMagick库支持。一般主机都支持,但个人自己搭建本地环境默认没有开启ImageMagick。exec函数也不可以禁用。

1.抠图

<?php
//纯色底抠图
$input="./1.jpg";//待抠图文件路径
$ouput="./1.png";//存放路径
$bgcolor="white";//背景颜色。可使用十六进制色码和rgb(1,1,1)
$fuzz="30000"; //容差
exec("convert $input -fuzz $fuzz -transparent $bgcolor $ouput");//执行抠图操作。并输入到指定路径

抠图前(白底):

抠图后(png透明):

 

2.羽化边缘(自动检测背景)

<?php
$A1='1.png';
$A2='2.png';
$A3='3.png';
$A4='4.png';
$A5='5.png';
$img='待扣图.jpg';
$im = new Imagick($img);
//8000为边缘容差,修改此数值可适当去除多余相似杂色
$im->transparentPaintImage($im->getImagePixelColor(0, 0), 0, 8000,0);
//生成png格式
$im->setImageFormat("png");
//保存文件名
$im->writeImage("$A1");
//细化边缘
exec("convert $A1 -threshold 75% $A2");
exec("convert $A2 -fill black -opaque white $A3");
exec("convert $A3 -channel RGBA -blur 0x2 $A4");
exec("convert $A1 $A4 -alpha on -compose copy_opacity -composite $A5");
//删除临时图片
unlink($A1);
unlink($A2);
unlink($A3);
unlink($A4);

抠图前

 

抠图后

 

3.剪切蒙版

<?php
$img="1.jpg";//背景
$mask="2.png";//蒙版图。png格式
exec("convert $img $mask -alpha on -compose copy_opacity -composite ouput.png");

背景

遮罩

最后效果

4.混合模式

<?php
//-geometry size size 叠加到指定位置坐标
//-compose xxxx 混合模式
$img=‘1.jpg’;//背景图
$img2=‘2.jpg’;//
exec('convert $img $img2 -geometry +480+80 -compose Multiply -composite ouput.jpg');

背景图

 

 

叠加图(白底)

 

最终效果

 

 

混合模式参数说明: ps:-compose 后面的参数为混合模式

php支持支持以下混合模式参数

Multiply, Screen, Bumpmap, Divide, Plus, Minus,

ModulusAdd, ModulusSubtract, Difference, Exclusion, Lighten, Darken, LightenIntensity, DarkenIntensity,

 

混合模式中英文对照

1. 正常(Normal)模式

2. 溶解(Dissolve)模式

3. 变暗(Darken)模式

4. 正片叠底(Multiply)模式

5. 颜色加深(Clolor Burn)模式

6. 线性加深(Linear Burn)模式

7. 变亮(Lighten)模式

8. 滤色(Screen)模式

9. 颜色减淡(Clolor Dodge)模式

10. 线性减淡(Linear Dodge)模式

11. 叠加(Overlay)模式

12. 柔光(Soft Light)模式

13. 强光(Hard Light)模式

14. 亮光(Vivid Light)模式

15. 线性光(Linear Light)模式

16. 点光(Pin Light)模式

17. 差值(Diference)模式

18. 排除(Exclusion)模式

19. 色相(Hue)模式

20. 饱和度(Saturation)模式

21. 颜色(Color)模式

22. 亮度(Luminosity)模式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值