ccmiller2018/image-editor

PHP 图像编辑器

0.0.1 2024-01-20 23:23 UTC

This package is auto-updated.

Last update: 2024-09-21 00:54:21 UTC


README

ImageEditor PHP 包提供了一种方便灵活的方式,使用 GD 扩展来处理图像。它允许您执行各种操作,如调整大小、应用过滤器以及将图像保存为不同格式。

安装

通过 Composer 安装包

composer require ccmiller2018/image-editor

需求

  • PHP 7.4 或更高版本
  • GD 扩展已启用

用法

use Ccmiller2018\ImageEditor\ImageEditor;

// Create an instance of ImageEditor
$imageEditor = new ImageEditor();

// Load an image from a file
$imageEditor->loadImage('path/to/image.jpg');

// Perform operations on the image
$imageEditor
    ->resize(300, 200)
    ->grayscale()
    ->saveTo('path/to/output.jpg');

可用方法

使用此包:深入了解

此包完全围绕能够以流畅格式快速轻松地应用多个过滤器到传入的图像这一想法而设计。

让我们从最简单的情况开始,逐步深入。

我们的源图像

image

images/sources/baboon.png 这张图片是 512px X 512px

image

images/sources/HappyFish.png 这张图片是 259px X 194px `

调整图像大小

<?php

declare(strict_types=1);

use Ccmiller2018\ImageEditor\ImageEditor;

require_once('vendor/autoload.php');

$editor = new ImageEditor();

$editor->loadImage('images/sources/baboon.jpg')
    ->resize(100, 100)
    ->saveTo('images/outputs/baboon-resize-100-100.jpg');

此操作从文件中读取一个图像,将其调整为 100px X 100px 并保存。它使用重采样来确保最佳质量结果。

image

images/outputs/baboon-resize-100-100.png 这张图片是 100px X 100px

您也可以进行上采样,从而增加图像大小

<?php

declare(strict_types=1);

use Ccmiller2018\ImageEditor\ImageEditor;

require_once('vendor/autoload.php');

$editor = new ImageEditor();

$editor->loadImage('images/sources/baboon.jpg')
    ->resize(1024, 1024)
    ->saveTo('images/outputs/baboon-resize-1024-1024.jpg');

此操作从文件中读取一个图像,将其调整为 1024px X 1024px 并保存。它使用重采样来确保最佳质量结果。

image

images/outputs/baboon-resize-1024-1024.png 这张图片是 1024px X 1024px

转换图像类型

<?php

declare(strict_types=1);

use Ccmiller2018\ImageEditor\ImageEditor;

require_once('vendor/autoload.php');

$editor = new ImageEditor();

$editor->loadImage('images/sources/baboon.png')
    ->as('jpeg')
    ->saveTo('images/outputs/baboon.jpg');

此操作简单地将 baboon 文件保存为 jpeg 格式。

image

images/outputs/baboon.jpg 这张图片是 512px X 512px

将图像转换为灰度

<?php

declare(strict_types=1);

use Ccmiller2018\ImageEditor\ImageEditor;

require_once('vendor/autoload.php');

$editor = new ImageEditor();

$editor->loadImage('images/sources/baboon.png')
    ->grayscale()
    ->saveTo('images/outputs/baboon-grayscale.png');

使用灰度过滤,此操作可以快速将图像转换为灰度。

image

images/outputs/baboon-grayscale.png 这张图片是 512px X 512px

链式方法

<?php

declare(strict_types=1);

use Ccmiller2018\ImageEditor\ImageEditor;

require_once('vendor/autoload.php');

$editor = new ImageEditor();

$editor->loadImage('images/sources/baboon.png')
    ->resize(256, 256)
    ->grayscale()
    ->as('jpeg')
    ->saveTo('images/outputs/baboon-grayscale-resize.jpg');

方法几乎总是可以链式调用的,例如 - 我们可以读取文件,调整大小,将其转换为灰度,并保存为 jpeg

image

images/outputs/baboon.jpg 这张图片是 256px X 256px

去除背景

这是一个更高级的过滤器,它可以检测背景颜色并将其移除。这在大多数情况下都会有效。

<?php

declare(strict_types=1);

use Ccmiller2018\ImageEditor\ImageEditor;

require_once('vendor/autoload.php');

$editor = new ImageEditor();

$editor->loadImage('images/sources/HappyFish.jpg')
    ->removeBackground()
    ->saveTo('images/outputs/HappyFish-remove-background.jpg');

image

images/outputs/HappyFish-remove-background.jpg

负图像

这将找到图像中每个像素的直接反转,并使用该颜色代替

<?php

declare(strict_types=1);

use Ccmiller2018\ImageEditor\ImageEditor;

require_once('vendor/autoload.php');

$editor = new ImageEditor();

$editor->loadImage('images/sources/baboon.png')
    ->negative()
    ->saveTo('images/outputs/baboon-negative.png');

image

images/outputs/baboon-negative.png

链式调用多个方法以获得所需的结果

我们将在这里链式调用多个方法,以从源 baboon 中创建我们想要的图像。

<?php

declare(strict_types=1);

use Ccmiller2018\ImageEditor\ImageEditor;

require_once('vendor/autoload.php');

$editor = new ImageEditor();

$editor->loadImage('images/sources/baboon.png')
    ->resize(1024, 1024)
    ->posterize()
    ->posterize()
    ->sketch()
    ->grayscale()
    ->adjustBrightness(-30)
    ->adjustContrast(30)
    ->negative()
    ->edgeDetection()
    ->removeBackground(120)
    ->negative()
    ->adjustBrightness(60)
    ->sepia()
    ->saveTo('images/outputs/baboon-complex.png');

这将进行多次调整,以确保最终获得我们想要的图像。

image

images/outputs/baboon-complex.png

关于 customConvolution 的一席话

ImageEditor 类中的 customConvolution 方法用于将自定义卷积矩阵应用到图像上。卷积是一种数学运算,用于将两组信息结合以生成第三组。在图像处理中,卷积通常用于将各种过滤器或效果应用到图像上。

customConvolution 方法的目的是在图像上使用提供的参数的自定义 3x3 矩阵执行卷积运算。

卷积是图像处理中常用的技术,用于模糊、锐化、边缘检测等任务。

卷积核

卷积过程从称为卷积核的小矩阵开始。在图像处理的情况下,这个矩阵通常是 3x3 矩阵,尽管也可以使用其他大小。核的元素表示权重或系数。

滑动核

卷积核系统地在整个图像上滑动,逐像素进行,从左上角开始。在每个位置,核的中心与正在处理的当前像素对齐。

逐元素乘法

对于每个位置,核的元素与核覆盖的图像区域内的对应像素值逐元素相乘。每次乘法的结果代表该像素对输出像素最终值的贡献。

求和

逐元素乘法得到的产品然后求和。和代表核覆盖的图像区域内像素值的加权组合。

归一化

在某些情况下,将和除以归一化因子(除数),以确保结果图像中像素的强度值保持在合理范围内。归一化通常是为了防止图像过亮或过暗而必要的。

更新图像

卷积操作的结果成为核中心的像素的新值。

这个过程对图像中的每个像素重复进行,从而生成一个新的图像,该图像反映了卷积操作的效果。

边界处理

在卷积中处理边界是一个考虑因素,尤其是当核超出图像边界时。边界处理有不同的方法,如零填充、边缘复制或使用镜像值。

对图像的影响

卷积核中值的选取决定了所应用图像处理效果的特性。不同的核产生不同的效果,如模糊、锐化、边缘检测等。

自定义卷积示例

<?php

declare(strict_types=1);

use Ccmiller2018\ImageEditor\ImageEditor;

require_once('vendor/autoload.php');

$editor = new ImageEditor();

$matrix = [
    [0,-100,0],
    [-100,500,-100],
    [0,-100,0]
];

$editor->loadImage('images/sources/baboon.png')
    ->customConvolution($matrix)
    ->saveTo('images/outputs/baboon-custom-convolution.png');

image

images/outputs/baboon-custom-convolution.png