[intervention/image]操作图片从未如此简单

2022-03-04 奥古斯宏
优雅的完成图片的缩放/裁剪/水印操作.

Intervention Image 是一个开源的 PHP 图像处理和操作 库。它提供了一个更简单也更优雅的方式来创建/编辑/组合图像,并且支持最常见的两个图像处理库 GD Library 和 Imagick 

它的让PHP处理图片的代码,变得更简单,并且更有可读性,更容易理解.无论是我们希望创建图像缩略图,增加水印,给大图片转码压缩,他都可以让我们的代码更少,更具有可读性.

简单的代码

例如:

只要四行代码,我们就实现了对图片的缩放和增加水印.

// 打开图片
$img = Image::make('public/foo.jpg');

// 对图片缩放
$img->resize(320, 240);

// 增加水印
$img->insert('public/watermark.png');

// 保存图片
$img->save('public/bar.jpg');

由于它支持链式操作,所以我们可以将四行代码写成一行:

$img = Image::make('public/foo.jpg')->resize(320, 240)->insert('public/watermark.png');

对于超大图片,比如超过8000像素的图片,GD库可能执行不了,这时只要配置一下,使用imagick库即可,代码不需要任何改动.

Image::configure(['driver' => 'imagick']);

多种文件类型和打开方式

根据扩展的不同,支持的扩展格式如下:

版权声明:本文由phpreturn.com(PHP武器库官网)原创和首发,所有权利归phpreturn(PHP武器库)所有,本站允许任何形式的转载/引用文章,但必须同时注明出处。

  JPEG PNG GIF TIF BMP ICO PSD WebP
GD ✔️ ✔️ ✔️ - ✔️ ** - - ✔️ *
Imagick ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ *


并且支持多种图片资源的打开方式:

  • string - 文件路径.
  • string - 文件URL链接(需要开启allow_url_fopen ).
  • string - 图片的二进制数据.
  • string - 图片的Data-URL数据.
  • string - 图片文件的Base64数据.
  • resource - GD资源实例. (使用GD)
  • object - Imagick资源实例 (使用Imagick)
  • object - Intervention\Image\Image资源实例 
  • object - SplFileInfo 资源实例 (包括 laravel的上传文件对象或ThinkPHP的上传文件对象

方便的设置颜色

更让小编心动的是,当我们需要设置颜色时,他支持多种设置方式,非常方便:

// 用数组的方式
$img->fill([255, 0, 0]);

// 用数组的方式,设置透明度
$img->fill([255, 255, 255, 0.5]);

// 简写十六进制
$img->fill('#ccc');

// 标准十六进制
$img->fill('#cccccc');

// 不要前缀的十六进制
$img->fill('cccccc');

// rgba写法
$img->fill('rgb(255, 0, 0)');

// 使用透明度的rgb写法
$img->fill('rgba(0, 0, 0, 0.5)');

URL动态参数处理

最终效果像这样:

http://yourhost.com/{route-name}/original/{file-name}

通过传入不同的`route-name`,实现对图片的处理读取:

  • small - 120x90 Pixel
  • medium - 240x180 Pixel
  • large - 480x360 Pixel

并且支持直接下载或在线预览的参数:

版权声明:本文由phpreturn.com(PHP武器库官网)原创和首发,所有权利归phpreturn(PHP武器库)所有,本站允许任何形式的转载/引用文章,但必须同时注明出处。

  • original - 直接在浏览器显示.
  • download - 下载到本地.

目前这个特性只对laravel提供了官方代码,但是这种功能实现起来是很简单的,其实就是实现了一个过滤器,他默认提供了三种过滤器而已,我们也可以定义自己的过滤器.

只要两行即可.

// 打开图片
$img = Image::make('foo.jpg');

// 使用过滤器
$img->filter(new DemoFilter(45));

更多用法

它提供了非常全面的接口用法,剩下的你可以自己去探索啦.

  • backup()
  • basePath()
  • blur()
  • brightness()
  • cache()
  • canvas()
  • circle()
  • colorize()
  • contrast()
  • crop()
  • destroy()
  • ellipse()
  • encode()
  • exif()
  • filesize()
  • fill()
  • filter()
  • fit()
  • flip()
  • gamma()
  • getCore()
  • greyscale()
  • height()
  • heighten()
  • insert()
  • interlace()
  • invert()
  • iptc()
  • limitColors()
  • line()
  • make()
  • mask()
  • mime()
  • opacity()
  • orientate()
  • pickColor()
  • pixel()
  • pixelate()
  • polygon()
  • psrResponse()
  • rectangle()
  • reset()
  • resize()
  • resizeCanvas()
  • response()
  • rotate()
  • save()
  • sharpen()
  • stream()
  • text()
  • trim()
  • widen()
  • width()

好的工具真的会让工作事半功倍.

文档地址: https://image.intervention.io/v2 

评论
点击登录