Versuchen Sie, Bilder mit PHPUnit zu bestätigen? Dieses Projekt stellt eine Einschränkung und die erforderlichen Behauptungen bereit, die Ihnen dies ermöglichen.
Es unterstützt den Vergleich von Dateien auf der Festplatte sowie von Bildressourcen im Speicher.
Fügen Sie dieses Paket zu Ihren Composer-Entwicklungsabhängigkeiten hinzu:
composer require --dev meyfa/phpunit-assert-gd
Kompatibilitätstabelle
AssertGD-Version | Unterstützte PHP-Version | Unterstützte PHPUnit-Version |
---|---|---|
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 |
Die Behauptungen sind als Merkmal verfügbar, sodass Sie sie problemlos in Ihrer Testfallklasse use
können:
<?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 ' );
}
}
Verwenden Sie assertSimilarGD
, wenn Sie erwarten, dass zwei Bilder genau gleich sind. Verwenden Sie assertNotSimilarGD
, wenn Sie Unterschiede erwarten.
$ this -> assertSimilarGD ( ' ./tests/img.png ' , ' ./tests/same.png ' );
$ this -> assertNotSimilarGD ( ' ./tests/img.png ' , ' ./tests/other.png ' );
Geben Sie eine Zahl zwischen 0 und 1 an, um den Fehlerschwellenwert festzulegen. Beispielsweise würde ein Wert von 0,2 höchstens 20 % Unterschied zulassen.
$ this -> assertSimilarGD ( ' ./tests/img.png ' , ' ./tests/similar.png ' , '' , 0.2 );
Anstelle von Dateipfaden können Sie GD-Bildressourcen übergeben. Dadurch entfällt die Notwendigkeit, vor dem Vergleich etwas auf die Festplatte zu schreiben.
$ img = imagecreatetruecolor ( 10 , 10 );
$ this -> assertSimilarGD ( ' ./tests/empty-10x10.png ' , $ img );
imagedestroy ( $ img );
Wenn Sie Scheinobjekte konfigurieren oder andere, komplexere Matching-Aufrufe durchführen müssen, verwenden Sie isSimilarGD
um ein Einschränkungsobjekt zu erhalten (ähnlich dem, was von equalTo
, isTrue
usw. zurückgegeben würde).
$ this -> assertThat (
' ./tests/actual.png ' ,
$ this -> isSimilarGD ( ' ./tests/expected.png ' )
);
Standardmäßig berechnet diese Bibliothek die Differenz zwischen zwei Bildern, indem sie die RGBA-Farbkanalinformationen an jeder Pixelkoordinate des Quellbilds und des Testbilds vergleicht und die Differenz zwischen den einzelnen Pixeln mittelt, um den Differenzwert zu berechnen.
Dies funktioniert in den meisten Fällen, kann jedoch unter bestimmten Umständen zu einer falschen Bewertung führen, z. B. bei Bildern, die viel Transparenz enthalten.
Eine alternative Berechnungsmethode, die die RGB-Farbkanäle basierend auf ihrer Alpha-Transparenz skaliert – was bedeutet, dass transparentere Pixel die Schwierigkeitsbewertung weniger beeinflussen, um ihren weniger sichtbaren Unterschied auf dem Bild selbst auszugleichen – kann durch Hinzufügen einer neuen ScaledRgbChannels
Instanz zur fünften aktiviert werden Parameter der Methoden assertSimilarGD
oder assertNotSimilarGD
.
use AssertGD DiffCalculator ScaledRgbChannels ;
public function testImage ()
{
$ this -> assertSimilarGD (
' expected.png ' ,
' actual.png ' ,
'' ,
0 ,
new ScaledRgbChannels ()
);
}
Wenn Sie die Art und Weise, wie Berechnungen in dieser Bibliothek durchgeführt werden, vollständig anpassen möchten, können Sie auch Ihren eigenen Berechnungsalgorithmus erstellen, indem Sie eine Klasse erstellen, die die Schnittstelle AssertGdDiffCalculator
implementiert.
Eine Klasse, die diese Schnittstelle implementiert, muss eine calculate
bereitstellen, die zwei GdImage
Instanzen sowie die X- und Y-Koordinaten (als ints
) des Pixels bereitstellt, das in beiden Bildern verglichen wird.
Die Methode sollte einen float
zwischen 0
und 1
zurückgeben, wobei 0 eine exakte Übereinstimmung und 1 das genaue Gegenteil darstellt.
Anschließend können Sie eine Instanz der Klasse als 5. Parameter der Methode assertSimilarGD
oder assertNotSimilarGD
bereitstellen, um diese Berechnungsmethode zur Bestimmung des Bildunterschieds zu verwenden.