meyfa/phpunit-assert-gd

PHPUnit 匹配/断言 GD 图像资源

v4.1.0 2024-04-16 11:24 UTC

This package is auto-updated.

Last update: 2024-09-16 13:05:57 UTC


README

CI

尝试使用 PHPUnit 断言图像?此项目提供了一个约束和所需的断言,允许您进行此操作。

它支持比较磁盘上的文件以及内存中的图像资源。

安装

将此包添加到您的 Composer 开发依赖项

composer require --dev meyfa/phpunit-assert-gd

兼容性表格

示例

断言作为特性可用,因此您可以在测试用例类中轻松使用它们。

<?php
use AssertGD\GDAssertTrait;

class ExampleTest extends PHPUnit\Framework\TestCase
{
    // this trait adds the assert methods to your test case
    use GDAssertTrait;

    public function testSomething()
    {
        $this->assertSimilarGD('./tests/expected.png', './tests/actual.png');
    }
}

普通比较

如果预期两个图像完全相等,请使用 assertSimilarGD。如果预期存在差异,请使用 assertNotSimilarGD

$this->assertSimilarGD('./tests/img.png', './tests/same.png');
$this->assertNotSimilarGD('./tests/img.png', './tests/other.png');

阈值值

提供介于 0 和 1 之间的数字来设置错误阈值。例如,0.2 的值允许最多 20% 的差异。

$this->assertSimilarGD('./tests/img.png', './tests/similar.png', '', 0.2);

参数类型

除了文件路径外,您还可以传递 GD 图像资源。这样可以消除在比较之前写入磁盘的需求。

$img = imagecreatetruecolor(10, 10);
$this->assertSimilarGD('./tests/empty-10x10.png', $img);
imagedestroy($img);

手动约束

如果您需要配置模拟对象或执行其他更复杂的匹配调用,请使用 isSimilarGD 获取约束对象(类似于由 equalToisTrue 等返回的对象)。

$this->assertThat(
    './tests/actual.png',
    $this->isSimilarGD('./tests/expected.png')
);

差异计算

默认情况下,此库通过比较源图像和测试图像每个像素坐标处的 RGBA 颜色通道信息来计算两个图像之间的差异,并计算每个像素之间的差异平均值来计算差异分数。

这对于大多数情况都适用,但在某些情况下可能会给出错误的评分,例如包含大量透明度的图像。

可以通过向 assertSimilarGDassertNotSimilarGD 方法的第五个参数添加新的 ScaledRgbChannels 实例来启用一种替代计算方法,该方法根据它们的 alpha 透明度缩放 RGB 颜色通道 - 这意味着更透明的像素将对难度评分的影响较小,以补偿它们在图像本身上的不太明显的差异。

use AssertGD\DiffCalculator\ScaledRgbChannels;

public function testImage()
{
    $this->assertSimilarGD(
        'expected.png',
        'actual.png',
        '',
        0,
        new ScaledRgbChannels()
    );
}

自定义差异计算器

如果您希望完全自定义此库中的计算方式,您也可以通过创建一个实现 AssertGd\DiffCalculator 接口的类来创建自己的计算算法。

实现此接口的类必须提供一个 calculate 方法,该方法接受两个 GdImage 实例和两个图像中比较的像素的 X 和 Y 坐标(作为 int)。

该方法应返回一个介于 01 之间的 float,其中 0 是完全匹配,1 是完全相反。

然后,您可以将类的实例作为 assertSimilarGDassertNotSimilarGD 方法的第五个参数提供,以使用此计算方法确定图像差异。