Intervention Image 图片套件其他图片处理

Laravel 图片套件 Photo Packages: Intervention Image 其他图片处理

cache() 快取

// 试着读取快取的图片
$img = Image::cache(function($image) {
    // 读取本机图片,将图片 resize 至 300x200,并作灰阶处理
    return $image->make('public/foo.jpg')
        ->resize(300, 200)
        ->greyscale();
});

若用档案快取,快取的图片资料会存放在 storage/framework/cache/data 目录下。

canvas() 建立图片画布

// 建立画布
$img = Image::canvas(300, 100);

Image::canvas(300, 100);

Image::canvas(300, 100);

// 建立画布,并使用 #ff0000 颜色当作背景
$img = Image::canvas(32, 32, '#ff0000');

Image::canvas(32, 32, ‘#ff0000’);

Image::canvas(32, 32, ‘#ff0000’);

ellipse() 画椭圆

// 建立颜色为 #ddd,宽度 300px,高度 100px 的画布
$img = Image::canvas(300, 100, '#ddd');

// 在画布中画出宽度 25px,高度 60px,位置在 (50,50) ,颜色为 #0000ff 的椭圆
$img->ellipse(25, 60, 50, 50, function ($draw) {
    $draw->background('#0000ff');
});

$img->ellipse(25, 60, 50, 50) color #0000ff

$img->ellipse(25, 60, 50, 50) color #0000ff

exif() 取得图片 exif 资讯

必须使用 Imagick 2.3.9 的函式库,并且必须编译 --enable-exif,且有 mbstring 的套件才可取得 exif 资讯

// 取得所有 exif 资讯
$data = Image::make('public/foo.jpg')->exif();

// 读取镜头 Model
$name = Image::make('public/foo.jpg')->exif('Model');

filesize() 档案大小

当档案不是从实际的档案读取,则会回传 false

// 建立图片实例
$img = Image::make('public/foo.jpg');

// 取得档案大小
$size = $img->filesize();

fill() 填满颜色或图片

// 建立画布,宽度 800px 高度 600px
$img = Image::canvas(800, 600);

// 填满 #ff5500 颜色
$img->fill('#ff5500');

$img->fill(’#ff5500’);

$img->fill(’#ff5500’);

// 填满图片
$img->fill('tile.png');

$img->fill(’tile.png’);

$img->fill(’tile.png’);

filter() 指定过滤器

可以将一些常用的过滤规则通通写在过滤器中,这样就可以直接指定 Filter 去做过滤

// init new image instance
$img = Image::make('foo.jpg');

// apply filter
$img->filter(new DemoFilter(45));
<?php

namespace Intervention\Image\Filters;

class DemoFilter implements FilterInterface
{
    const DEFAULT_SIZE = 10;
    private $size;

    public function __construct($size = null)
    {
        $this->size = is_numeric($size) ? intval($size) : self::DEFAULT_SIZE;
    }

    /**
     * 执行图片过滤
     */
    public function applyFilter(\Intervention\Image\Image $image)
    {
        $image->pixelate($this->size);
        $image->greyscale();

        return $image;
    }
}

width() 图片宽度

// 取得图片宽度
$width = Image::make('public/foo.jpg')->width();

height() 图片高度

// 取得图片高度
$height = Image::make('public/foo.jpg')->height();

interlace() 交错模式

如果是 JPEG 的图片,将会把图片储存成 progressive JPEG 的图片

// 建立图片实例
$img = Image::make('public/foo.png');

// 启用 interlacing
$img->interlace();

// 储存为 interlaced 的图片
$img->save();

// 开启 interlaced 图片
$img = Image::make('public/interlaced.gif');

// 关闭 interlacing
$img->interlace(false);

// 储存为 standard mode 的图片
$img->save();

mime() 取得图片 mime

$mime = Image::make('public/foo.jpg')->mime();

pickColor() 选出图片颜色色码

// 建立图片实例
$img = Image::make('public/foo.jpg');

// 选出位置在 (100,100) 的像素颜色: 阵列资料
$arraycolor = $img->pickColor(100, 100);

/*
array:4 [
  0 => 43
  1 => 58
  2 => 78
  3 => 1.0
]
*/

// 选出位置在 (100,100) 的像素颜色: rgb
$rgb_color = $img->pickColor(100, 100, 'rgb');
// rgba(43, 58, 78)

// 选出位置在 (100,100) 的像素颜色: rgba
$rgba_color = $img->pickColor(100, 100, 'rgba');
// rgba(43, 58, 78, 1.00)


// 选出位置在 (100,100) 的像素颜色: hex
$hex_color = $img->pickColor(100, 100, 'hex');
// #2b3a4e

pixel() 在指定像素点画出颜色

// 建立画布
$img = Image::canvas(100, 100, '#ddd');

// 在 (32,32) 像素画出蓝色
$img->pixel('#0000ff', 32, 32);

// 在 (32,32) 像素画出红色
$img->pixel('#ff0000', 64, 64);

$img->pixel();

$img->pixel();

polygon() 画出多边形

// 建立画布
$img = Image::canvas(800, 600, '#ddd');

// 定义多边形位置
$points = array(
    40,  50,  // Point 1 (x, y)
    20,  240, // Point 2 (x, y)
    60,  60,  // Point 3 (x, y)
    240, 20,  // Point 4 (x, y)
    50,  40,  // Point 5 (x, y)
    10,  10   // Point 6 (x, y)
);

// 画出多边形
$img->polygon($points, function ($draw) {
    // 背景颜色 #000ff
    $draw->background('#0000ff');
    // 边框宽度 1,颜色 #ff0000
    $draw->border(1, '#ff0000');
});

rectangle() 画出四边形

// 建立画布
$img = Image::canvas(250, 300, '#ddd');

// 画出红色四边形
$img->rectangle(5, 5, 195, 195, function ($draw) {
    $draw->background('#ff0000');
});

$img->rectangle() background #ff0000

$img->rectangle() background #ff0000

// 画出透明度 0.5 的四边形,使用 2px 黑色边框
$img->rectangle(5, 5, 195, 195, function ($draw) {
    $draw->background('rgba(255, 255, 255, 0.5)');
    $draw->border(2, '#000');
});

$img->rectangle() background rgba(255, 255, 255, 0.5) border 2px #000

$img->rectangle() background rgba(255, 255, 255, 0.5) border 2px #000

response() 回应包含 HTTP Header 图片

参数1: 图片类型

  • jpg — return JPEG encoded image data
  • png — return Portable Network Graphics (PNG) encoded image data
  • gif — return Graphics Interchange Format (GIF) encoded image data
  • tif — return Tagged Image File Format (TIFF) encoded image data
  • bmp — return Bitmap (BMP) encoded image data

参数2: 图片品质

  • 数值介于 0~100
// 建立图片实例
$img = Image::make('public/foo.jpg');
return $img->response();

// 回应 png 图片
return $img->response('jpg');

$img->response(&lsquo;jpg&rsquo;);

$img->response(‘jpg’);

// 回应 jpg 图片 品质 20
return $img->response('jpg', 20);

$img->response(&lsquo;jpg&rsquo;, 20);

$img->response(‘jpg’, 20);