Tentando afirmar imagens com PHPUnit? Este projeto fornece uma restrição e as asserções necessárias que permitem fazer isso.
Ele suporta a comparação de arquivos em disco, bem como recursos de imagem na memória.
Adicione este pacote às suas dependências de desenvolvimento do Composer:
composer require --dev meyfa/phpunit-assert-gd
Tabela de compatibilidade
Versão AssertGD | Versão PHP suportada | Versão suportada do 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 |
As asserções estão disponíveis como uma característica, então você pode use
facilmente em sua classe de caso de teste:
<?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 ' );
}
}
Use assertSimilarGD
se você espera que 2 imagens sejam exatamente iguais. Use assertNotSimilarGD
se você espera que haja diferenças.
$ this -> assertSimilarGD ( ' ./tests/img.png ' , ' ./tests/same.png ' );
$ this -> assertNotSimilarGD ( ' ./tests/img.png ' , ' ./tests/other.png ' );
Forneça um número entre 0 e 1 para definir o limite de erro. Por exemplo, um valor de 0,2 permitiria no máximo 20% de diferença.
$ this -> assertSimilarGD ( ' ./tests/img.png ' , ' ./tests/similar.png ' , '' , 0.2 );
Em vez de caminhos de arquivo, você pode passar recursos de imagem GD. Isso elimina a necessidade de gravar algo no disco antes da comparação.
$ img = imagecreatetruecolor ( 10 , 10 );
$ this -> assertSimilarGD ( ' ./tests/empty-10x10.png ' , $ img );
imagedestroy ( $ img );
Se você precisar configurar objetos simulados ou fazer outras chamadas de correspondência mais complexas, use isSimilarGD
para obter um objeto de restrição (semelhante ao que seria retornado por equalTo
, isTrue
, etc.).
$ this -> assertThat (
' ./tests/actual.png ' ,
$ this -> isSimilarGD ( ' ./tests/expected.png ' )
);
Por padrão, esta biblioteca calcula a diferença entre duas imagens comparando as informações do canal de cores RGBA em cada coordenada de pixel da imagem de origem e da imagem de teste e calculando a média da diferença entre cada pixel para calcular a pontuação da diferença.
Isso funcionará na maioria dos casos, mas poderá gerar pontuação incorreta em determinadas circunstâncias, como imagens que contêm muita transparência.
Um método de cálculo alternativo, que dimensiona os canais de cores RGB com base em sua transparência alfa - o que significa que pixels mais transparentes afetarão menos a pontuação de dificuldade para compensar sua diferença menos observável na própria imagem - pode ser ativado adicionando uma nova instância ScaledRgbChannels
ao 5º parâmetro dos métodos assertSimilarGD
ou assertNotSimilarGD
.
use AssertGD DiffCalculator ScaledRgbChannels ;
public function testImage ()
{
$ this -> assertSimilarGD (
' expected.png ' ,
' actual.png ' ,
'' ,
0 ,
new ScaledRgbChannels ()
);
}
Se desejar personalizar completamente a forma como os cálculos são feitos nesta biblioteca, você também pode criar seu próprio algoritmo de cálculo criando uma classe que implementa a interface AssertGdDiffCalculator
.
Uma classe que implementa esta interface deve fornecer um método calculate
que seja fornecido com duas instâncias GdImage
e as coordenadas X e Y (como ints
) do pixel que está sendo comparado em ambas as imagens.
O método deve retornar um float
entre 0
e 1
, onde 0 é uma correspondência exata e 1 é o oposto completo.
Você pode então fornecer uma instância da classe como o quinto parâmetro do método assertSimilarGD
ou assertNotSimilarGD
para usar este método de cálculo para determinar a diferença da imagem.