Extends Verify to allow verification of documents via ImageSharp.
See Milestones for release notes.
Entity Framework Extensions is a major sponsor and is proud to contribute to the development this project.
[ModuleInitializer]
public static void Init() =>
VerifyImageSharp.Initialize();[Test]
public Task VerifyImageFile() =>
VerifyFile("sample.jpg");[Test]
public Task VerifyImageFileWithCustomEncoder() =>
VerifyFile("sample.jpg")
.EncodeAsPng();Two files are produced
Samples.VerifyImageFile.verified.txt
{
Width: 1599,
Height: 1066,
HorizontalResolution: 1.0,
VerticalResolution: 1.0
}Samples.VerifyImageFile.verified.jpg
An instance if an SixLabors.ImageSharp.Image can be verified using the following:
[Test]
public Task VerifyImage()
{
var image = new Image<Rgba32>(11, 11)
{
[5, 5] = Rgba32.ParseHex("#0000FF")
};
return Verify(image);
}By default, image comparison is byte-exact. To tolerate minor rendering differences (anti-aliasing, font hinting, subpixel rendering), enable SSIM (Structural Similarity Index) comparison by passing a threshold to Initialize:
[ModuleInitializer]
public static void Init() =>
VerifyImageSharp.Initialize(ssimThreshold: 0.999);SSIM returns a value between 0.0 (completely different) and 1.0 (identical). Images with an SSIM at or above the threshold are considered equal. Recommended thresholds:
0.999— tolerates anti-aliasing and subpixel rendering differences0.995— tolerates minor font/layout shifts across OS versions0.99— tolerates moderate rendering variation
Override the global threshold for a specific test:
[Test]
public Task VerifyImageWithSsimThreshold()
{
var image = new Image<Rgba32>(11, 11)
{
[5, 5] = Rgba32.ParseHex("#0000FF")
};
return Verify(image)
.SsimThreshold(0.95);
}The SsimComparer class can also be used directly to get the raw SSIM value:
double ssim = SsimComparer.Calculate(receivedStream, verifiedStream);Swirl designed by BÖCK, RU from The Noun Project.

