sokil / php-image
实现一些图像操作,如裁剪和缩放。
Requires
- php: >=7.2
- ext-gd: *
Requires (Dev)
- php-coveralls/php-coveralls: ^2.2.0
- phpunit/phpunit: >=8.4.3
README
安装
您可以通过 composer 安装库
composer require sokil/php-image
打开图像
创建图像实例
$image = new \Sokil\Image\Image($pathToImage);
工厂类封装了所有图像对象的实例化,并允许配置创建的图像
$factory = new \Sokil\Image\Factory;
从文件名打开
$factory->openImage('/path/to/image.jpeg');
从 GD 资源打开
$factory->openImage($imageResource);
创建新图像
$image = $factory->createImage(300, 200);
缩放图像
有四种缩放模式:'scale'、'fit'、'crop' 和 'cache'。
$newImage = $factory->resizeImage($image, $mode, $width, $height);
如果您想注册自己的缩放策略,请从 \Sokil\Image\AbstractResizeStrategy 类扩展,并添加命名空间
// through factory constructor $factory = new \Sokil\Image\Factory([ 'namespace' => [ 'resize' => '\Vendor\ResizeStrategy', ], ]); // through factory method $factory->addResizeStrategyNamespace('\Vendor\ResizeStrategy'); // directly to image $image->addResizeStrategyNamespace('\Vendor\ResizeStrategy');
类按照添加的优先级进行搜索。
裁剪图像
要通过指定的宽度和高度以及在定义的坐标中获取图像的一部分,请使用
$x = 10; $y = 10; $width = 20; $height = 20; $image->crop($x, $y, $width, $height);
旋转图像
旋转是逆时针方向;
旋转 90 度
$image->rotate(90);
旋转 45 度,并用黑色填充空字段
$image->rotate(45, '#000000');
旋转 45 度,并用透明绿色填充空字段
$image->rotate(45, '#8000FF00');
翻转图像
垂直翻转
$image->flipVertical();
水平翻转
$image->flipHorisontal();
两个方向都翻转
$image->flipBoth();
过滤器
灰度图像
$factory->filterImage($image, 'greyscale');
如果您想注册自己的过滤器策略以支持新的过滤器,请从 \Sokil\Image\AbstractFilterStrategy 类扩展,并添加命名空间
// through factory constructor $factory = new \Sokil\Image\Factory([ 'namespace' => [ 'filter' => '\Vendor\FilterStrategy', ], ]); // through factory method $factory->addFilterStrategyNamespace('\Vendor\FilterStrategy'); // or directly to image $image->addFilterStrategyNamespace('\Vendor\FilterStrategy');
类按照添加的优先级进行搜索。
图像元素
向图像添加元素
元素是所有可以附加到图像上的内容:文本、形状、其他图像。首先我们需要创建元素实例并配置它
$someElement = $factory->createElement('someElement')->setParam1('someValue');
然后,将元素放置在图像的某个坐标上
$image->appendElementAtPosition($someElement, 30, 30);
您可以创建自己的元素,这些元素继承自 \Sokil\Image\AbstractElement 类,并注册命名空间
namespace Vendor\Elements; class Circle extends \Sokil\Image\AbstractElement { public function setRadius($r) { // code to set radius } public function draw($resource, $x, $y) { // code to draw circle on image $resouce at coordinates ($x, $y) } } // through factory constructor $factory = new \Sokil\Image\Factory([ 'namespace' => [ 'element' => '\Vendor\Element', ], ]); // through factory method $factory->addElementNamespace('\Vendor\Elements');
现在您可以绘制自己的圆形了
$circle = $factory->createElement('circle')->setRadiud(100); $image->appendElementAtPosition($circle, 100, 100);
添加文本
要创建文本元素,您可以使用以下方法之一
$textElement = $factory->createElement('text'); // or through helper $textElement = $factory->createTextElement();
首先,我们需要配置文本元素
$factory = new \Sokil\Image\Factory(); // text element $element = $factory ->createTextElement() ->setText('hello world') ->setAngle(20) ->setSize(40) ->setColor('#ababab') ->setFont(__DIR__ . '/FreeSerif.ttf');
现在,我们需要在图像的某个坐标上放置元素
$image->appendElementAtPosition($element, 50, 150);
保存图像
库支持三种图像格式:'jpeg'、'png' 和 'gif'。
要将图像写入磁盘,您必须定义图像格式并配置写入策略
$factory->writeImage($image, 'jpeg', function(\Sokil\Image\WriteStrategy\JpegWriteStrategy $strategy) { $strategy->setQuality(98)->toFile('/path/to/file.jpg'); });
要将图像发送到 STDOUT,您必须定义图像格式并配置写入策略
$factory->writeImage($image, 'jpeg', function(\Sokil\Image\WriteStrategy\JpegWriteStrategy $strategy) { $strategy->setQuality(98)->toStdout(); });
如果您想注册自己的写入策略以支持新的图像格式,请从 \Sokil\Image\AbstractWriteStrategy 类扩展,并添加命名空间
// through factory constructor $factory = new \Sokil\Image\Factory([ 'namespace' => [ 'write' => '\Vendor\WriteStrategy', ], ]); // through factory method $factory->addWriteStrategyNamespace('\Vendor\WriteStrategy'); // or directly to image $image->addWriteStrategyNamespace('\Vendor\WriteStrategy');
类按照添加的优先级进行搜索。