blob: 1537fca3722867f7cbec4fba6741850418a22b4d [file] [log] [blame]
// Simple command line app the applies our image diff library to two PNGs.
package main
import (
"flag"
"fmt"
"image"
"image/png"
"io"
"log"
"os"
"go.skia.org/infra/go/common"
"go.skia.org/infra/go/skerr"
"go.skia.org/infra/go/util"
"go.skia.org/infra/golden/go/diff"
)
var (
out = flag.String("out", "", "Filename to write the diff image to.")
)
func main() {
common.Init()
if flag.NArg() != 2 {
log.Fatal("Usage: imagediff [--out filename] imagepath1.png imagepath2.png\n")
}
a, err := openNRGBAFromFile(flag.Arg(0))
if err != nil {
log.Fatal(err)
}
b, err := openNRGBAFromFile(flag.Arg(1))
if err != nil {
log.Fatal(err)
}
metrics, d := diff.PixelDiff(a, b)
fmt.Printf("Dimensions are different: %v\n", metrics.DimDiffer)
fmt.Printf("Number of pixels different: %v\n", metrics.NumDiffPixels)
fmt.Printf("Pixel diff percent: %v\n", metrics.PixelDiffPercent)
fmt.Printf("Max RGBA: %v\n", metrics.MaxRGBADiffs)
if *out == "" {
return
} else {
fmt.Println("Writing image diff.")
}
f, err := os.Create(*out)
if err != nil {
log.Fatal(err)
}
if err := png.Encode(f, d); err != nil {
log.Fatal(err)
}
}
func openNRGBAFromFile(fileName string) (*image.NRGBA, error) {
var img *image.NRGBA
err := util.WithReadFile(fileName, func(r io.Reader) error {
im, err := png.Decode(r)
if err != nil {
return err
}
img = diff.GetNRGBA(im)
return nil
})
if err != nil {
return nil, skerr.Wrap(err)
}
return img, nil
}