PHP的ImageMagick使用;

以前写了一个项目须要使用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";spa

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

$imgtwo = new Imagick($imageSrc);code

由于是要叠加,咱们就须要把两张图的大小设置同样;
首先咱们要活的第一张图片的大小(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 ] )

参数解释:utf-8

  • columns 图片的宽度文档

  • rows 图片高度get

  • filter 过滤器,用于过滤图片,有高斯filte根据状况而定it

  • blur blur=1 为虚化, blur =-1 为锐化

第三部,叠加图片

使用compositeImage();

bool Imagick::compositeImage ( Imagick $composite_object , int $composite , int $x , 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;

图片描述

相关文章
相关标签/搜索