README.md

# Pexelmatch

Pexelmatch is a pure Elixir port of [Pixelmatch](https://github.com/mapbox/pixelmatch).
We used the same fixtures and tests as Pixelmatch, opting for consistency over correctness.
The library is a bit slower, and and doesn't currently offer a binary, but otherwise is feature complete.

We used the same semantics for calling the module.
We have not released a binary for it yet.
If you'd like to compare images from the command line, just use the Pixelmatch binary.

## Installation

If [available in Hex](https://hex.pm/docs/publish), the package can be installed
by adding `pexelmatch` to your list of dependencies in `mix.exs`:

```elixir
def deps do
  [
    {:pexelmatch, "~> 0.0.1"}
  ]
end
```

## Usage

You can call the top-level API with `&Pexelmatch.run\4` or `&Pexelmatch.run\5` (with opts). 
Pass it image paths, and it will handle the file IO, and compare the images.
It will return `{:ok, number_of_pixels_changed}` and write the diff to the diff path.

```
  Pexelmatch.run("/path/image.png" "/path/image_2.png"), "./path/diff.png", opts)
  > {:ok, 1}
```

You can also call `&Pexelmatch.Match.apply\3`. 
If will not perform any file I/O, and will return `{:ok, number_of_pixels_changed, diff_data}`.
You are responsible for writing the diff data to disk.
In this example we use ExPng for file I/O.

```
  alias ExPng.Image

  {:ok, img_1} = Image.from_file("/path/img_1.png")
  {:ok, img_2} = Image.from_file("/path/img_2.png")
  {:ok, num_pixels, diff_data} = Match.apply(img_1, img_2, options)
  Image.to_file(diff_data, Path.join(".", "/test/fixtures/temp_diff.png"))
```

Options work the same way as pixelmatch, but are snake cased.