图片处理扩展 Intervention/image 的简单使用

您所在的位置:网站首页 image编程PHP 图片处理扩展 Intervention/image 的简单使用

图片处理扩展 Intervention/image 的简单使用

2023-12-26 20:33| 来源: 网络整理| 查看: 265

Intervention Image是一个开源的PHP图像处理和操作库。 它提供了一种创建,编辑和合成图像的简便且富有表现力的方式,并支持当前两个最常见的图像处理库GD Library和Imagick。编写该类是为了使PHP图像操作更容易且更具表现力。 无论您是要创建图像缩略图,水印还是对大型图像文件进行格式化,Intervention Image都可以帮助您以最少的代码行轻松地管理每个任务。该库遵循FIG标准PSR-2,以确保共享的PHP代码之间的高度互操作性,并且经过了完全的单元测试。

一、 环境要求 PHP >=5.4Fileinfo ExtensionGD Library (>=2.0)Imagick PHP extension (>=6.5.7) 二、 安装及配置 composer 安装 composer require intervention/image 在 app/config/app.php 添加 providers 数组中添加如下代码: /* * Package Service Providers... */ Intervention\Image\ImageServiceProvider::class, 在 app/config/app.php 添加 aliases 数组中添加如下代码: 'Image' => Intervention\Image\Facades\Image::class, 发布扩展生成 config/image.php 配置文件 php artisan vendor:publish --provider="Intervention\Image\ImageServiceProviderLaravelRecent" 在 config/image.php 修改驱动为imagick // Imagick 处理效果和效率比 GD 好 'driver' => 'imagick' 三、常用API 及用法 创建图像 canvas() 创建一个空的画布 public Intervention\Image\ImageManager canvas(integer $width, integer $height, [mixed $bgcolor]) 参数 描述 width 宽度 height 高度 bgcolor 背景颜色(可选) // 实例化一个空的 100*100 透明背景空 canvas 图像资源对象 $img = Image::canvas(100, 100); // 实例化一个空的 100*100 背景色为 #ff0000 canvas 图像资源对象 $img = Image::canvas(100, 100, '#ff0000'); make() 从给定图片实例化新图像实例 public static Intervention\Image\ImageManager make(mixed $source) 参数 描述 source 该方法高度可变,可读取下面列出的所有输入类型:string文件系统的图片路径,string图片的URL地址(allow_url_fopen必须启用),string 二进制图片数据,string data-url编码的图片数据,string base64编码的图片数据,resource gd类型的PHP资源(当使用GD库),object Imagick实例(当使用Imagick库),object Intervention\Image\Image 实例,object SplFileInfo instance (To handle Laravel file uploads via Symfony\Component\HttpFoundation\File\UploadedFile) laravel框架自带的图片上传实例 // 以 foo.jpg 资源文件实例化一个 Image 对象 $img = Image::make('public/foo.jpg'); // 实例化一个 GD 创建的图象的 Image 对象 $img = Image::make(imagecreatefromjpeg('public/foo.jpg')); // URL $img = Image::make('http://example.com/example.jpg'); // 直接从 Laravel 文件上传资源实例化一个 Image 对象 $img = Image::make(Input::file('photo')); 改变图像尺寸的方法 resize() 调整当前图像的大小 public Intervention\Image\Image resize (integer $width, integer $height, [Closure $callback]) 参数 描述 width 设定宽度 height 设定高度 callback 闭包回调函数(可选),aspectRatio()用于约束宽高比例,upsize()防止图像放大(如果调整宽度超过图像原始宽度时,就保持图像原始宽度不变) // 将图像调整为固定大小 $img->resize(300, 200); // 防止可能的尺寸变化 $img->resize(300, null, function ($constraint) { $constraint->aspectRatio(); // 按比例调整图片大小 $constraint->upsize(); // 这里如果宽度不足 300 时,保持原来尺寸 }); widen()按给定宽度按比例调整图像大小 public Intervention\Image\Image widen(integer $width, [Closure $callback]) 参数 描述 width 设定宽度 callback 闭包回调函数(可选),upsize()防止不必要的图像放大 // 将图像宽度调整为 300px,注意:宽度缩放的时候,高度是按比例变化的 $img = Image::make('public/foo.jpg')->widen(300); // 将图像宽度调整为 300px,如果调整宽度超过图像原始宽度时,就保持图像原始宽度不变 $img = Image::make('public/foo.jpg')->widen(300, function ($constraint) { $constraint->upsize(); });

