¿Estás intentando afirmar imágenes con PHPUnit? Este proyecto proporciona una restricción y las afirmaciones requeridas que le permiten hacerlo.
Admite la comparación de archivos en el disco y recursos de imágenes en la memoria.
Agregue este paquete a sus dependencias de desarrollo de Composer:
composer require --dev meyfa/phpunit-assert-gd
tabla de compatibilidad
Versión AssertGD | Versión PHP soportada | Versión de PHPUnit compatible |
---|---|---|
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 |
Las aserciones están disponibles como rasgo, por lo que puedes use
fácilmente en tu clase de caso de prueba:
<?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 ' );
}
}
Utilice assertSimilarGD
si espera que 2 imágenes sean exactamente iguales. Utilice assertNotSimilarGD
si espera que haya diferencias.
$ this -> assertSimilarGD ( ' ./tests/img.png ' , ' ./tests/same.png ' );
$ this -> assertNotSimilarGD ( ' ./tests/img.png ' , ' ./tests/other.png ' );
Proporcione un número entre 0 y 1 para establecer el umbral de error. Por ejemplo, un valor de 0,2 permitiría como máximo una diferencia del 20%.
$ this -> assertSimilarGD ( ' ./tests/img.png ' , ' ./tests/similar.png ' , '' , 0.2 );
En lugar de rutas de archivos, puede pasar recursos de imágenes de GD. Esto elimina tener que escribir algo en el disco antes de la comparación.
$ img = imagecreatetruecolor ( 10 , 10 );
$ this -> assertSimilarGD ( ' ./tests/empty-10x10.png ' , $ img );
imagedestroy ( $ img );
Si necesita configurar objetos simulados o realizar otras llamadas coincidentes más complejas, use isSimilarGD
para obtener un objeto de restricción (similar a lo que devolvería equalTo
, isTrue
, etc.).
$ this -> assertThat (
' ./tests/actual.png ' ,
$ this -> isSimilarGD ( ' ./tests/expected.png ' )
);
De forma predeterminada, esta biblioteca calcula la diferencia entre dos imágenes comparando la información del canal de color RGBA en cada coordenada de píxel de la imagen de origen y la imagen de prueba, y promediando la diferencia entre cada píxel para calcular la puntuación de diferencia.
Esto funcionará en la mayoría de los casos, pero puede dar una puntuación incorrecta en determinadas circunstancias, como imágenes que contienen mucha transparencia.
Se puede habilitar un método de cálculo alternativo, que escala los canales de color RGB en función de su transparencia alfa (lo que significa que más píxeles transparentes afectarán menos la puntuación de dificultad para compensar su diferencia menos observable en la imagen misma) agregando una nueva instancia ScaledRgbChannels
a la quinta. parámetro de los métodos assertSimilarGD
o assertNotSimilarGD
.
use AssertGD DiffCalculator ScaledRgbChannels ;
public function testImage ()
{
$ this -> assertSimilarGD (
' expected.png ' ,
' actual.png ' ,
'' ,
0 ,
new ScaledRgbChannels ()
);
}
Si desea personalizar completamente cómo se realizan los cálculos en esta biblioteca, también puede crear su propio algoritmo de cálculo creando una clase que implemente la interfaz AssertGdDiffCalculator
.
Una clase que implemente esta interfaz debe proporcionar un método calculate
que proporcione dos instancias GdImage
y las coordenadas X e Y (como ints
) del píxel que se compara en ambas imágenes.
El método debe devolver un float
entre 0
y 1
, donde 0 es una coincidencia exacta y 1 es todo lo contrario.
Luego puede proporcionar una instancia de la clase como quinto parámetro del método assertSimilarGD
o assertNotSimilarGD
para utilizar este método de cálculo para determinar la diferencia de imagen.