Пытаетесь утвердить изображения с помощью PHPUnit? Этот проект предоставляет ограничение и необходимые утверждения, которые позволяют вам это сделать.
Он поддерживает сравнение файлов на диске, а также ресурсов изображений в памяти.
Добавьте этот пакет в зависимости от разработки Composer:
composer require --dev meyfa/phpunit-assert-gd
Таблица совместимости
Утверждать версиюGD | Поддерживаемая версия PHP | Поддерживаемая версия PHPUnit |
---|---|---|
4.* | >= 8,1 | 10.1 |
3.* | >= 7,3 | 9 |
2.* | >= 7,2 | 8 |
1.* | 5.3.3 - 8,0 | 4.8.36 - 6.5.0 |
Утверждения доступны как признак, поэтому вы можете легко use
их в своем классе тестовых примеров:
<?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
для получения объекта ограничения (аналогично тому, что будет возвращено equalTo
, isTrue
и т. д.).
$ this -> assertThat (
' ./tests/actual.png ' ,
$ this -> isSimilarGD ( ' ./tests/expected.png ' )
);
По умолчанию эта библиотека вычисляет разницу между двумя изображениями, сравнивая информацию о цветовом канале RGBA в каждой координате пикселя исходного изображения и тестового изображения и усредняя разницу между каждым пикселем для расчета оценки разницы.
Это будет работать в большинстве случаев, но при определенных обстоятельствах может давать неправильную оценку, например, если изображения содержат много прозрачности.
Альтернативный метод расчета, который масштабирует цветовые каналы RGB на основе их альфа-прозрачности (то есть более прозрачные пиксели будут меньше влиять на оценку сложности, чтобы компенсировать их менее заметную разницу на самом изображении), можно включить, добавив новый экземпляр ScaledRgbChannels
в пятый параметр методов assertSimilarGD
или assertNotSimilarGD
.
use AssertGD DiffCalculator ScaledRgbChannels ;
public function testImage ()
{
$ this -> assertSimilarGD (
' expected.png ' ,
' actual.png ' ,
'' ,
0 ,
new ScaledRgbChannels ()
);
}
Если вы хотите полностью настроить выполнение вычислений в этой библиотеке, вы также можете создать свой собственный алгоритм вычислений, создав класс, реализующий интерфейс AssertGdDiffCalculator
.
Класс, реализующий этот интерфейс, должен предоставить метод calculate
, который предоставляет два экземпляра GdImage
и координаты X и Y (в виде ints
) сравниваемого пикселя в обоих изображениях.
Метод должен возвращать float
между 0
и 1
, где 0 — точное совпадение, а 1 — полная противоположность.
Затем вы можете предоставить экземпляр класса в качестве 5-го параметра метода assertSimilarGD
или assertNotSimilarGD
, чтобы использовать этот метод расчета для определения разницы изображений.