heighten() 和 widen() 功能类似

crop() 裁剪图像 public Intervention\Image\Image crop(int $width, int $height, [int $x, int $y]) 参数 描述 width 裁剪矩形宽度 height 裁剪矩形高度 x 裁剪矩形左上角的X坐标。 默认情况下,矩形部分将在当前图像上居中 y 裁剪矩形左上角的Y坐标。 默认情况下,矩形部分将在当前图像上居中 $img = Image::make('public/foo.jpg'); // 将图像从坐标 (25, 25)为切口裁剪为 200 * 100 大小 $img->crop(200, 100, 25, 25); $img->crop(200, 100); fit() 以智能的方式,结合裁剪和调整来格式化图片,该方法将会自动找到给定的宽、高的最佳宽高比,裁剪并调整到给定尺寸 public Intervention.mage.mage fit( int $width, [ [int $height], [Closure $callback, [ string $position ]] ]) 参数 描述 width 裁剪出最合适的宽高比后,图像的宽度将被调整为该宽度 height 裁剪出最合适的宽高比后,图像的高度将被调整为该高度(可选), 如果未给出高度,则方法将使用与宽度相同的值 callback 闭包回调函数(可选),upsize()防止不必要的图像放大 position 设置裁剪的位置(可选), 可选值:top-left、 top、top-right 、left、center (default)、right、bottom-left 、bottom、bottom-right $img = Image::make('public/foo.jpg'); // 按照 1:1 的比例裁剪,然后缩放大小为 100 * 100 $img->fit(100); // 按照 5:6 的比例裁剪,然后缩放大小为 100 * 120,并防止图片放大 $img->fit(100, 120, function ($constraint) { $constraint->upsize(); }); resizeCanvas() 调整图像的边界到给定的宽和高 public Intervention\Image\Image resizeCanvas (int $width, int $height, [string $anchor, [boolean $relative, [mixed $bgcolor]]]) 参数 描述 width 绝对模式下图像的新宽度 或 相对模式下在原来图片尺寸上,添加或者减去给定的宽、高 height 绝对模式下图像的新高度,或相对模式下要从高度增加或减少的像素数量 anchor 设置要调整图像大小的位置。 例如,如果将锚点设置为左下角,则此边将被固定,并且会将width / height的值添加或减去到图像的右上角,可选值:top-left、 top、top-right 、left、center (默认)、right、bottom-left 、bottom、bottom-right relative 确定调整大小将在相对模式下进行, 这意味着width或height的值将与图像的当前高度相加或相减, 默认值:false bgcolor 图像新区域的背景色, 可以以不同的颜色格式传递背景色, 默认值:#ffffff,如果输出格式支持则透明 $img = Image::make('public/foo.jpg'); // 调整图像画布的大小为 300 * 200 $img->resizeCanvas(300, 200); // 只调整画布的宽度为 300 ,高度不变 $img->resizeCanvas(300, null); // 从右下角开始来调整画布的大小为 300 * 200 $img->resizeCanvas(300, 200, 'bottom-right'); // 在相对模式下调整画布的大小为 以原始图片中心点为锚点 ,宽度增加 10 ,高度减少 10 $img->resizeCanvas(10, -10, 'center', true,); // 设置背景色 $img->resizeCanvas(1280, 720, 'center', false, 'ff00ff'); 绘画的方法 text() 将文字写入到图片上 public Intervention\Image\Image text(string $text, [integer $x, [integer $y, [Closure $callback]]]) 参数 描述 text 要写入的文字 x 定义写入文字第一个字符基点的 X 坐标(可选), 默认值:0 y 定义写入文字第一个字符基点的 Y 坐标(可选), 默认值:0 callback 回调函数(可选): file($filepath) 设置字体文件的路径或GD 库内部字体,范围1到5之间的整数值,默认值1 size($size) 大小,字体大小仅在设置字体文件时可用,否则将被忽略, 默认值:12color($color)颜色align($align)水平对齐方式:left、right、center,默认leftvalign($valign)垂直对齐方式:top、bottom、middle,默认bottomangle($angle)旋转角度,文本将围绕垂直和水平对齐点逆时针旋转, 旋转仅在设置字体文件时可用,否则将被忽略 $img = Image::make(''public/foo.png'); $img->text('测试文字', 50,50, function($font) { $font->file('public/Alibaba-PuHuiTi-Light.ttf'); $font->size(24); $font->color('#000'); //$font->align('center'); //$font->valign('top'); //$font->angle(45); }); pixel() 绘制点( 在给定的坐标上,以给定的颜色绘制单个像素点) public Intervention\Image\Image pixel(mixed $color, integer $x, integer $y) 参数 描述 color 颜色 x X坐标 y Y坐标 $img = Image::canvas(100, 100, '#ddd'); // 绘制一个坐标为 (32, 32),颜色为蓝色的点 $img->pixel('#0000ff', 32, 32); line() 绘制线 public Intervention\Image\Image line(int $x1, int $y1, int $x2, int $y2, [Closure $callback]) 参数 描述 x1 起点的X坐标 y1 起点的Y坐标 x2 终点的X坐标 y2 终点的Y坐标 callback 回调函数( 可选 ): color()设置颜色, 默认值:#000000 width()设置线条的宽度(GD驱动程序不提供该选项)默认值:1px $img = Image::make('public/foo.jpg'); // 绘制一条起点坐标为(10, 145),终点坐标为(185, 145),宽度为 5px 的红色线 $img->line(10, 145, 185, 145, function($draw){ $draw->color('#f00'); $draw->width(1); }); rectangle() 绘制矩形(左上角位于x,y点1,右下角位于x,y点2) public Intervention\Image\Image rectangle(int $x1, int $y1, int $x2, int $y2, [Closure $callback]) 参数 描述 x1 矩形左上角点的X坐标 y1 矩形左上角点的Y坐标 x2 矩形右下角点的X坐标 y2 矩形右下角点的Y坐标 callback 回调定义整体外观(可选 ): background($color) 设置背景色 ,border($width,$color) 设置矩形的边框 $img = Image::make('public/foo.jpg'); // 绘制左上角点坐标为 (5, 95) 右下角点坐标 (190, 143) ,边框宽度为 2px颜色为红色 ,背景色为红色的矩形 $img->rectangle(5, 95, 190, 143, function($draw){ //$draw->background('#FFF'); $draw->border(2, '#f00'); }); circle() 绘制圆 public Intervention\Image\Image circle( integer $diameter, integer $x, integer $y, [Closure $callback] ) 参数 描述 diameter 直径 pos_x 圆心X坐标 pos_y 圆心Y坐标 callback 回调定义整体外观 (可选 ):background($color) 设置背景色border($width, $color)设置边的宽度和颜色 $img = Image::canvas(300, 200, '#ddd'); // 绘制一个半径为 10px,圆心坐标为 (100, 100),边框宽度为 1px ,边框颜色为红色,并填充颜色为蓝色的圆 $img->circle(10, 100, 100, function ($draw) { $draw->background('#0000ff'); $draw->border(1, '#f00'); }); ellipse() 绘制椭圆 public Intervention\Image\Image ellipse(int $width, int $height, int $x, int $y, [Closure $callback]) 参数 描述 width 椭圆的宽度, 默认值:10 height 椭圆高度, 默认值:10 x 中心点的 X 坐标 y 中心点的 Y 坐标 callback 回调定义整体外观(可选 ):background($color) 设置背景色,border($width, $color)设置边的宽度和颜色 $img = Image::make('public/foo.jpg'); // 绘制宽度为 200,高度为 80,中心点为 (100, 118),边框宽度为 1px 颜色为红色,背景色为蓝色的椭圆 $img->ellipse(200, 80, 100, 118, function ($draw) { // $draw->background('#0000ff'); $draw->border(1, '#ff0000'); });

