Laravel 5.*使用Intervention/image轻松实现图片压缩/剪裁/添加水印功能

Song8758 次浏览1个评论2017年07月19日
本本主要讲解,使用Laravel5.+InterventionImage轻松实现对图片的上传,创建,修改,和压缩,旋转,缓存以及添加图片水印等处理 1、使用Composer安装依赖 php composerrequireintervention/imag

本本主要讲解,使用Laravel 5.*+Intervention Image 轻松实现对图片的上传,创建,修改,和压缩,旋转,缓存以及添加图片水印等处理

1、使用Composer安装依赖

composer require intervention/image

2、配置拓展

在config/app.php中注册服务提供者到providers数组:

Intervention\Image\ImageServiceProvider::class

同样在config/app.php中注册门面到aliases数组:

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

执行如下代码发布资源

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

将包的配置文件config/image.php发布到应用根目录的config目录下以便可以访问和配置。

3、需求条件

默认情况下,Intervention Image使用PHP的GD库扩展处理所有图片,如果你想要切换到Imagick,可以在config/image.php中修改,使用先确定本地已经安装好 GDImagick.

4.基础用法

1、读取图片
Route::get('/', function(){
    $img = Image::make('foo/bar/baz.jpg');
    return $img->response('jpg');
});
2、绘制图片
$img = Image::canvas(800, 600, '#ccc');
3、编辑图片
$img = Image::make('foo.jpg')->resize(320, 240)->insert('watermark.png');
4、上传图片
// resizing an uploaded file
Image::make(Input::file('photo'))->resize(300, 200)->save('foo.jpg');
5、旋转图片
$img->rotate(-45);
6、压缩图片
$img = Image::make('foo.jpg')->resize(500, 400);
// 只改变宽度,高度不变,注意:会变形
$img->resize(300, null);
// 宽度为300,高度自动调整,不会变形
$img->resize(300, null, function ($constraint) {
    $constraint->aspectRatio();
});
7、缓存
$img = Image::cache(function($image) {
    $image->make('public/foo.jpg')->resize(300, 200)->greyscale();
});
8、添加水印
// 修改指定图片的大小
$img = Image::make('images/avatar.jpg')->resize(200, 200);

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

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

/* 上面的逻辑可以通过链式表达式搞定 */
$img = Image::make('images/avatar.jpg')->resize(200, 200)->insert('images/new_avatar.jpg', 'bottom-right', 15, 10);
9.汇集所有一行解决所有问题
//上传并且压缩宽度为800高度自己适应,插入水印并且随机命名保存
$img = Image::make(Input::file('photo'))->resize(800, null, function ($constraint) {$constraint->aspectRatio();})->insert('img/logo.png', 'bottom-right', 15, 10)->save('/uploads/'.date("YmdHis",time()).rand(1000,9999).".png");
10、添加文字/文字水印

使用text方法可以添加文字水印,他还有很多熟悉你可以从官网查看,Demo:

$img->text('The quick brown fox jumps over the lazy dog.', 120, 100);

如果要查看效果就return $img->response('png');一下,修改后要保存需要单独$img->save('1.png');好了,讲到这里,还有9几种方法,大家去官方文档看一下吧!

获取Intervention处理后的图片上传到OSS等云存储

由于执行我们的图片处理只有responseresponse,所以我们操作以前必须要保存一下,然后通过basePath()拿到保存后的路径上传:

$file = $request->file('fileUp');
$img = Image::make($file->getRealPath())->insert('img/logo.png', 'top-left', 15, 15)->save('images/new_avatar.jpg');
# 保存后的路径,用于上传删除
$img->basePath()

官方文档:Intervention Image官方文档

请登录后评论
  • Song Song 2017-07-16 04:00:58

    为什么我上传git图片,保存下来的git格式图片,不会动了,不是支持gif格式么

    0 赞 0 条评论 回复
    评论
    查看更多评论!
  • Song Song 2017-07-16 04:00:58

    本人测试发现,使用png图片会比较大,使用jpg即可

    0 赞 0 条评论 回复
    评论
    查看更多评论!
    公告提示
    本站主要用于学习交流Laravel技术,分享Laravel优秀案例;同时非常欢迎大家投稿哦!如果有招聘信息也可以联系我我帮忙发布哦!