炭黑/image

PHP 图像处理库

v5.0.0 2024-03-13 15:05 UTC

README

图像包提供了一致的API,用于图像处理和集成,包括GD(即将推出)和ImageMagick(通过PHP扩展或通过shell命令)。

安装

composer require charcoal/image

概述

为什么还需要另一个PHP图像库?

为什么不呢? 炭黑图像库已经开发和应用于内部项目近10年。最近,它已被重写为更现代的PHP风格,并以开源许可(MIT)发布。

与现有的PHP库(如 ImagineIntervention)的主要区别是

  • 效果参数以数组形式发送。
    • blur($sigma, $radius) 还是 blur($radius, $sigma)
    • 使用炭黑图像库时,它是恒定的:blur([ 'radius' => $radius, 'sigma' => $sigma ]);
  • 它支持 ImageMagick 二进制文件
    • 这似乎是一个相当常见的设置,即ImageMagick安装在服务器上,但PHP的 Imagick 库没有安装。
  • 除了微小的 charcoal/factory 之外,没有外部依赖。

用法

通常,图像包用于加载图像,执行操作(称为 效果,如模糊、缩放、水印等)并写入修改后的图像。

使用 setData()

所有效果可以一次性添加到一个数组中。

$img = new Charcoal\Image\Imagick\ImagickImage();

$img->setData([
    'source'  => 'example.png',
    'target'  => 'example-modified.png',
    'effects' => [
        [
            'type'  => 'resize',
            'width' => 600,
        ],
        [
            'type'  => 'blur',
            'mode'  => 'gaussian',
            'sigma' => 5,
        ],
    ],
]);
$img->process();
$img->save();

setData() 对于效果来自JSON配置结构等场景非常适用。

使用魔术方法

所有效果也可以作为图像的方法(使用 __call() 魔术)使用。

use Charcoal\Image\Imagick\ImagickImage as Image;

$img = new Image();
$img->open('example.png');
$img->resize([
    'width' => 600
]);
$img->blur([
    'mode'  => 'gaussian',
    'sigma' => 5
]);
$img->save();

链式版本

此外,还展示了使用 ImageFactory 构造函数方法。

use Charcoal\Image\ImageFactory;

$factory = new ImageFactory();
$img = $factory->create('imagemagick');
$img->open('example.png')
    ->resize([
        'mode'   => 'best_fit',
        'width'  => 350,
        'height' => 350,
    ])
    ->rotate([
        'angle' => 90,
    ])
    ->modulate([
        'luminance' => 50,
    ])
    ->save('modified-target.png');

可用的效果和操作在 API 文档 中有记录。

可用的图像驱动器

目前只有2个可用的驱动器

  • imagick
    • imagick驱动器使用基于imagemagick的Imagick PHP扩展。
  • imagemagick
    • imagemagick驱动器直接使用imagemagick二进制文件,在单独的shell进程中运行操作,而不是直接在PHP中。
    • 系统上应该安装并可以从PHP进程访问的命令 convertmogrifyidentify

👉 即将推出,使用PHP内建图像功能的gd驱动器。

如何选择驱动器

有两种不同的方法为特定驱动器实例化一个 Image 对象。

直接

$img = new Charcoal\Image\Imagick\ImagickImage();
// or
$img = new Charcoal\Image\Imagemagick\ImagemagickImage();

使用提供的 ImageFactory

use Charcoal\Image\ImageFactory;

$factory = new ImageFactory();

$img = $factory->create('imagick');
// or
$img = $factory->create('imagemagick');

资源