*polygon() 绘制多边形

public Intervention\Image\Image polygon(array $points, [Closure $callback]) 参数 描述 points 各个角的坐标,格式为一维数组 ,例如[ 0, 0, 1100, 0, 1100, 250] callback 回调定义整体外观(可选 ):background($color) 设置背景色,border($width, $color)设置边的宽度和颜色 $img = Image::canvas(800, 600, '#ddd'); // 绘制一个边框为红色,填充背景色为蓝色的多边形 $img->polygon([ 0, 0, 1100, 0, 1100, 250 ], function ($draw) { $draw->background('#0000ff'); $draw->border(1, '#ff0000'); }); 图像的其它处理方法 fill() 用颜色或图案填充图像 public Intervention\Image\Image fill(mixed $filling, [integer $x, integer $y]) 参数 描述 filling 填充颜色或图像,图像资源格式如下: string文件系统的图片路径string图片的 URL 地址(allow_url_fopen必须启用)string二进制图片数据string data-url 编码的图片数据string base64 编码的图片数据resource gd 类型的 PHP 资源(当使用 GD 库)object Imagick 实例(当使用Imagick库)objectIntervention\Image\Image 实例object SplFileInfo instance (To handle Laravel file uploads via Symfony\Component\HttpFoundation\File\UploadedFile) laravel 框架自带的图片上传实例 x 填充起始点的X轴坐标(可选) y 填充起始点的Y轴坐标(可选)

