Vous essayez d'affirmer des images avec PHPUnit ? Ce projet fournit une contrainte et les assertions requises qui vous permettent de le faire.
Il prend en charge la comparaison des fichiers sur disque ainsi que des ressources d'image en mémoire.
Ajoutez ce package à vos dépendances de développement Composer :
composer require --dev meyfa/phpunit-assert-gd
Tableau de compatibilité
Version AssertGD | Version PHP prise en charge | Version PHPUnit prise en charge |
---|---|---|
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 |
Les assertions sont disponibles sous forme de trait, vous pouvez donc facilement les use
dans votre classe de cas de test :
<?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 ' );
}
}
Utilisez assertSimilarGD
si vous vous attendez à ce que 2 images soient exactement égales. Utilisez assertNotSimilarGD
si vous vous attendez à des différences.
$ this -> assertSimilarGD ( ' ./tests/img.png ' , ' ./tests/same.png ' );
$ this -> assertNotSimilarGD ( ' ./tests/img.png ' , ' ./tests/other.png ' );
Fournissez un nombre compris entre 0 et 1 pour définir le seuil d'erreur. Par exemple, une valeur de 0,2 permettrait une différence d’au plus 20 %.
$ this -> assertSimilarGD ( ' ./tests/img.png ' , ' ./tests/similar.png ' , '' , 0.2 );
Au lieu des chemins de fichiers, vous pouvez transmettre des ressources d'image GD. Cela évite d'avoir à écrire quelque chose sur le disque avant la comparaison.
$ img = imagecreatetruecolor ( 10 , 10 );
$ this -> assertSimilarGD ( ' ./tests/empty-10x10.png ' , $ img );
imagedestroy ( $ img );
Si vous devez configurer des objets fictifs ou effectuer d'autres appels de correspondance plus complexes, utilisez isSimilarGD
pour obtenir un objet de contrainte (similaire à ce qui serait renvoyé par equalTo
, isTrue
, etc.).
$ this -> assertThat (
' ./tests/actual.png ' ,
$ this -> isSimilarGD ( ' ./tests/expected.png ' )
);
Par défaut, cette bibliothèque calcule la différence entre deux images en comparant les informations du canal de couleur RGBA à chaque coordonnée de pixel de l'image source et de l'image test, et en faisant la moyenne de la différence entre chaque pixel pour calculer le score de différence.
Cela fonctionnera dans la majorité des cas, mais peut donner un score incorrect dans certaines circonstances, comme dans le cas d'images contenant beaucoup de transparence.
Une méthode de calcul alternative, qui met à l'échelle les canaux de couleur RVB en fonction de leur transparence alpha - ce qui signifie que des pixels plus transparents affecteront moins le score de difficulté pour compenser leur différence moins observable sur l'image elle-même - peut être activée en ajoutant une nouvelle instance ScaledRgbChannels
au 5ème. paramètre des méthodes assertSimilarGD
ou assertNotSimilarGD
.
use AssertGD DiffCalculator ScaledRgbChannels ;
public function testImage ()
{
$ this -> assertSimilarGD (
' expected.png ' ,
' actual.png ' ,
'' ,
0 ,
new ScaledRgbChannels ()
);
}
Si vous souhaitez personnaliser complètement la façon dont les calculs sont effectués dans cette bibliothèque, vous pouvez également créer votre propre algorithme de calcul en créant une classe qui implémente l'interface AssertGdDiffCalculator
.
Une classe implémentant cette interface doit fournir une méthode calculate
qui fournit deux instances GdImage
et les coordonnées X et Y (sous forme de ints
) du pixel comparé dans les deux images.
La méthode doit renvoyer un float
entre 0
et 1
, où 0 est une correspondance exacte et 1 est tout le contraire.
Vous pouvez ensuite fournir une instance de la classe comme 5ème paramètre de la méthode assertSimilarGD
ou assertNotSimilarGD
pour utiliser cette méthode de calcul pour déterminer la différence d'image.