Intervention Image 是一个PHP图片操作处理库,为图片创建、修改及压缩等处理提供了便捷方式。此外,还提供了服务提供者和门面以便集成到Laravel应用中。

1、安装

Intervention Image环境要求:

PHP >=5.4

安装Fileinfo扩展

安装GD库(>=2.0)或者Imagick扩展(>=6.5.7)

我们使用Composer在命令行安装最新版本的Intervention Image:

composer require intervention/image

2、集成到Laravel

前面已经提到,Intervention Image 提供了相应的服务提供者和门面以便集成到Laravel应用。

安装好Intervention Image后,打开config/app.php,注册如下服务提供者到$providers数组:

Intervention\Image\ImageServiceProvider::class

然后添加如下门面到$aliases数组:

'Image' => Intervention\Image\Facades\Image::class

这样我们就可以在Laravel应用代码中直接使用Image了。

3、配置

默认情况下,Intervention Image使用PHP的GD库扩展处理所有图片,如果你想要切换到Imagick,你可以将配置文件拉到应用中:

php artisan vendor:publish --provider="Intervention\Image\ImageServiceProviderLaravelRecent"

这样对应的配置文件会被拷贝到config/image.php,这样你可以在该配置文件中修改图片处理驱动配置。

4、使用示例

# 读取图片
Route::get('/', function()
{
    $img = Image::make('foo.jpg')->resize(300, 200);

    return $img->response('jpg');
});

// import the Intervention Image Manager Class
use Intervention\Image\ImageManagerStatic as Image;

// 设置图像驱动,默认gd
Image::configure(array('driver' => 'imagick'));

// 读取文件并调整大小为 200 * 200
$img = Image::make('images/avatar.jpg')->resize(200, 200);

// 插入水印, 水印图片是 images/watermark.png, 位置在原图片的右下角, 距离下边距 10 像素, 距离右边距 15 像素
$img->insert('images/watermark.png', 'bottom-right', 15, 10);

# 添加文字水印
$img->text('The quick brown fox jumps over the lazy dog.', 120, 100);

// 将处理后的图片重新保存到其他路径
$img->save('images/new_avatar.jpg');

/* 上面的逻辑可以通过链式表达式搞定 */
$img = Image::make('images/avatar.jpg')->resize(200, 200)->insert('images/new_avatar.jpg', 'bottom-right', 15, 10);

# 绘制图片
$img = Image::canvas(800, 600, '#ccc');

# 上传图片处理
$img = Image::make($_FILES['image']['tmp_name']);
Image::make(Input::file('photo'))->resize(300, 200)->save('foo.jpg'); # laravel 中

# 旋转图片
$img->rotate(-45);

# 压缩图片
$img = Image::make('foo.jpg')->resize(500, 400);
// 只改变宽度,高度不变,注意:会变形
$img->resize(300, null);
// 宽度为300,高度自动调整,不会变形
$img->resize(300, null, function ($constraint) {
    $constraint->aspectRatio();
});

扩展的 make 方法为创建一个新的图像资源,他可以接收多种图片资源类型:

  • 文件系统中的图片路径
  • 图片url地址(allow_url_fopen 必须启用)
  • 二进制图像数据
  • Data-URL编码的图片
  • Base64编码的图片
  • 类型为GD的 PHP 资源(当在使用 GD 驱动程序时)
  • imageick 实例(在使用 imageick 驱动程序时)
  • Intervention\Image\Image 实例图片
  • SplFileInfo 实例,处理laravel框架文件上传 Symfony\Component\HttpFoundation\File\UploadedFile 实例

实例

// create a new image resource from file
$img = Image::make('public/foo.jpg');

// or create a new image resource from binary data
$img = Image::make(file_get_contents('public/foo.jpg'));

// create a new image from gd resource
$img = Image::make(imagecreatefromjpeg('public/foo.jpg'));

// create a new image directly from an url
$img = Image::make('http://example.com/example.jpg');

// create a new image directly from Laravel file upload
$img = Image::make(Input::file('photo'));

注意

1、有时make直接传参url(特别注意微信头像)时可能会很慢,可以先下载图片,在make文件路径创建实例,不一定都这样,开发时可测试一下图片处理性能

更多使用方法请参考 Intervention Image 官方文档:http://image.intervention.io/

 

# 评论此文章