如果指定了x、y坐标,则将基于此位置的颜色来填充,未指定坐标时填充整个图像图形学中Flood Fill是 漫水填充,是用来填充区域的。就好比在一个地方一直倒水,水会往四周满延开,直到高地阻挡。Flood Fill就是从一个点开始往四周寻找相同的点填充,直到有不同的点为止。

$img = Image::canvas(800, 600); // 用 #cccccc 填充图像 $img->fill('#cccccc'); // 用 tile.png 填充图像 $img->fill('tile.png'); // flood fill 填充 $img->fill('#ff00ff', 0, 0); insert() 插入图片 public Intervention\Image\Image insert(mixed $source, [string $position, [integer $x, integer $y]]) 参数 描述 source 要插入的图像, 该方法可以处理以下类型的输入: string文件系统的图片路径string图片的URL 地址(allow_url_fopen必须启用)string二进制图片数据string data-url 编码的图片数据stringbase64编码的图片数据resource gd 类型的 PHP 资源(当使用 GD 库)object Imagick 实例(当使用 Imagick 库)object Intervention\Image\Image 实例objectSplFileInfo instance (To handle Laravel file uploads via Symfony\Component\HttpFoundation\File\UploadedFile) laravel 框架自带的图片上传实例 position 插入图像的位置(可选),参数:top-left (默认)toptop-rightleftcenterrightbottom-leftbottombottom-right x X 偏移坐标 默认值:0(可选) y Y 偏移坐标 默认值:0(可选) $img = Image::make('public/foo.jpg'); // 在右下角插入10像素偏移量的水印 $img->insert('public/watermark.png', 'bottom-right', 10, 10); 获取图像信息常用的方法 width() 获取图像宽度 // 获取图像的宽度 $width = Image::make('public/foo.jpg')->width();

height() 功能和 width() 类比

输出图像数据的方法 save() 保存图像,可指定路径和图像质量public Intervention\Image\Image save([string $path, [int $quality], [string $format]]) 参数 描述 path 设置图像保存路径(可选),如果图像是从一个存在的文件路径创建的,同时我们未指定 $path,将会尝试覆盖该路径 quality 设置图像质量(可选)范围从0(质量差,小文件)到100(最佳质量,大文件), 仅当JPG格式时有用,因为PNG压缩是无损的,并且不会影响图像质量, 默认值为90 format 设置图像将被保存的格式(可选) $img = Image::make('public/foo.jpg')->resize(300, 200); $img->save('public/foo', 80, 'jpg'); response() 直接作为HTTP响应 public Intervention\Image\Image response([string $format, [integer $quality]]) 参数 描述 format 设置图像的格式( 可选),jpg、png、gif、tif、bmp,默认是jpeg quality 设置图像质量( 可选,范围从0(质量差,小文件)到100(最佳质量,大文件), 仅当JPG格式时有用,因为PNG压缩是无损的,并且不会影响图像质量, 默认值为90 $img = Image::canvas(800, 600, '#ff0000'); // 直接输出 echo $img->response(); encode() 图像进行编码 public Intervention\Image\Image encode([mixed $format, [int $quality]]) 参数 描述 format 编码格式( 可选): jpg、png、gif、tif、bmp、data-url(base64)。默认返回的编码后的数据。默认类型是 jpeg quality 设置图像质量( 可选),范围从0(质量差,小文件)到100(最佳质量,大文件), 仅当JPG格式时有用,因为PNG压缩是无损的,并且不会影响图像质量, 默认值为90 // 将 png 格式图像编码为 jpg 格式 $jpg = (string) Image::make('public/foo.png')->encode('jpg', 75); // 将图像编码为base64 格式 $data = (string) Image::make('public/bar.png')->encode('data-url'); 本作品采用《CC 协议》,转载必须注明作者和本文链接


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3