php图像处理(二)

kano个人技术博客 php教程 392 次浏览 没有评论

本篇kano个人博客将带领大家来学习一个厉害的框架——Grafika。它在制作缩略图、剪裁图像、添加水印、添加滤镜等方面的表现非常出色,下面为大家逐一介绍一下。

一、安装

可以使用Composer进行安装:

composer require kosinix/grafika:dev-master –prefer-dist

※ 目前最新版本Grafika的要求是php版本要大于等于5.6。

 

然后引入autoload.php文件就可以了,kano是在thinkphp框架下使用Grafika,所以只要在入口文件引入即可:

require './vendor/autoload.php';

二、使用

首先,需要创建一个createEditor实例:

$editor = Grafika::createEditor();

Grafika是面向对象的,这个editor实例中包含所有的图像处理方法,接下来就可以具体看一下Grafika的各种能力了。

首先准备一张图,接下来的操作都会在这张图上完成:

php图像处理

1. 图像缩放

比如我们想要上图的一副宽度为150px的缩略图

$editor->open($image, './temp/1.jpg');
$editor->resizeExactWidth($image, 150);
$editor->save($image, './temp/2.jpg');

图像缩放

这里面我们用到了3个方法,逐一介绍一下:

open( &$image, $imageFile ) 用来打开一副图像,第2个参数是图像文件的路径,要注意的是第1个参数——实际上方法会把生成的图像对象赋值给这个它,所以它必须是一个变量。

resizeExactWidth( &$image, $newWidth )  生成缩略图的方法,图像的宽度将缩放到指定的像素值,而高度则会等比例的进行缩放。

当然除了基于宽度的缩放,Grafika还有其他四种缩放方式

基于高度缩放:

$editor->open($image, './temp/1.jpg');
$editor->resizeExactHeight($image, 150);
$editor->save($image, './temp/3.jpg');

图像缩放

给出高度和宽度,图像会以中点为基础充满这个空间,并且剪裁掉其他部分:

$editor->open($image, './temp/1.jpg');
$editor->resizeFill($image, 200, 200);
$editor->save($image, './temp/4.jpg');

图像处理

学过css的朋友可以理解为 background-size: cover 的效果。

给出高度和宽度,图像将会拉伸填充这个区域:

$editor->open($image, './temp/1.jpg');
$editor->resizeExact($image, 200, 200);
$editor->save($image, './temp/5.jpg');

图像处理

给出高度和宽度,图像缩放使整个图像进入到区域内,图片变形:

$editor->open($image, './temp/1.jpg');
$editor->resizeFit($image, 200, 200);
$editor->save($image, './temp/6.jpg');

php图像处理

当要限制图片的大小在某一个宽高之内的时候很有用,学过css的朋友可以理解为 background-size: contain 的效果。

※ 神奇的是,Grafikagif都可以压缩,压缩之后还有动画效果。

2. 图像剪裁

有时候我们并不想要缩放图像,而是想剪裁其中的某一部分,这时候我们可以使用crop方法:

$editor->open($image, './temp/1.jpg');
$editor->crop($image, 200, 200);
$editor->save($image, './temp/2.jpg');

kano个人博客

可以看到,图像中间200*200见方的一块区域被剪裁了下来。

来看下crop方法的定义:

crop( &$image, $cropWidth, $cropHeight, $position = 'center', $offsetX = 0, $offsetY = 0 )

crop方法默认是从中间(center)为中心点,剪裁一块指定宽高的区域,实际上crop的剪裁模式共有10种:top-left, top-center, top-right, center-left, center, center-right, bottom-left, bottom-center, bottom-right, smart

9种其实就是8方向加一个中间,而最后一个则是智能剪裁,是一个很神奇的模式:

$editor->open($image, './temp/xiong.jpg');
$editor->crop($image, 120, 180, 'smart');
$editor->save($image, './temp/xiong2.jpg');

图像处理

图像处理

我们指定了一个宽度和高度,小熊居然被从背景中挑出来了!还是很厉害的。( 当然智能剪裁的“智能”程度有限,不要太指望它每次都能帮你挑出重点来。)

虽然我们有了9方向的剪裁,但是有时候我们想剪裁的地方并不是那么“正”,这时候可以用crop最后的两个参数offsetXoffsetY来调整:

$editor->open($image, './temp/1.jpg');
$editor->crop($image, 200, 200, 'center', 20);
$editor->save($image, './temp/3.jpg');

我们来对比一下原图的剪裁和加了offsetX加了20的剪裁:

个人博客 个人博客

明显的可以看到图像向右挪动了一点儿。

3. 图像合并

blend方法用于合并图像,先看一个简单的例子,将一张猫的图片放到另一张图片右下角。

$editor->open($image1, './temp/1.jpg');
$editor->open($image2, './temp/mao.jpg');
$editor->blend($image1, $image2, 'normal', 1, 'bottom-right');
$editor->save($image1, './temp/2.jpg');

图像合并

看来一下blend方法的定义:

blend(&$image1, $image2, $type='normal', $opacity = 1.0, $position = 'top-left', $offsetX = 0, $offsetY = 0 )

主要需要解释一下的是type参数,即合并的模式,有normal/multiply/overlay/screen 四种,上图中的为normal模式,实际用语言也比较难解释,我们直接上图。

multiply:

图像合并

overlay

图像合并

screen

图像合并

 本期kano个人博客给大家带来的Grafika使用就到这里,本文中介绍的功能实际上只是Grafika中的一小部分,kano建议大家有兴趣可以去官网自行学习:https://kosinix.github.io/grafika/index.html

发表评论

电子邮件地址不会被公开。 必填项已用*标注

Go