Skip to content

Return written image path from image.write#4

Merged
jrstrunk merged 2 commits into
tinybackup:mainfrom
JonasGruenwald:return-written-path
Jul 16, 2025
Merged

Return written image path from image.write#4
jrstrunk merged 2 commits into
tinybackup:mainfrom
JonasGruenwald:return-written-path

Conversation

@JonasGruenwald

@JonasGruenwald JonasGruenwald commented Jul 13, 2025

Copy link
Copy Markdown
Contributor

Closes #3

This change returns the path of the image as it was written to disk from the image.write function.

As I wanted just the path itself, without the format options appended to it, I had to separate those two out internally.

There are 2 breaking changes to the public API:

  • image.write returns a Result(String, Snag) instead of Result(Nil, Snag)
  • The Custom variant constructor now accepts separate parameters for extension and format options – I thought this made sense because I had to separate the two out internally

A side note: I get 11 failing tests (empty output) before any of my changes here locally, not sure what's up with that, may be that I'm on Elixir 1.18 instead of 1.17

@jrstrunk

jrstrunk commented Jul 14, 2025

Copy link
Copy Markdown
Contributor

This looks nice! Do you foresee wanting to suggest any other breaking changes in the near future? If so, should we release this now or wait to release a v2 with potentially more changes? I do not have anything I want to add at this point. If we merged this but didn't release it, you could still use it via a git dependency :)

Also, strange about the tests. The package works when used regularly on your system with Elixir 1.18, right?

@JonasGruenwald

Copy link
Copy Markdown
Contributor Author

I can't think of any other change right now, I'm just using it to generate resized versions of images at the moment.
Right now in my project I've got it set as a git dependency pointing to my fork with these changes, so there is no rush at all about cutting a release from my side if you'd like to hold off.

One thing I was wondering about, also regarding my change of the handling of the Custom ImageFormat variant:

I didn't know it was possible to specify format options like that, as a [wibble=wobble] string appended to the file path, I didn't see this documented for Vix, they seem to expect a keyword list of options for functions like Vix.Vips.Image.write_to_file/3 and then pass those as arguments to the NIF – I was wondering why ansel doesn't use that options argument but instead appends the options to the path as a string?
Is that a feature of the underlying libvips API that you're using, kind of bypassing Vix there? I didn't change that part because I assume there is a reason to do it this way, was just curious.

@JonasGruenwald

JonasGruenwald commented Jul 14, 2025

Copy link
Copy Markdown
Contributor Author

Also, strange about the tests. The package works when used regularly on your system with Elixir 1.18, right?

Yes but I use none of the functions in those failing tests. I'll just paste the test output here for reference:

~/Projects/ansel git:(return-written-path) ➜ gleam test
  Compiling ansel
   Compiled in 0.32s
    Running ansel_test.main
.....................................F.............FFFFFFFFFF......
Failures:

  1) image_test.composite_over_test
     Values were not equal
     expected: Ok(<<137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 12, 0, 0, 0, 12, 8, 6, 0, 0, 0, 86, 117, 92, 231, 0, 0, 0, 9, 112, 72, 89, 115, 0, 0, 3, 232, 0, 0, 3, 232, 1, 181, 123, 82, 107, 0, 0, 0, 180, 101, 88, 73, 102, 73, 73, 42, 0, 8, 0, 0, 0, 6, 0, 18, 1, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, 26, 1, 5, 0, 1, 0, 0, 0, 86, 0, 0, 0, 27, 1, 5, 0, 1, 0, 0, 0, 94, 0, 0, 0, 40, 1, 3, 0, 1, 0, 0, 0, 2, 0, 0, 0, 19, 2, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, 105, 135, 4, 0, 1, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 56, 99, 0, 0, 232, 3, 0, 0, 56, 99, 0, 0, 232, 3, 0, 0, 6, 0, 0, 144, 7, 0, 4, 0, 0, 0, 48, 50, 49, 48, 1, 145, 7, 0, 4, 0, 0, 0, 1, 2, 3, 0, 0, 160, 7, 0, 4, 0, 0, 0, 48, 49, 48, 48, 1, 160, 3, 0, 1, 0, 0, 0, 255, 255, 0, 0, 2, 160, 4, 0, 1, 0, 0, 0, 12, 0, 0, 0, 3, 160, 4, 0, 1, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 4, 21, 89, 80, 0, 0, 0, 32, 73, 68, 65, 84, 120, 156, 99, 248, 191, 254, 243, 127, 82, 48, 3, 136, 208, 212, 181, 195, 138, 71, 53, 32, 107, 32, 57, 88, 135, 184, 6, 0, 2, 186, 192, 60, 132, 11, 184, 148, 0, 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130>>)
          got: Ok(<<137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 12, 0, 0, 0, 12, 8, 6, 0, 0, 0, 86, 117, 92, 231, 0, 0, 0, 9, 112, 72, 89, 115, 0, 0, 3, 232, 0, 0, 3, 232, 1, 181, 123, 82, 107, 0, 0, 0, 180, 101, 88, 73, 102, 73, 73, 42, 0, 8, 0, 0, 0, 6, 0, 18, 1, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, 26, 1, 5, 0, 1, 0, 0, 0, 86, 0, 0, 0, 27, 1, 5, 0, 1, 0, 0, 0, 94, 0, 0, 0, 40, 1, 3, 0, 1, 0, 0, 0, 2, 0, 0, 0, 19, 2, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, 105, 135, 4, 0, 1, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 56, 99, 0, 0, 232, 3, 0, 0, 56, 99, 0, 0, 232, 3, 0, 0, 6, 0, 0, 144, 7, 0, 4, 0, 0, 0, 48, 50, 49, 48, 1, 145, 7, 0, 4, 0, 0, 0, 1, 2, 3, 0, 0, 160, 7, 0, 4, 0, 0, 0, 48, 49, 48, 48, 1, 160, 3, 0, 1, 0, 0, 0, 255, 255, 0, 0, 2, 160, 4, 0, 1, 0, 0, 0, 12, 0, 0, 0, 3, 160, 4, 0, 1, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 4, 21, 89, 80, 0, 0, 0, 33, 73, 68, 65, 84, 120, 156, 99, 248, 191, 254, 243, 127, 82, 48, 3, 136, 208, 212, 181, 195, 138, 71, 53, 172, 71, 210, 64, 114, 176, 14, 113, 13, 0, 2, 186, 192, 60, 115, 158, 53, 168, 0, 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130>>)
     output: 

  2) image_test.fill_test
     Values were not equal
     expected: Ok(<<137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 10, 0, 0, 0, 10, 8, 6, 0, 0, 0, 141, 50, 207, 189, 0, 0, 0, 9, 112, 72, 89, 115, 0, 0, 3, 232, 0, 0, 3, 232, 1, 181, 123, 82, 107, 0, 0, 0, 180, 101, 88, 73, 102, 73, 73, 42, 0, 8, 0, 0, 0, 6, 0, 18, 1, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, 26, 1, 5, 0, 1, 0, 0, 0, 86, 0, 0, 0, 27, 1, 5, 0, 1, 0, 0, 0, 94, 0, 0, 0, 40, 1, 3, 0, 1, 0, 0, 0, 2, 0, 0, 0, 19, 2, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, 105, 135, 4, 0, 1, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 56, 99, 0, 0, 232, 3, 0, 0, 56, 99, 0, 0, 232, 3, 0, 0, 6, 0, 0, 144, 7, 0, 4, 0, 0, 0, 48, 50, 49, 48, 1, 145, 7, 0, 4, 0, 0, 0, 1, 2, 3, 0, 0, 160, 7, 0, 4, 0, 0, 0, 48, 49, 48, 48, 1, 160, 3, 0, 1, 0, 0, 0, 255, 255, 0, 0, 2, 160, 4, 0, 1, 0, 0, 0, 10, 0, 0, 0, 3, 160, 4, 0, 1, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 70, 89, 205, 2, 0, 0, 0, 28, 73, 68, 65, 84, 120, 156, 99, 96, 96, 248, 255, 31, 29, 55, 52, 52, 96, 96, 134, 161, 160, 16, 155, 224, 80, 85, 8, 0, 228, 224, 237, 4, 43, 147, 88, 54, 0, 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130>>)
          got: Ok(<<137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 10, 0, 0, 0, 10, 8, 6, 0, 0, 0, 141, 50, 207, 189, 0, 0, 0, 9, 112, 72, 89, 115, 0, 0, 3, 232, 0, 0, 3, 232, 1, 181, 123, 82, 107, 0, 0, 0, 180, 101, 88, 73, 102, 73, 73, 42, 0, 8, 0, 0, 0, 6, 0, 18, 1, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, 26, 1, 5, 0, 1, 0, 0, 0, 86, 0, 0, 0, 27, 1, 5, 0, 1, 0, 0, 0, 94, 0, 0, 0, 40, 1, 3, 0, 1, 0, 0, 0, 2, 0, 0, 0, 19, 2, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, 105, 135, 4, 0, 1, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 56, 99, 0, 0, 232, 3, 0, 0, 56, 99, 0, 0, 232, 3, 0, 0, 6, 0, 0, 144, 7, 0, 4, 0, 0, 0, 48, 50, 49, 48, 1, 145, 7, 0, 4, 0, 0, 0, 1, 2, 3, 0, 0, 160, 7, 0, 4, 0, 0, 0, 48, 49, 48, 48, 1, 160, 3, 0, 1, 0, 0, 0, 255, 255, 0, 0, 2, 160, 4, 0, 1, 0, 0, 0, 10, 0, 0, 0, 3, 160, 4, 0, 1, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 70, 89, 205, 2, 0, 0, 0, 29, 73, 68, 65, 84, 120, 156, 99, 96, 96, 248, 255, 31, 29, 55, 52, 52, 96, 96, 134, 161, 160, 176, 1, 139, 224, 80, 85, 8, 0, 228, 224, 237, 4, 11, 48, 38, 71, 0, 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130>>)
     output: 

  3) image_test.outline_test
     Values were not equal
     expected: Ok(<<137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 20, 0, 0, 0, 20, 8, 6, 0, 0, 0, 141, 137, 29, 13, 0, 0, 0, 9, 112, 72, 89, 115, 0, 0, 3, 232, 0, 0, 3, 232, 1, 181, 123, 82, 107, 0, 0, 0, 180, 101, 88, 73, 102, 73, 73, 42, 0, 8, 0, 0, 0, 6, 0, 18, 1, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, 26, 1, 5, 0, 1, 0, 0, 0, 86, 0, 0, 0, 27, 1, 5, 0, 1, 0, 0, 0, 94, 0, 0, 0, 40, 1, 3, 0, 1, 0, 0, 0, 2, 0, 0, 0, 19, 2, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, 105, 135, 4, 0, 1, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 56, 99, 0, 0, 232, 3, 0, 0, 56, 99, 0, 0, 232, 3, 0, 0, 6, 0, 0, 144, 7, 0, 4, 0, 0, 0, 48, 50, 49, 48, 1, 145, 7, 0, 4, 0, 0, 0, 1, 2, 3, 0, 0, 160, 7, 0, 4, 0, 0, 0, 48, 49, 48, 48, 1, 160, 3, 0, 1, 0, 0, 0, 255, 255, 0, 0, 2, 160, 4, 0, 1, 0, 0, 0, 20, 0, 0, 0, 3, 160, 4, 0, 1, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 214, 86, 14, 89, 0, 0, 0, 44, 73, 68, 65, 84, 120, 156, 99, 248, 191, 254, 243, 127, 106, 98, 134, 161, 99, 160, 166, 174, 29, 81, 120, 224, 13, 196, 165, 112, 212, 192, 225, 100, 224, 224, 77, 135, 212, 194, 163, 6, 142, 4, 3, 1, 220, 145, 39, 12, 73, 241, 175, 166, 0, 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130>>)
          got: Ok(<<137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 20, 0, 0, 0, 20, 8, 6, 0, 0, 0, 141, 137, 29, 13, 0, 0, 0, 9, 112, 72, 89, 115, 0, 0, 3, 232, 0, 0, 3, 232, 1, 181, 123, 82, 107, 0, 0, 0, 180, 101, 88, 73, 102, 73, 73, 42, 0, 8, 0, 0, 0, 6, 0, 18, 1, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, 26, 1, 5, 0, 1, 0, 0, 0, 86, 0, 0, 0, 27, 1, 5, 0, 1, 0, 0, 0, 94, 0, 0, 0, 40, 1, 3, 0, 1, 0, 0, 0, 2, 0, 0, 0, 19, 2, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, 105, 135, 4, 0, 1, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 56, 99, 0, 0, 232, 3, 0, 0, 56, 99, 0, 0, 232, 3, 0, 0, 6, 0, 0, 144, 7, 0, 4, 0, 0, 0, 48, 50, 49, 48, 1, 145, 7, 0, 4, 0, 0, 0, 1, 2, 3, 0, 0, 160, 7, 0, 4, 0, 0, 0, 48, 49, 48, 48, 1, 160, 3, 0, 1, 0, 0, 0, 255, 255, 0, 0, 2, 160, 4, 0, 1, 0, 0, 0, 20, 0, 0, 0, 3, 160, 4, 0, 1, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 214, 86, 14, 89, 0, 0, 0, 51, 73, 68, 65, 84, 120, 156, 99, 248, 191, 254, 243, 127, 106, 98, 134, 161, 99, 160, 166, 174, 29, 81, 120, 224, 13, 252, 143, 67, 225, 168, 129, 255, 135, 145, 129, 154, 131, 54, 29, 254, 167, 18, 102, 24, 53, 240, 255, 240, 55, 16, 0, 220, 145, 39, 12, 112, 107, 140, 78, 0, 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130>>)
     output: 

  4) image_test.border_test
     Values were not equal
     expected: Ok(<<137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 40, 0, 0, 0, 40, 8, 6, 0, 0, 0, 140, 254, 184, 109, 0, 0, 0, 9, 112, 72, 89, 115, 0, 0, 3, 232, 0, 0, 3, 232, 1, 181, 123, 82, 107, 0, 0, 0, 180, 101, 88, 73, 102, 73, 73, 42, 0, 8, 0, 0, 0, 6, 0, 18, 1, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, 26, 1, 5, 0, 1, 0, 0, 0, 86, 0, 0, 0, 27, 1, 5, 0, 1, 0, 0, 0, 94, 0, 0, 0, 40, 1, 3, 0, 1, 0, 0, 0, 2, 0, 0, 0, 19, 2, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, 105, 135, 4, 0, 1, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 56, 99, 0, 0, 232, 3, 0, 0, 56, 99, 0, 0, 232, 3, 0, 0, 6, 0, 0, 144, 7, 0, 4, 0, 0, 0, 48, 50, 49, 48, 1, 145, 7, 0, 4, 0, 0, 0, 1, 2, 3, 0, 0, 160, 7, 0, 4, 0, 0, 0, 48, 49, 48, 48, 1, 160, 3, 0, 1, 0, 0, 0, 255, 255, 0, 0, 2, 160, 4, 0, 1, 0, 0, 0, 40, 0, 0, 0, 3, 160, 4, 0, 1, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 45, 56, 142, 174, 0, 0, 0, 76, 73, 68, 65, 84, 120, 156, 237, 206, 65, 17, 0, 16, 0, 4, 64, 145, 181, 16, 64, 47, 5, 68, 16, 130, 12, 102, 204, 156, 199, 62, 246, 191, 101, 214, 190, 127, 86, 210, 1, 65, 193, 116, 64, 80, 48, 29, 120, 22, 108, 99, 61, 37, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 120, 19, 76, 17, 20, 76, 19, 20, 76, 251, 62, 120, 0, 203, 112, 127, 111, 15, 182, 174, 97, 0, 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130>>)
          got: Ok(<<137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 40, 0, 0, 0, 40, 8, 6, 0, 0, 0, 140, 254, 184, 109, 0, 0, 0, 9, 112, 72, 89, 115, 0, 0, 3, 232, 0, 0, 3, 232, 1, 181, 123, 82, 107, 0, 0, 0, 180, 101, 88, 73, 102, 73, 73, 42, 0, 8, 0, 0, 0, 6, 0, 18, 1, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, 26, 1, 5, 0, 1, 0, 0, 0, 86, 0, 0, 0, 27, 1, 5, 0, 1, 0, 0, 0, 94, 0, 0, 0, 40, 1, 3, 0, 1, 0, 0, 0, 2, 0, 0, 0, 19, 2, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, 105, 135, 4, 0, 1, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 56, 99, 0, 0, 232, 3, 0, 0, 56, 99, 0, 0, 232, 3, 0, 0, 6, 0, 0, 144, 7, 0, 4, 0, 0, 0, 48, 50, 49, 48, 1, 145, 7, 0, 4, 0, 0, 0, 1, 2, 3, 0, 0, 160, 7, 0, 4, 0, 0, 0, 48, 49, 48, 48, 1, 160, 3, 0, 1, 0, 0, 0, 255, 255, 0, 0, 2, 160, 4, 0, 1, 0, 0, 0, 40, 0, 0, 0, 3, 160, 4, 0, 1, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 45, 56, 142, 174, 0, 0, 0, 88, 73, 68, 65, 84, 120, 156, 237, 206, 65, 13, 192, 64, 12, 3, 193, 64, 54, 139, 3, 96, 94, 71, 192, 16, 10, 34, 37, 81, 41, 169, 180, 143, 249, 79, 69, 238, 205, 106, 58, 16, 130, 34, 232, 241, 68, 8, 138, 160, 255, 31, 60, 247, 249, 84, 8, 94, 130, 77, 240, 16, 20, 193, 38, 120, 8, 138, 96, 19, 12, 65, 19, 108, 130, 89, 170, 166, 3, 33, 40, 130, 30, 79, 132, 160, 8, 122, 173, 23, 203, 112, 127, 111, 255, 57, 40, 105, 0, 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130>>)
     output: 

  5) image_test.round_circle_test
     Values were not equal
     expected: Ok(<<137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 20, 0, 0, 0, 20, 8, 6, 0, 0, 0, 141, 137, 29, 13, 0, 0, 0, 9, 112, 72, 89, 115, 0, 0, 3, 232, 0, 0, 3, 232, 1, 181, 123, 82, 107, 0, 0, 0, 180, 101, 88, 73, 102, 73, 73, 42, 0, 8, 0, 0, 0, 6, 0, 18, 1, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, 26, 1, 5, 0, 1, 0, 0, 0, 86, 0, 0, 0, 27, 1, 5, 0, 1, 0, 0, 0, 94, 0, 0, 0, 40, 1, 3, 0, 1, 0, 0, 0, 2, 0, 0, 0, 19, 2, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, 105, 135, 4, 0, 1, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 56, 99, 0, 0, 232, 3, 0, 0, 56, 99, 0, 0, 232, 3, 0, 0, 6, 0, 0, 144, 7, 0, 4, 0, 0, 0, 48, 50, 49, 48, 1, 145, 7, 0, 4, 0, 0, 0, 1, 2, 3, 0, 0, 160, 7, 0, 4, 0, 0, 0, 48, 49, 48, 48, 1, 160, 3, 0, 1, 0, 0, 0, 255, 255, 0, 0, 2, 160, 4, 0, 1, 0, 0, 0, 20, 0, 0, 0, 3, 160, 4, 0, 1, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 214, 86, 14, 89, 0, 0, 0, 203, 73, 68, 65, 84, 120, 156, 173, 212, 93, 10, 130, 64, 16, 192, 241, 165, 200, 235, 37, 126, 117, 165, 204, 110, 145, 216, 99, 199, 113, 203, 234, 14, 178, 189, 79, 51, 52, 3, 161, 107, 137, 59, 15, 127, 144, 197, 253, 129, 171, 142, 129, 139, 51, 158, 34, 108, 135, 53, 152, 197, 94, 156, 229, 181, 130, 239, 25, 237, 245, 97, 41, 246, 192, 224, 79, 119, 44, 249, 5, 174, 177, 227, 12, 104, 88, 133, 173, 124, 224, 18, 76, 42, 135, 96, 26, 128, 73, 177, 128, 17, 159, 71, 40, 248, 36, 203, 240, 219, 12, 197, 164, 156, 192, 179, 34, 88, 19, 120, 83, 4, 45, 129, 78, 17, 116, 218, 96, 79, 224, 85, 17, 108, 9, 108, 20, 193, 19, 129, 133, 34, 152, 17, 184, 193, 58, 5, 140, 6, 74, 36, 191, 94, 162, 0, 110, 97, 48, 28, 170, 0, 108, 15, 158, 105, 67, 35, 232, 176, 0, 43, 97, 98, 124, 73, 241, 204, 51, 237, 228, 49, 97, 98, 192, 126, 71, 47, 42, 199, 106, 172, 133, 207, 199, 239, 248, 154, 214, 50, 190, 103, 180, 247, 13, 12, 18, 82, 229, 209, 116, 241, 24, 0, 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130>>)
          got: Ok(<<137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 20, 0, 0, 0, 20, 8, 6, 0, 0, 0, 141, 137, 29, 13, 0, 0, 0, 9, 112, 72, 89, 115, 0, 0, 3, 232, 0, 0, 3, 232, 1, 181, 123, 82, 107, 0, 0, 0, 180, 101, 88, 73, 102, 73, 73, 42, 0, 8, 0, 0, 0, 6, 0, 18, 1, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, 26, 1, 5, 0, 1, 0, 0, 0, 86, 0, 0, 0, 27, 1, 5, 0, 1, 0, 0, 0, 94, 0, 0, 0, 40, 1, 3, 0, 1, 0, 0, 0, 2, 0, 0, 0, 19, 2, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, 105, 135, 4, 0, 1, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 56, 99, 0, 0, 232, 3, 0, 0, 56, 99, 0, 0, 232, 3, 0, 0, 6, 0, 0, 144, 7, 0, 4, 0, 0, 0, 48, 50, 49, 48, 1, 145, 7, 0, 4, 0, 0, 0, 1, 2, 3, 0, 0, 160, 7, 0, 4, 0, 0, 0, 48, 49, 48, 48, 1, 160, 3, 0, 1, 0, 0, 0, 255, 255, 0, 0, 2, 160, 4, 0, 1, 0, 0, 0, 20, 0, 0, 0, 3, 160, 4, 0, 1, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 214, 86, 14, 89, 0, 0, 0, 212, 73, 68, 65, 84, 120, 156, 173, 213, 77, 10, 194, 48, 16, 5, 224, 65, 177, 215, 83, 108, 171, 87, 82, 235, 45, 20, 93, 206, 113, 172, 63, 245, 14, 50, 238, 159, 140, 76, 54, 49, 216, 210, 204, 226, 65, 8, 225, 131, 230, 231, 149, 192, 66, 137, 20, 96, 89, 131, 229, 4, 150, 22, 44, 111, 75, 107, 115, 43, 91, 67, 113, 82, 88, 9, 150, 14, 44, 232, 201, 3, 44, 203, 127, 224, 20, 44, 251, 1, 80, 156, 6, 44, 147, 20, 56, 6, 131, 101, 27, 131, 101, 6, 6, 203, 34, 128, 133, 237, 71, 46, 248, 84, 139, 236, 52, 225, 148, 90, 193, 179, 35, 120, 84, 240, 230, 8, 182, 10, 138, 35, 40, 222, 224, 75, 193, 171, 35, 120, 33, 123, 155, 94, 224, 129, 236, 161, 123, 129, 149, 130, 51, 176, 220, 29, 176, 46, 92, 108, 178, 214, 200, 5, 231, 113, 57, 52, 25, 216, 38, 213, 54, 90, 65, 187, 17, 152, 54, 77, 178, 190, 66, 180, 53, 134, 236, 169, 174, 249, 126, 102, 95, 99, 135, 131, 170, 245, 109, 234, 221, 178, 203, 175, 209, 177, 206, 85, 182, 230, 231, 23, 240, 1, 12, 18, 82, 229, 5, 155, 252, 233, 0, 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130>>)
     output: 

  6) image_test.round_square_test
     Values were not equal
     expected: Ok(<<137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 20, 0, 0, 0, 20, 8, 6, 0, 0, 0, 141, 137, 29, 13, 0, 0, 0, 9, 112, 72, 89, 115, 0, 0, 3, 232, 0, 0, 3, 232, 1, 181, 123, 82, 107, 0, 0, 0, 180, 101, 88, 73, 102, 73, 73, 42, 0, 8, 0, 0, 0, 6, 0, 18, 1, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, 26, 1, 5, 0, 1, 0, 0, 0, 86, 0, 0, 0, 27, 1, 5, 0, 1, 0, 0, 0, 94, 0, 0, 0, 40, 1, 3, 0, 1, 0, 0, 0, 2, 0, 0, 0, 19, 2, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, 105, 135, 4, 0, 1, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 56, 99, 0, 0, 232, 3, 0, 0, 56, 99, 0, 0, 232, 3, 0, 0, 6, 0, 0, 144, 7, 0, 4, 0, 0, 0, 48, 50, 49, 48, 1, 145, 7, 0, 4, 0, 0, 0, 1, 2, 3, 0, 0, 160, 7, 0, 4, 0, 0, 0, 48, 49, 48, 48, 1, 160, 3, 0, 1, 0, 0, 0, 255, 255, 0, 0, 2, 160, 4, 0, 1, 0, 0, 0, 20, 0, 0, 0, 3, 160, 4, 0, 1, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 214, 86, 14, 89, 0, 0, 0, 117, 73, 68, 65, 84, 120, 156, 237, 212, 65, 10, 128, 32, 16, 133, 225, 185, 95, 138, 135, 10, 161, 219, 116, 2, 181, 43, 149, 237, 167, 153, 112, 160, 77, 144, 240, 86, 225, 226, 223, 13, 31, 42, 56, 196, 107, 165, 86, 144, 54, 233, 148, 248, 99, 58, 91, 36, 111, 142, 97, 75, 7, 242, 86, 52, 48, 0, 48, 203, 81, 187, 38, 10, 204, 10, 86, 32, 120, 16, 16, 187, 27, 224, 0, 127, 11, 34, 191, 222, 174, 96, 1, 130, 73, 65, 15, 4, 39, 91, 176, 17, 128, 205, 252, 216, 216, 154, 147, 114, 231, 155, 234, 108, 210, 147, 153, 115, 1, 18, 207, 148, 122, 4, 242, 78, 146, 0, 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130>>)
          got: Ok(<<137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 20, 0, 0, 0, 20, 8, 6, 0, 0, 0, 141, 137, 29, 13, 0, 0, 0, 9, 112, 72, 89, 115, 0, 0, 3, 232, 0, 0, 3, 232, 1, 181, 123, 82, 107, 0, 0, 0, 180, 101, 88, 73, 102, 73, 73, 42, 0, 8, 0, 0, 0, 6, 0, 18, 1, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, 26, 1, 5, 0, 1, 0, 0, 0, 86, 0, 0, 0, 27, 1, 5, 0, 1, 0, 0, 0, 94, 0, 0, 0, 40, 1, 3, 0, 1, 0, 0, 0, 2, 0, 0, 0, 19, 2, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, 105, 135, 4, 0, 1, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 56, 99, 0, 0, 232, 3, 0, 0, 56, 99, 0, 0, 232, 3, 0, 0, 6, 0, 0, 144, 7, 0, 4, 0, 0, 0, 48, 50, 49, 48, 1, 145, 7, 0, 4, 0, 0, 0, 1, 2, 3, 0, 0, 160, 7, 0, 4, 0, 0, 0, 48, 49, 48, 48, 1, 160, 3, 0, 1, 0, 0, 0, 255, 255, 0, 0, 2, 160, 4, 0, 1, 0, 0, 0, 20, 0, 0, 0, 3, 160, 4, 0, 1, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 214, 86, 14, 89, 0, 0, 0, 126, 73, 68, 65, 84, 120, 156, 237, 213, 187, 9, 128, 64, 16, 132, 225, 237, 79, 197, 162, 68, 176, 155, 173, 192, 71, 75, 58, 230, 35, 3, 183, 96, 34, 40, 110, 36, 6, 147, 201, 199, 121, 193, 127, 70, 135, 149, 181, 116, 44, 116, 236, 116, 240, 230, 118, 58, 102, 58, 154, 112, 2, 27, 30, 32, 87, 235, 3, 108, 19, 48, 150, 213, 86, 126, 51, 11, 156, 4, 34, 17, 220, 44, 17, 163, 246, 131, 248, 65, 124, 20, 68, 34, 184, 90, 233, 89, 22, 56, 10, 84, 28, 179, 192, 42, 2, 171, 56, 190, 197, 186, 115, 177, 181, 90, 61, 123, 120, 167, 250, 118, 212, 201, 226, 9, 56, 0, 18, 207, 148, 122, 57, 102, 59, 89, 0, 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130>>)
     output: 

  7) image_test.blur_test
     Values were not equal
     expected: Ok(<<137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 13, 0, 0, 0, 13, 8, 6, 0, 0, 0, 114, 235, 228, 124, 0, 0, 1, 125, 105, 67, 67, 80, 105, 99, 99, 0, 0, 120, 156, 125, 145, 61, 72, 195, 64, 28, 197, 95, 83, 165, 82, 170, 14, 86, 16, 113, 200, 80, 5, 193, 130, 168, 136, 163, 86, 161, 8, 21, 66, 173, 208, 170, 131, 201, 165, 95, 208, 164, 33, 105, 113, 113, 20, 92, 11, 14, 126, 44, 86, 29, 92, 156, 117, 117, 112, 21, 4, 193, 15, 16, 103, 7, 39, 69, 23, 41, 241, 127, 73, 161, 69, 140, 7, 199, 253, 120, 119, 239, 113, 247, 14, 16, 234, 37, 166, 89, 29, 227, 128, 166, 87, 204, 100, 60, 38, 166, 51, 171, 98, 224, 21, 65, 244, 32, 132, 81, 244, 203, 204, 50, 230, 36, 41, 1, 207, 241, 117, 15, 31, 95, 239, 162, 60, 203, 251, 220, 159, 163, 91, 205, 90, 12, 240, 137, 196, 179, 204, 48, 43, 196, 27, 196, 211, 155, 21, 131, 243, 62, 113, 152, 21, 100, 149, 248, 156, 120, 204, 164, 11, 18, 63, 114, 93, 113, 249, 141, 115, 222, 97, 129, 103, 134, 205, 84, 114, 158, 56, 76, 44, 230, 219, 88, 105, 99, 86, 48, 53, 226, 41, 226, 136, 170, 233, 148, 47, 164, 93, 86, 57, 111, 113, 214, 74, 85, 214, 188, 39, 127, 97, 40, 171, 175, 44, 115, 157, 230, 16, 226, 88, 196, 18, 36, 136, 80, 80, 69, 17, 37, 84, 16, 165, 85, 39, 197, 66, 146, 246, 99, 30, 254, 65, 199, 47, 145, 75, 33, 87, 17, 140, 28, 11, 40, 67, 131, 236, 248, 193, 255, 224, 119, 183, 86, 110, 114, 194, 77, 10, 197, 128, 206, 23, 219, 254, 24, 6, 2, 187, 64, 163, 102, 219, 223, 199, 182, 221, 56, 1, 252, 207, 192, 149, 222, 242, 151, 235, 192, 204, 39, 233, 181, 150, 22, 57, 2, 122, 183, 129, 139, 235, 150, 166, 236, 1, 151, 59, 192, 192, 147, 33, 155, 178, 35, 249, 105, 10, 185, 28, 240, 126, 70, 223, 148, 1, 250, 110, 129, 224, 154, 219, 91, 115, 31, 167, 15, 64, 138, 186, 74, 220, 0, 7, 135, 192, 72, 158, 178, 215, 61, 222, 221, 213, 222, 219, 191, 103, 154, 253, 253, 0, 105, 59, 114, 163, 137, 199, 135, 227, 0, 0, 0, 9, 112, 72, 89, 115, 0, 0, 46, 35, 0, 0, 46, 35, 1, 120, 165, 63, 118, 0, 0, 0, 25, 116, 69, 88, 116, 67, 111, 109, 109, 101, 110, 116, 0, 67, 114, 101, 97, 116, 101, 100, 32, 119, 105, 116, 104, 32, 71, 73, 77, 80, 87, 129, 14, 23, 0, 0, 0, 180, 101, 88, 73, 102, 73, 73, 42, 0, 8, 0, 0, 0, 6, 0, 18, 1, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, 26, 1, 5, 0, 1, 0, 0, 0, 86, 0, 0, 0, 27, 1, 5, 0, 1, 0, 0, 0, 94, 0, 0, 0, 40, 1, 3, 0, 1, 0, 0, 0, 2, 0, 0, 0, 19, 2, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, 105, 135, 4, 0, 1, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 223, 147, 4, 0, 232, 3, 0, 0, 223, 147, 4, 0, 232, 3, 0, 0, 6, 0, 0, 144, 7, 0, 4, 0, 0, 0, 48, 50, 49, 48, 1, 145, 7, 0, 4, 0, 0, 0, 1, 2, 3, 0, 0, 160, 7, 0, 4, 0, 0, 0, 48, 49, 48, 48, 1, 160, 3, 0, 1, 0, 0, 0, 255, 255, 0, 0, 2, 160, 4, 0, 1, 0, 0, 0, 13, 0, 0, 0, 3, 160, 4, 0, 1, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 22, 180, 142, 115, 0, 0, 1, 83, 73, 68, 65, 84, 120, 156, 125, 145, 77, 79, 194, 64, 16, 134, 249, 101, 94, 140, 150, 214, 20, 250, 181, 77, 139, 45, 17, 250, 21, 145, 22, 16, 76, 148, 66, 130, 144, 80, 19, 163, 70, 227, 205, 139, 137, 198, 139, 38, 254, 196, 215, 157, 245, 98, 11, 120, 152, 204, 102, 118, 159, 119, 102, 223, 169, 61, 232, 58, 118, 197, 90, 117, 113, 173, 180, 69, 254, 91, 175, 253, 7, 229, 174, 138, 172, 173, 136, 188, 21, 186, 55, 27, 40, 152, 134, 169, 99, 32, 119, 52, 220, 176, 6, 38, 158, 138, 110, 44, 161, 31, 202, 88, 181, 154, 188, 102, 84, 32, 67, 195, 194, 176, 17, 249, 38, 186, 33, 87, 247, 100, 228, 54, 67, 234, 25, 136, 227, 38, 178, 88, 195, 204, 51, 203, 208, 154, 3, 151, 166, 143, 184, 205, 144, 132, 117, 1, 21, 58, 195, 210, 98, 56, 11, 45, 116, 250, 22, 38, 39, 172, 12, 77, 93, 7, 131, 232, 24, 249, 128, 143, 48, 172, 227, 57, 85, 240, 114, 170, 138, 152, 157, 27, 8, 70, 54, 198, 85, 136, 10, 209, 5, 87, 158, 107, 248, 88, 200, 248, 188, 149, 68, 208, 153, 106, 116, 183, 21, 34, 53, 82, 125, 157, 28, 225, 235, 78, 194, 247, 227, 33, 222, 115, 5, 171, 76, 199, 176, 103, 241, 145, 173, 50, 68, 133, 52, 96, 34, 63, 113, 247, 8, 164, 46, 52, 94, 193, 93, 91, 58, 166, 200, 37, 168, 122, 65, 143, 223, 174, 126, 255, 85, 221, 223, 198, 114, 9, 202, 185, 181, 243, 17, 23, 153, 55, 177, 234, 49, 225, 108, 97, 171, 88, 182, 100, 177, 191, 13, 136, 186, 101, 124, 204, 104, 104, 35, 225, 159, 39, 71, 23, 166, 139, 169, 95, 71, 156, 236, 35, 241, 173, 221, 157, 104, 39, 100, 14, 173, 130, 58, 141, 59, 7, 80, 51, 9, 123, 65, 128, 31, 102, 240, 114, 131, 90, 76, 31, 132, 0, 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130>>)
          got: Ok(<<137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 13, 0, 0, 0, 13, 8, 6, 0, 0, 0, 114, 235, 228, 124, 0, 0, 1, 118, 105, 67, 67, 80, 105, 99, 99, 0, 0, 120, 156, 149, 145, 61, 72, 66, 81, 24, 134, 159, 123, 45, 10, 177, 28, 50, 136, 104, 184, 131, 5, 65, 65, 84, 68, 99, 89, 32, 65, 129, 152, 129, 86, 67, 247, 71, 77, 240, 94, 229, 94, 165, 197, 49, 104, 21, 26, 250, 89, 250, 27, 90, 154, 107, 109, 104, 13, 130, 160, 31, 136, 230, 134, 166, 162, 150, 136, 27, 71, 5, 37, 48, 232, 91, 206, 195, 123, 206, 251, 241, 125, 239, 1, 249, 48, 171, 155, 78, 203, 8, 152, 86, 193, 142, 134, 67, 74, 60, 177, 172, 180, 189, 224, 165, 19, 31, 131, 116, 171, 186, 147, 159, 142, 68, 230, 105, 90, 159, 119, 72, 226, 188, 29, 22, 189, 248, 95, 117, 24, 73, 71, 7, 73, 1, 166, 244, 188, 93, 0, 105, 13, 152, 216, 40, 228, 5, 239, 2, 1, 125, 93, 53, 64, 58, 3, 134, 236, 120, 98, 25, 164, 7, 161, 107, 85, 126, 21, 156, 174, 176, 44, 122, 6, 236, 88, 116, 6, 228, 0, 160, 164, 27, 88, 107, 96, 125, 221, 54, 65, 30, 7, 130, 134, 105, 25, 32, 199, 171, 108, 8, 46, 9, 54, 179, 69, 189, 54, 167, 216, 208, 151, 180, 150, 22, 133, 14, 244, 17, 102, 142, 5, 34, 40, 104, 20, 201, 144, 165, 192, 48, 25, 44, 20, 28, 162, 132, 9, 53, 241, 247, 86, 252, 17, 138, 104, 100, 201, 160, 163, 48, 75, 14, 19, 181, 226, 71, 252, 1, 191, 178, 117, 82, 99, 163, 213, 78, 190, 16, 180, 62, 187, 238, 123, 63, 180, 109, 195, 119, 217, 117, 191, 142, 92, 247, 251, 24, 60, 79, 112, 105, 213, 253, 185, 67, 152, 252, 0, 79, 185, 174, 5, 15, 192, 191, 9, 231, 87, 117, 77, 219, 129, 139, 45, 232, 121, 204, 171, 182, 90, 145, 60, 128, 156, 74, 193, 219, 41, 116, 36, 160, 235, 6, 188, 43, 213, 220, 106, 247, 156, 220, 67, 172, 4, 243, 215, 176, 183, 15, 3, 105, 240, 175, 54, 217, 187, 189, 49, 183, 63, 223, 212, 242, 251, 1, 105, 59, 114, 163, 251, 105, 200, 184, 0, 0, 0, 9, 112, 72, 89, 115, 0, 0, 46, 35, 0, 0, 46, 35, 1, 120, 165, 63, 118, 0, 0, 0, 25, 116, 69, 88, 116, 67, 111, 109, 109, 101, 110, 116, 0, 67, 114, 101, 97, 116, 101, 100, 32, 119, 105, 116, 104, 32, 71, 73, 77, 80, 87, 129, 14, 23, 0, 0, 0, 180, 101, 88, 73, 102, 73, 73, 42, 0, 8, 0, 0, 0, 6, 0, 18, 1, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, 26, 1, 5, 0, 1, 0, 0, 0, 86, 0, 0, 0, 27, 1, 5, 0, 1, 0, 0, 0, 94, 0, 0, 0, 40, 1, 3, 0, 1, 0, 0, 0, 2, 0, 0, 0, 19, 2, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, 105, 135, 4, 0, 1, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 223, 147, 4, 0, 232, 3, 0, 0, 223, 147, 4, 0, 232, 3, 0, 0, 6, 0, 0, 144, 7, 0, 4, 0, 0, 0, 48, 50, 49, 48, 1, 145, 7, 0, 4, 0, 0, 0, 1, 2, 3, 0, 0, 160, 7, 0, 4, 0, 0, 0, 48, 49, 48, 48, 1, 160, 3, 0, 1, 0, 0, 0, 255, 255, 0, 0, 2, 160, 4, 0, 1, 0, 0, 0, 13, 0, 0, 0, 3, 160, 4, 0, 1, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 22, 180, 142, 115, 0, 0, 1, 85, 73, 68, 65, 84, 120, 156, 125, 145, 95, 79, 194, 48, 20, 197, 249, 100, 190, 24, 29, 155, 25, 108, 93, 187, 108, 184, 17, 96, 255, 34, 194, 0, 129, 68, 41, 36, 56, 18, 70, 98, 148, 104, 124, 243, 197, 68, 227, 139, 38, 126, 196, 99, 90, 95, 220, 0, 31, 110, 78, 115, 219, 95, 79, 123, 79, 101, 107, 154, 56, 84, 107, 221, 197, 173, 214, 148, 250, 183, 95, 249, 15, 226, 174, 142, 180, 169, 73, 221, 11, 61, 88, 53, 228, 204, 192, 204, 33, 224, 142, 129, 13, 171, 97, 226, 233, 232, 196, 10, 122, 161, 138, 85, 163, 142, 13, 35, 37, 136, 24, 88, 18, 27, 145, 111, 161, 19, 106, 224, 158, 10, 110, 51, 244, 61, 130, 56, 174, 35, 141, 13, 204, 61, 171, 8, 173, 137, 141, 107, 203, 71, 220, 100, 72, 194, 170, 132, 114, 147, 33, 163, 12, 151, 33, 69, 187, 71, 49, 105, 177, 34, 52, 115, 29, 12, 162, 115, 240, 1, 193, 118, 88, 197, 115, 95, 195, 203, 133, 46, 107, 126, 69, 16, 140, 108, 140, 203, 208, 184, 197, 16, 77, 25, 178, 133, 129, 143, 165, 138, 207, 59, 69, 150, 88, 139, 158, 216, 219, 11, 5, 35, 91, 222, 250, 58, 57, 195, 215, 189, 130, 239, 199, 83, 188, 115, 13, 171, 212, 196, 176, 75, 193, 61, 90, 132, 184, 71, 209, 15, 152, 212, 39, 199, 144, 160, 112, 17, 207, 203, 25, 65, 230, 88, 82, 11, 80, 121, 67, 28, 126, 187, 249, 253, 87, 57, 191, 157, 112, 5, 196, 61, 11, 139, 17, 65, 182, 168, 99, 213, 101, 114, 178, 185, 173, 35, 107, 168, 50, 191, 29, 72, 184, 165, 1, 67, 52, 180, 145, 76, 153, 156, 232, 210, 114, 49, 243, 171, 136, 147, 99, 36, 62, 61, 236, 36, 50, 17, 195, 17, 81, 8, 167, 113, 251, 4, 122, 170, 224, 40, 8, 240, 3, 102, 240, 114, 131, 241, 87, 20, 137, 0, 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130>>)
     output: 

  8) image_test.rotate_test
     Values were not equal
     expected: Ok(<<137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 18, 0, 0, 0, 18, 8, 6, 0, 0, 0, 86, 206, 142, 87, 0, 0, 1, 125, 105, 67, 67, 80, 105, 99, 99, 0, 0, 120, 156, 125, 145, 61, 72, 195, 64, 28, 197, 95, 83, 165, 82, 170, 14, 86, 16, 113, 200, 80, 5, 193, 130, 168, 136, 163, 86, 161, 8, 21, 66, 173, 208, 170, 131, 201, 165, 95, 208, 164, 33, 105, 113, 113, 20, 92, 11, 14, 126, 44, 86, 29, 92, 156, 117, 117, 112, 21, 4, 193, 15, 16, 103, 7, 39, 69, 23, 41, 241, 127, 73, 161, 69, 140, 7, 199, 253, 120, 119, 239, 113, 247, 14, 16, 234, 37, 166, 89, 29, 227, 128, 166, 87, 204, 100, 60, 38, 166, 51, 171, 98, 224, 21, 65, 244, 32, 132, 81, 244, 203, 204, 50, 230, 36, 41, 1, 207, 241, 117, 15, 31, 95, 239, 162, 60, 203, 251, 220, 159, 163, 91, 205, 90, 12, 240, 137, 196, 179, 204, 48, 43, 196, 27, 196, 211, 155, 21, 131, 243, 62, 113, 152, 21, 100, 149, 248, 156, 120, 204, 164, 11, 18, 63, 114, 93, 113, 249, 141, 115, 222, 97, 129, 103, 134, 205, 84, 114, 158, 56, 76, 44, 230, 219, 88, 105, 99, 86, 48, 53, 226, 41, 226, 136, 170, 233, 148, 47, 164, 93, 86, 57, 111, 113, 214, 74, 85, 214, 188, 39, 127, 97, 40, 171, 175, 44, 115, 157, 230, 16, 226, 88, 196, 18, 36, 136, 80, 80, 69, 17, 37, 84, 16, 165, 85, 39, 197, 66, 146, 246, 99, 30, 254, 65, 199, 47, 145, 75, 33, 87, 17, 140, 28, 11, 40, 67, 131, 236, 248, 193, 255, 224, 119, 183, 86, 110, 114, 194, 77, 10, 197, 128, 206, 23, 219, 254, 24, 6, 2, 187, 64, 163, 102, 219, 223, 199, 182, 221, 56, 1, 252, 207, 192, 149, 222, 242, 151, 235, 192, 204, 39, 233, 181, 150, 22, 57, 2, 122, 183, 129, 139, 235, 150, 166, 236, 1, 151, 59, 192, 192, 147, 33, 155, 178, 35, 249, 105, 10, 185, 28, 240, 126, 70, 223, 148, 1, 250, 110, 129, 224, 154, 219, 91, 115, 31, 167, 15, 64, 138, 186, 74, 220, 0, 7, 135, 192, 72, 158, 178, 215, 61, 222, 221, 213, 222, 219, 191, 103, 154, 253, 253, 0, 105, 59, 114, 163, 137, 199, 135, 227, 0, 0, 0, 9, 112, 72, 89, 115, 0, 0, 46, 35, 0, 0, 46, 35, 1, 120, 165, 63, 118, 0, 0, 0, 25, 116, 69, 88, 116, 67, 111, 109, 109, 101, 110, 116, 0, 67, 114, 101, 97, 116, 101, 100, 32, 119, 105, 116, 104, 32, 71, 73, 77, 80, 87, 129, 14, 23, 0, 0, 0, 180, 101, 88, 73, 102, 73, 73, 42, 0, 8, 0, 0, 0, 6, 0, 18, 1, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, 26, 1, 5, 0, 1, 0, 0, 0, 86, 0, 0, 0, 27, 1, 5, 0, 1, 0, 0, 0, 94, 0, 0, 0, 40, 1, 3, 0, 1, 0, 0, 0, 2, 0, 0, 0, 19, 2, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, 105, 135, 4, 0, 1, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 223, 147, 4, 0, 232, 3, 0, 0, 223, 147, 4, 0, 232, 3, 0, 0, 6, 0, 0, 144, 7, 0, 4, 0, 0, 0, 48, 50, 49, 48, 1, 145, 7, 0, 4, 0, 0, 0, 1, 2, 3, 0, 0, 160, 7, 0, 4, 0, 0, 0, 48, 49, 48, 48, 1, 160, 3, 0, 1, 0, 0, 0, 255, 255, 0, 0, 2, 160, 4, 0, 1, 0, 0, 0, 18, 0, 0, 0, 3, 160, 4, 0, 1, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 47, 118, 118, 240, 0, 0, 1, 246, 73, 68, 65, 84, 120, 156, 157, 147, 203, 75, 27, 81, 20, 198, 117, 33, 184, 22, 186, 21, 92, 70, 49, 226, 27, 20, 93, 104, 52, 26, 95, 119, 156, 36, 163, 102, 166, 29, 98, 18, 124, 197, 119, 148, 137, 241, 17, 66, 124, 39, 145, 108, 68, 209, 86, 91, 20, 131, 210, 34, 45, 22, 186, 18, 215, 66, 215, 5, 183, 130, 107, 255, 129, 207, 155, 49, 147, 206, 132, 24, 163, 7, 62, 230, 194, 61, 247, 119, 207, 57, 223, 157, 156, 156, 44, 34, 194, 48, 12, 21, 168, 12, 217, 228, 167, 141, 48, 33, 66, 2, 18, 215, 35, 85, 237, 155, 33, 244, 208, 136, 10, 162, 232, 158, 170, 228, 45, 144, 57, 53, 32, 204, 16, 53, 236, 31, 173, 180, 48, 27, 72, 64, 13, 9, 17, 6, 155, 131, 213, 169, 149, 221, 82, 21, 100, 130, 236, 168, 15, 204, 10, 86, 120, 107, 252, 112, 244, 186, 96, 18, 69, 13, 44, 220, 109, 190, 222, 168, 240, 230, 165, 131, 28, 168, 19, 71, 29, 22, 148, 172, 11, 240, 240, 28, 198, 28, 77, 168, 12, 22, 99, 185, 223, 36, 239, 5, 184, 78, 12, 51, 60, 182, 234, 199, 127, 166, 66, 98, 106, 136, 203, 101, 69, 89, 80, 64, 36, 218, 129, 147, 197, 118, 44, 240, 109, 240, 217, 218, 229, 189, 37, 11, 139, 250, 21, 61, 196, 209, 6, 37, 255, 52, 14, 200, 165, 250, 158, 234, 14, 55, 209, 7, 175, 141, 69, 180, 175, 7, 191, 14, 12, 248, 38, 153, 18, 67, 103, 96, 50, 207, 193, 238, 108, 211, 228, 43, 213, 24, 211, 216, 44, 43, 14, 186, 58, 54, 224, 79, 172, 9, 71, 158, 103, 216, 118, 47, 129, 123, 170, 17, 246, 17, 171, 22, 148, 128, 177, 47, 193, 46, 119, 91, 240, 35, 218, 138, 223, 95, 155, 241, 121, 178, 3, 195, 78, 11, 74, 87, 5, 204, 138, 102, 165, 202, 135, 212, 57, 137, 114, 91, 227, 28, 28, 67, 207, 183, 93, 132, 90, 113, 190, 97, 148, 215, 123, 206, 46, 44, 238, 119, 161, 60, 192, 99, 94, 96, 149, 139, 238, 168, 244, 233, 156, 115, 47, 247, 179, 168, 243, 219, 224, 11, 119, 227, 44, 248, 127, 22, 158, 79, 102, 212, 248, 121, 248, 6, 146, 144, 191, 84, 69, 153, 222, 146, 36, 241, 44, 244, 212, 181, 169, 143, 156, 166, 205, 53, 75, 114, 125, 19, 33, 228, 195, 139, 16, 37, 104, 223, 171, 210, 128, 21, 190, 170, 128, 252, 178, 53, 115, 35, 228, 138, 126, 243, 95, 133, 36, 97, 132, 68, 67, 244, 31, 155, 152, 209, 65, 18, 140, 10, 36, 150, 53, 64, 29, 238, 193, 230, 47, 165, 107, 58, 234, 80, 75, 28, 116, 248, 46, 136, 18, 58, 251, 228, 5, 195, 78, 239, 100, 202, 121, 2, 218, 94, 135, 62, 20, 62, 81, 224, 0, 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130>>)
          got: Ok(<<137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 18, 0, 0, 0, 18, 8, 6, 0, 0, 0, 86, 206, 142, 87, 0, 0, 1, 118, 105, 67, 67, 80, 105, 99, 99, 0, 0, 120, 156, 149, 145, 61, 72, 66, 81, 24, 134, 159, 123, 45, 10, 177, 28, 50, 136, 104, 184, 131, 5, 65, 65, 84, 68, 99, 89, 32, 65, 129, 152, 129, 86, 67, 247, 71, 77, 240, 94, 229, 94, 165, 197, 49, 104, 21, 26, 250, 89, 250, 27, 90, 154, 107, 109, 104, 13, 130, 160, 31, 136, 230, 134, 166, 162, 150, 136, 27, 71, 5, 37, 48, 232, 91, 206, 195, 123, 206, 251, 241, 125, 239, 1, 249, 48, 171, 155, 78, 203, 8, 152, 86, 193, 142, 134, 67, 74, 60, 177, 172, 180, 189, 224, 165, 19, 31, 131, 116, 171, 186, 147, 159, 142, 68, 230, 105, 90, 159, 119, 72, 226, 188, 29, 22, 189, 248, 95, 117, 24, 73, 71, 7, 73, 1, 166, 244, 188, 93, 0, 105, 13, 152, 216, 40, 228, 5, 239, 2, 1, 125, 93, 53, 64, 58, 3, 134, 236, 120, 98, 25, 164, 7, 161, 107, 85, 126, 21, 156, 174, 176, 44, 122, 6, 236, 88, 116, 6, 228, 0, 160, 164, 27, 88, 107, 96, 125, 221, 54, 65, 30, 7, 130, 134, 105, 25, 32, 199, 171, 108, 8, 46, 9, 54, 179, 69, 189, 54, 167, 216, 208, 151, 180, 150, 22, 133, 14, 244, 17, 102, 142, 5, 34, 40, 104, 20, 201, 144, 165, 192, 48, 25, 44, 20, 28, 162, 132, 9, 53, 241, 247, 86, 252, 17, 138, 104, 100, 201, 160, 163, 48, 75, 14, 19, 181, 226, 71, 252, 1, 191, 178, 117, 82, 99, 163, 213, 78, 190, 16, 180, 62, 187, 238, 123, 63, 180, 109, 195, 119, 217, 117, 191, 142, 92, 247, 251, 24, 60, 79, 112, 105, 213, 253, 185, 67, 152, 252, 0, 79, 185, 174, 5, 15, 192, 191, 9, 231, 87, 117, 77, 219, 129, 139, 45, 232, 121, 204, 171, 182, 90, 145, 60, 128, 156, 74, 193, 219, 41, 116, 36, 160, 235, 6, 188, 43, 213, 220, 106, 247, 156, 220, 67, 172, 4, 243, 215, 176, 183, 15, 3, 105, 240, 175, 54, 217, 187, 189, 49, 183, 63, 223, 212, 242, 251, 1, 105, 59, 114, 163, 251, 105, 200, 184, 0, 0, 0, 9, 112, 72, 89, 115, 0, 0, 46, 35, 0, 0, 46, 35, 1, 120, 165, 63, 118, 0, 0, 0, 25, 116, 69, 88, 116, 67, 111, 109, 109, 101, 110, 116, 0, 67, 114, 101, 97, 116, 101, 100, 32, 119, 105, 116, 104, 32, 71, 73, 77, 80, 87, 129, 14, 23, 0, 0, 0, 180, 101, 88, 73, 102, 73, 73, 42, 0, 8, 0, 0, 0, 6, 0, 18, 1, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, 26, 1, 5, 0, 1, 0, 0, 0, 86, 0, 0, 0, 27, 1, 5, 0, 1, 0, 0, 0, 94, 0, 0, 0, 40, 1, 3, 0, 1, 0, 0, 0, 2, 0, 0, 0, 19, 2, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, 105, 135, 4, 0, 1, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 223, 147, 4, 0, 232, 3, 0, 0, 223, 147, 4, 0, 232, 3, 0, 0, 6, 0, 0, 144, 7, 0, 4, 0, 0, 0, 48, 50, 49, 48, 1, 145, 7, 0, 4, 0, 0, 0, 1, 2, 3, 0, 0, 160, 7, 0, 4, 0, 0, 0, 48, 49, 48, 48, 1, 160, 3, 0, 1, 0, 0, 0, 255, 255, 0, 0, 2, 160, 4, 0, 1, 0, 0, 0, 18, 0, 0, 0, 3, 160, 4, 0, 1, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 47, 118, 118, 240, 0, 0, 2, 0, 73, 68, 65, 84, 120, 156, 157, 210, 207, 75, 27, 65, 20, 7, 240, 237, 65, 232, 185, 208, 171, 208, 99, 42, 166, 216, 31, 10, 149, 246, 160, 241, 87, 172, 58, 207, 77, 178, 209, 236, 182, 75, 76, 66, 213, 198, 159, 137, 101, 211, 88, 27, 66, 180, 106, 179, 35, 123, 41, 45, 246, 55, 45, 6, 165, 165, 180, 88, 232, 169, 120, 46, 244, 92, 232, 85, 232, 185, 255, 192, 87, 178, 113, 227, 110, 72, 99, 244, 193, 192, 192, 188, 249, 204, 155, 55, 35, 8, 117, 4, 39, 34, 78, 4, 78, 228, 17, 78, 27, 58, 99, 202, 33, 82, 28, 255, 56, 81, 219, 137, 17, 78, 52, 97, 67, 172, 177, 207, 137, 154, 78, 130, 44, 216, 1, 157, 152, 29, 251, 173, 51, 214, 88, 15, 146, 181, 35, 121, 70, 88, 27, 187, 86, 89, 217, 79, 78, 116, 174, 22, 178, 97, 223, 144, 80, 2, 72, 181, 102, 16, 25, 142, 193, 171, 170, 14, 76, 31, 244, 253, 88, 189, 156, 106, 168, 134, 108, 218, 19, 39, 35, 126, 52, 61, 86, 144, 148, 37, 220, 139, 116, 224, 74, 238, 34, 150, 70, 188, 230, 90, 86, 186, 133, 113, 146, 177, 222, 62, 245, 165, 18, 41, 216, 145, 88, 44, 128, 75, 57, 5, 220, 232, 199, 251, 197, 62, 60, 144, 123, 145, 14, 245, 153, 107, 15, 253, 34, 218, 31, 185, 161, 78, 222, 176, 242, 63, 20, 129, 51, 156, 232, 99, 229, 235, 72, 211, 65, 164, 66, 34, 140, 224, 16, 190, 110, 122, 240, 78, 43, 85, 162, 19, 193, 235, 91, 64, 56, 218, 235, 200, 183, 170, 233, 169, 242, 204, 230, 48, 130, 67, 216, 125, 227, 193, 247, 66, 7, 94, 39, 75, 216, 147, 97, 134, 248, 236, 77, 132, 39, 2, 78, 232, 16, 19, 255, 135, 125, 126, 218, 133, 79, 70, 55, 190, 189, 237, 196, 203, 153, 126, 140, 71, 253, 104, 94, 86, 144, 80, 125, 86, 149, 127, 43, 251, 164, 154, 215, 154, 146, 16, 185, 91, 58, 109, 39, 223, 141, 237, 213, 30, 115, 254, 44, 58, 128, 197, 231, 3, 104, 201, 202, 184, 175, 136, 214, 65, 127, 56, 145, 187, 218, 203, 197, 151, 70, 68, 92, 207, 132, 144, 214, 7, 177, 149, 59, 234, 69, 242, 142, 15, 173, 25, 25, 233, 209, 50, 242, 139, 19, 93, 168, 245, 151, 52, 77, 22, 225, 206, 41, 152, 189, 45, 57, 174, 185, 226, 47, 207, 247, 56, 99, 231, 143, 249, 219, 130, 160, 19, 45, 107, 163, 1, 164, 175, 102, 205, 159, 237, 232, 27, 99, 187, 156, 232, 236, 177, 72, 25, 99, 204, 200, 19, 195, 244, 188, 11, 154, 82, 234, 19, 103, 172, 80, 55, 96, 143, 248, 88, 231, 171, 230, 21, 23, 18, 106, 87, 17, 122, 113, 42, 196, 10, 87, 120, 102, 135, 196, 185, 141, 90, 73, 7, 218, 94, 135, 62, 145, 151, 119, 1, 0, 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130>>)
     output: 

  9) image_test.rotate90_test
     Values were not equal
     expected: Ok(<<137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 13, 0, 0, 0, 13, 8, 6, 0, 0, 0, 114, 235, 228, 124, 0, 0, 1, 125, 105, 67, 67, 80, 105, 99, 99, 0, 0, 120, 156, 125, 145, 61, 72, 195, 64, 28, 197, 95, 83, 165, 82, 170, 14, 86, 16, 113, 200, 80, 5, 193, 130, 168, 136, 163, 86, 161, 8, 21, 66, 173, 208, 170, 131, 201, 165, 95, 208, 164, 33, 105, 113, 113, 20, 92, 11, 14, 126, 44, 86, 29, 92, 156, 117, 117, 112, 21, 4, 193, 15, 16, 103, 7, 39, 69, 23, 41, 241, 127, 73, 161, 69, 140, 7, 199, 253, 120, 119, 239, 113, 247, 14, 16, 234, 37, 166, 89, 29, 227, 128, 166, 87, 204, 100, 60, 38, 166, 51, 171, 98, 224, 21, 65, 244, 32, 132, 81, 244, 203, 204, 50, 230, 36, 41, 1, 207, 241, 117, 15, 31, 95, 239, 162, 60, 203, 251, 220, 159, 163, 91, 205, 90, 12, 240, 137, 196, 179, 204, 48, 43, 196, 27, 196, 211, 155, 21, 131, 243, 62, 113, 152, 21, 100, 149, 248, 156, 120, 204, 164, 11, 18, 63, 114, 93, 113, 249, 141, 115, 222, 97, 129, 103, 134, 205, 84, 114, 158, 56, 76, 44, 230, 219, 88, 105, 99, 86, 48, 53, 226, 41, 226, 136, 170, 233, 148, 47, 164, 93, 86, 57, 111, 113, 214, 74, 85, 214, 188, 39, 127, 97, 40, 171, 175, 44, 115, 157, 230, 16, 226, 88, 196, 18, 36, 136, 80, 80, 69, 17, 37, 84, 16, 165, 85, 39, 197, 66, 146, 246, 99, 30, 254, 65, 199, 47, 145, 75, 33, 87, 17, 140, 28, 11, 40, 67, 131, 236, 248, 193, 255, 224, 119, 183, 86, 110, 114, 194, 77, 10, 197, 128, 206, 23, 219, 254, 24, 6, 2, 187, 64, 163, 102, 219, 223, 199, 182, 221, 56, 1, 252, 207, 192, 149, 222, 242, 151, 235, 192, 204, 39, 233, 181, 150, 22, 57, 2, 122, 183, 129, 139, 235, 150, 166, 236, 1, 151, 59, 192, 192, 147, 33, 155, 178, 35, 249, 105, 10, 185, 28, 240, 126, 70, 223, 148, 1, 250, 110, 129, 224, 154, 219, 91, 115, 31, 167, 15, 64, 138, 186, 74, 220, 0, 7, 135, 192, 72, 158, 178, 215, 61, 222, 221, 213, 222, 219, 191, 103, 154, 253, 253, 0, 105, 59, 114, 163, 137, 199, 135, 227, 0, 0, 0, 9, 112, 72, 89, 115, 0, 0, 46, 35, 0, 0, 46, 35, 1, 120, 165, 63, 118, 0, 0, 0, 25, 116, 69, 88, 116, 67, 111, 109, 109, 101, 110, 116, 0, 67, 114, 101, 97, 116, 101, 100, 32, 119, 105, 116, 104, 32, 71, 73, 77, 80, 87, 129, 14, 23, 0, 0, 0, 180, 101, 88, 73, 102, 73, 73, 42, 0, 8, 0, 0, 0, 6, 0, 18, 1, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, 26, 1, 5, 0, 1, 0, 0, 0, 86, 0, 0, 0, 27, 1, 5, 0, 1, 0, 0, 0, 94, 0, 0, 0, 40, 1, 3, 0, 1, 0, 0, 0, 2, 0, 0, 0, 19, 2, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, 105, 135, 4, 0, 1, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 223, 147, 4, 0, 232, 3, 0, 0, 223, 147, 4, 0, 232, 3, 0, 0, 6, 0, 0, 144, 7, 0, 4, 0, 0, 0, 48, 50, 49, 48, 1, 145, 7, 0, 4, 0, 0, 0, 1, 2, 3, 0, 0, 160, 7, 0, 4, 0, 0, 0, 48, 49, 48, 48, 1, 160, 3, 0, 1, 0, 0, 0, 255, 255, 0, 0, 2, 160, 4, 0, 1, 0, 0, 0, 13, 0, 0, 0, 3, 160, 4, 0, 1, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 22, 180, 142, 115, 0, 0, 0, 107, 73, 68, 65, 84, 120, 156, 99, 232, 15, 12, 252, 79, 42, 102, 24, 56, 77, 26, 157, 113, 40, 184, 67, 163, 243, 127, 103, 174, 6, 113, 54, 237, 94, 229, 132, 48, 40, 172, 19, 83, 19, 200, 68, 92, 154, 116, 59, 53, 192, 24, 67, 147, 97, 123, 44, 138, 224, 174, 149, 206, 40, 54, 97, 245, 19, 200, 38, 144, 34, 24, 38, 90, 19, 33, 63, 193, 156, 9, 10, 24, 176, 38, 16, 3, 159, 38, 172, 161, 135, 46, 136, 30, 236, 232, 126, 102, 192, 22, 58, 4, 35, 23, 61, 14, 136, 193, 0, 245, 201, 114, 145, 170, 211, 34, 245, 0, 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130>>)
          got: Ok(<<137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 13, 0, 0, 0, 13, 8, 6, 0, 0, 0, 114, 235, 228, 124, 0, 0, 1, 118, 105, 67, 67, 80, 105, 99, 99, 0, 0, 120, 156, 149, 145, 61, 72, 66, 81, 24, 134, 159, 123, 45, 10, 177, 28, 50, 136, 104, 184, 131, 5, 65, 65, 84, 68, 99, 89, 32, 65, 129, 152, 129, 86, 67, 247, 71, 77, 240, 94, 229, 94, 165, 197, 49, 104, 21, 26, 250, 89, 250, 27, 90, 154, 107, 109, 104, 13, 130, 160, 31, 136, 230, 134, 166, 162, 150, 136, 27, 71, 5, 37, 48, 232, 91, 206, 195, 123, 206, 251, 241, 125, 239, 1, 249, 48, 171, 155, 78, 203, 8, 152, 86, 193, 142, 134, 67, 74, 60, 177, 172, 180, 189, 224, 165, 19, 31, 131, 116, 171, 186, 147, 159, 142, 68, 230, 105, 90, 159, 119, 72, 226, 188, 29, 22, 189, 248, 95, 117, 24, 73, 71, 7, 73, 1, 166, 244, 188, 93, 0, 105, 13, 152, 216, 40, 228, 5, 239, 2, 1, 125, 93, 53, 64, 58, 3, 134, 236, 120, 98, 25, 164, 7, 161, 107, 85, 126, 21, 156, 174, 176, 44, 122, 6, 236, 88, 116, 6, 228, 0, 160, 164, 27, 88, 107, 96, 125, 221, 54, 65, 30, 7, 130, 134, 105, 25, 32, 199, 171, 108, 8, 46, 9, 54, 179, 69, 189, 54, 167, 216, 208, 151, 180, 150, 22, 133, 14, 244, 17, 102, 142, 5, 34, 40, 104, 20, 201, 144, 165, 192, 48, 25, 44, 20, 28, 162, 132, 9, 53, 241, 247, 86, 252, 17, 138, 104, 100, 201, 160, 163, 48, 75, 14, 19, 181, 226, 71, 252, 1, 191, 178, 117, 82, 99, 163, 213, 78, 190, 16, 180, 62, 187, 238, 123, 63, 180, 109, 195, 119, 217, 117, 191, 142, 92, 247, 251, 24, 60, 79, 112, 105, 213, 253, 185, 67, 152, 252, 0, 79, 185, 174, 5, 15, 192, 191, 9, 231, 87, 117, 77, 219, 129, 139, 45, 232, 121, 204, 171, 182, 90, 145, 60, 128, 156, 74, 193, 219, 41, 116, 36, 160, 235, 6, 188, 43, 213, 220, 106, 247, 156, 220, 67, 172, 4, 243, 215, 176, 183, 15, 3, 105, 240, 175, 54, 217, 187, 189, 49, 183, 63, 223, 212, 242, 251, 1, 105, 59, 114, 163, 251, 105, 200, 184, 0, 0, 0, 9, 112, 72, 89, 115, 0, 0, 46, 35, 0, 0, 46, 35, 1, 120, 165, 63, 118, 0, 0, 0, 25, 116, 69, 88, 116, 67, 111, 109, 109, 101, 110, 116, 0, 67, 114, 101, 97, 116, 101, 100, 32, 119, 105, 116, 104, 32, 71, 73, 77, 80, 87, 129, 14, 23, 0, 0, 0, 180, 101, 88, 73, 102, 73, 73, 42, 0, 8, 0, 0, 0, 6, 0, 18, 1, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, 26, 1, 5, 0, 1, 0, 0, 0, 86, 0, 0, 0, 27, 1, 5, 0, 1, 0, 0, 0, 94, 0, 0, 0, 40, 1, 3, 0, 1, 0, 0, 0, 2, 0, 0, 0, 19, 2, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, 105, 135, 4, 0, 1, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 223, 147, 4, 0, 232, 3, 0, 0, 223, 147, 4, 0, 232, 3, 0, 0, 6, 0, 0, 144, 7, 0, 4, 0, 0, 0, 48, 50, 49, 48, 1, 145, 7, 0, 4, 0, 0, 0, 1, 2, 3, 0, 0, 160, 7, 0, 4, 0, 0, 0, 48, 49, 48, 48, 1, 160, 3, 0, 1, 0, 0, 0, 255, 255, 0, 0, 2, 160, 4, 0, 1, 0, 0, 0, 13, 0, 0, 0, 3, 160, 4, 0, 1, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 22, 180, 142, 115, 0, 0, 0, 111, 73, 68, 65, 84, 120, 156, 99, 232, 15, 12, 252, 79, 42, 102, 24, 56, 77, 26, 157, 113, 40, 184, 67, 163, 243, 127, 103, 174, 6, 113, 54, 237, 94, 229, 132, 48, 40, 172, 19, 83, 147, 70, 103, 28, 78, 77, 186, 157, 26, 96, 140, 161, 201, 176, 61, 22, 69, 112, 215, 74, 103, 20, 155, 176, 250, 73, 163, 51, 14, 172, 8, 134, 137, 214, 212, 79, 192, 79, 48, 103, 130, 2, 6, 172, 9, 196, 192, 167, 9, 107, 232, 161, 11, 162, 7, 59, 186, 159, 25, 176, 133, 14, 193, 200, 69, 143, 3, 98, 52, 1, 0, 245, 201, 114, 145, 55, 32, 185, 140, 0, 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130>>)
     output: 

  10) image_test.rotate180_test
     Values were not equal
     expected: Ok(<<137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 13, 0, 0, 0, 13, 8, 6, 0, 0, 0, 114, 235, 228, 124, 0, 0, 1, 125, 105, 67, 67, 80, 105, 99, 99, 0, 0, 120, 156, 125, 145, 61, 72, 195, 64, 28, 197, 95, 83, 165, 82, 170, 14, 86, 16, 113, 200, 80, 5, 193, 130, 168, 136, 163, 86, 161, 8, 21, 66, 173, 208, 170, 131, 201, 165, 95, 208, 164, 33, 105, 113, 113, 20, 92, 11, 14, 126, 44, 86, 29, 92, 156, 117, 117, 112, 21, 4, 193, 15, 16, 103, 7, 39, 69, 23, 41, 241, 127, 73, 161, 69, 140, 7, 199, 253, 120, 119, 239, 113, 247, 14, 16, 234, 37, 166, 89, 29, 227, 128, 166, 87, 204, 100, 60, 38, 166, 51, 171, 98, 224, 21, 65, 244, 32, 132, 81, 244, 203, 204, 50, 230, 36, 41, 1, 207, 241, 117, 15, 31, 95, 239, 162, 60, 203, 251, 220, 159, 163, 91, 205, 90, 12, 240, 137, 196, 179, 204, 48, 43, 196, 27, 196, 211, 155, 21, 131, 243, 62, 113, 152, 21, 100, 149, 248, 156, 120, 204, 164, 11, 18, 63, 114, 93, 113, 249, 141, 115, 222, 97, 129, 103, 134, 205, 84, 114, 158, 56, 76, 44, 230, 219, 88, 105, 99, 86, 48, 53, 226, 41, 226, 136, 170, 233, 148, 47, 164, 93, 86, 57, 111, 113, 214, 74, 85, 214, 188, 39, 127, 97, 40, 171, 175, 44, 115, 157, 230, 16, 226, 88, 196, 18, 36, 136, 80, 80, 69, 17, 37, 84, 16, 165, 85, 39, 197, 66, 146, 246, 99, 30, 254, 65, 199, 47, 145, 75, 33, 87, 17, 140, 28, 11, 40, 67, 131, 236, 248, 193, 255, 224, 119, 183, 86, 110, 114, 194, 77, 10, 197, 128, 206, 23, 219, 254, 24, 6, 2, 187, 64, 163, 102, 219, 223, 199, 182, 221, 56, 1, 252, 207, 192, 149, 222, 242, 151, 235, 192, 204, 39, 233, 181, 150, 22, 57, 2, 122, 183, 129, 139, 235, 150, 166, 236, 1, 151, 59, 192, 192, 147, 33, 155, 178, 35, 249, 105, 10, 185, 28, 240, 126, 70, 223, 148, 1, 250, 110, 129, 224, 154, 219, 91, 115, 31, 167, 15, 64, 138, 186, 74, 220, 0, 7, 135, 192, 72, 158, 178, 215, 61, 222, 221, 213, 222, 219, 191, 103, 154, 253, 253, 0, 105, 59, 114, 163, 137, 199, 135, 227, 0, 0, 0, 9, 112, 72, 89, 115, 0, 0, 46, 35, 0, 0, 46, 35, 1, 120, 165, 63, 118, 0, 0, 0, 25, 116, 69, 88, 116, 67, 111, 109, 109, 101, 110, 116, 0, 67, 114, 101, 97, 116, 101, 100, 32, 119, 105, 116, 104, 32, 71, 73, 77, 80, 87, 129, 14, 23, 0, 0, 0, 180, 101, 88, 73, 102, 73, 73, 42, 0, 8, 0, 0, 0, 6, 0, 18, 1, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, 26, 1, 5, 0, 1, 0, 0, 0, 86, 0, 0, 0, 27, 1, 5, 0, 1, 0, 0, 0, 94, 0, 0, 0, 40, 1, 3, 0, 1, 0, 0, 0, 2, 0, 0, 0, 19, 2, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, 105, 135, 4, 0, 1, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 223, 147, 4, 0, 232, 3, 0, 0, 223, 147, 4, 0, 232, 3, 0, 0, 6, 0, 0, 144, 7, 0, 4, 0, 0, 0, 48, 50, 49, 48, 1, 145, 7, 0, 4, 0, 0, 0, 1, 2, 3, 0, 0, 160, 7, 0, 4, 0, 0, 0, 48, 49, 48, 48, 1, 160, 3, 0, 1, 0, 0, 0, 255, 255, 0, 0, 2, 160, 4, 0, 1, 0, 0, 0, 13, 0, 0, 0, 3, 160, 4, 0, 1, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 22, 180, 142, 115, 0, 0, 0, 111, 73, 68, 65, 84, 120, 156, 99, 208, 8, 235, 252, 175, 219, 169, 241, 191, 63, 48, 144, 104, 204, 0, 34, 64, 154, 58, 115, 53, 254, 119, 104, 116, 254, 215, 232, 140, 3, 99, 195, 246, 88, 48, 141, 83, 19, 58, 222, 189, 202, 137, 176, 77, 52, 209, 132, 238, 76, 6, 108, 18, 187, 86, 58, 131, 49, 81, 154, 64, 54, 96, 195, 68, 217, 132, 142, 73, 210, 4, 139, 63, 80, 84, 96, 213, 4, 138, 23, 80, 92, 129, 34, 27, 89, 19, 136, 15, 18, 199, 27, 122, 196, 164, 14, 234, 104, 66, 119, 63, 54, 12, 0, 254, 80, 114, 145, 94, 19, 27, 165, 0, 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130>>)
          got: Ok(<<137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 13, 0, 0, 0, 13, 8, 6, 0, 0, 0, 114, 235, 228, 124, 0, 0, 1, 118, 105, 67, 67, 80, 105, 99, 99, 0, 0, 120, 156, 149, 145, 61, 72, 66, 81, 24, 134, 159, 123, 45, 10, 177, 28, 50, 136, 104, 184, 131, 5, 65, 65, 84, 68, 99, 89, 32, 65, 129, 152, 129, 86, 67, 247, 71, 77, 240, 94, 229, 94, 165, 197, 49, 104, 21, 26, 250, 89, 250, 27, 90, 154, 107, 109, 104, 13, 130, 160, 31, 136, 230, 134, 166, 162, 150, 136, 27, 71, 5, 37, 48, 232, 91, 206, 195, 123, 206, 251, 241, 125, 239, 1, 249, 48, 171, 155, 78, 203, 8, 152, 86, 193, 142, 134, 67, 74, 60, 177, 172, 180, 189, 224, 165, 19, 31, 131, 116, 171, 186, 147, 159, 142, 68, 230, 105, 90, 159, 119, 72, 226, 188, 29, 22, 189, 248, 95, 117, 24, 73, 71, 7, 73, 1, 166, 244, 188, 93, 0, 105, 13, 152, 216, 40, 228, 5, 239, 2, 1, 125, 93, 53, 64, 58, 3, 134, 236, 120, 98, 25, 164, 7, 161, 107, 85, 126, 21, 156, 174, 176, 44, 122, 6, 236, 88, 116, 6, 228, 0, 160, 164, 27, 88, 107, 96, 125, 221, 54, 65, 30, 7, 130, 134, 105, 25, 32, 199, 171, 108, 8, 46, 9, 54, 179, 69, 189, 54, 167, 216, 208, 151, 180, 150, 22, 133, 14, 244, 17, 102, 142, 5, 34, 40, 104, 20, 201, 144, 165, 192, 48, 25, 44, 20, 28, 162, 132, 9, 53, 241, 247, 86, 252, 17, 138, 104, 100, 201, 160, 163, 48, 75, 14, 19, 181, 226, 71, 252, 1, 191, 178, 117, 82, 99, 163, 213, 78, 190, 16, 180, 62, 187, 238, 123, 63, 180, 109, 195, 119, 217, 117, 191, 142, 92, 247, 251, 24, 60, 79, 112, 105, 213, 253, 185, 67, 152, 252, 0, 79, 185, 174, 5, 15, 192, 191, 9, 231, 87, 117, 77, 219, 129, 139, 45, 232, 121, 204, 171, 182, 90, 145, 60, 128, 156, 74, 193, 219, 41, 116, 36, 160, 235, 6, 188, 43, 213, 220, 106, 247, 156, 220, 67, 172, 4, 243, 215, 176, 183, 15, 3, 105, 240, 175, 54, 217, 187, 189, 49, 183, 63, 223, 212, 242, 251, 1, 105, 59, 114, 163, 251, 105, 200, 184, 0, 0, 0, 9, 112, 72, 89, 115, 0, 0, 46, 35, 0, 0, 46, 35, 1, 120, 165, 63, 118, 0, 0, 0, 25, 116, 69, 88, 116, 67, 111, 109, 109, 101, 110, 116, 0, 67, 114, 101, 97, 116, 101, 100, 32, 119, 105, 116, 104, 32, 71, 73, 77, 80, 87, 129, 14, 23, 0, 0, 0, 180, 101, 88, 73, 102, 73, 73, 42, 0, 8, 0, 0, 0, 6, 0, 18, 1, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, 26, 1, 5, 0, 1, 0, 0, 0, 86, 0, 0, 0, 27, 1, 5, 0, 1, 0, 0, 0, 94, 0, 0, 0, 40, 1, 3, 0, 1, 0, 0, 0, 2, 0, 0, 0, 19, 2, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, 105, 135, 4, 0, 1, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 223, 147, 4, 0, 232, 3, 0, 0, 223, 147, 4, 0, 232, 3, 0, 0, 6, 0, 0, 144, 7, 0, 4, 0, 0, 0, 48, 50, 49, 48, 1, 145, 7, 0, 4, 0, 0, 0, 1, 2, 3, 0, 0, 160, 7, 0, 4, 0, 0, 0, 48, 49, 48, 48, 1, 160, 3, 0, 1, 0, 0, 0, 255, 255, 0, 0, 2, 160, 4, 0, 1, 0, 0, 0, 13, 0, 0, 0, 3, 160, 4, 0, 1, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 22, 180, 142, 115, 0, 0, 0, 120, 73, 68, 65, 84, 120, 156, 99, 208, 8, 235, 252, 175, 219, 169, 241, 191, 63, 48, 144, 104, 204, 0, 34, 116, 59, 53, 254, 119, 230, 106, 252, 239, 208, 232, 252, 175, 209, 25, 7, 198, 134, 237, 177, 96, 26, 167, 166, 126, 52, 188, 123, 149, 19, 97, 155, 250, 105, 161, 73, 3, 205, 153, 12, 216, 36, 118, 173, 116, 6, 99, 162, 52, 237, 94, 229, 132, 21, 19, 101, 83, 63, 26, 38, 73, 147, 46, 52, 254, 64, 81, 129, 85, 19, 40, 94, 64, 113, 5, 138, 108, 100, 77, 32, 62, 72, 28, 111, 232, 17, 147, 58, 168, 163, 9, 221, 253, 216, 52, 1, 0, 254, 80, 114, 145, 123, 101, 78, 216, 0, 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130>>)
     output: 

  11) image_test.rotate270_test
     Values were not equal
     expected: Ok(<<137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 13, 0, 0, 0, 13, 8, 6, 0, 0, 0, 114, 235, 228, 124, 0, 0, 1, 125, 105, 67, 67, 80, 105, 99, 99, 0, 0, 120, 156, 125, 145, 61, 72, 195, 64, 28, 197, 95, 83, 165, 82, 170, 14, 86, 16, 113, 200, 80, 5, 193, 130, 168, 136, 163, 86, 161, 8, 21, 66, 173, 208, 170, 131, 201, 165, 95, 208, 164, 33, 105, 113, 113, 20, 92, 11, 14, 126, 44, 86, 29, 92, 156, 117, 117, 112, 21, 4, 193, 15, 16, 103, 7, 39, 69, 23, 41, 241, 127, 73, 161, 69, 140, 7, 199, 253, 120, 119, 239, 113, 247, 14, 16, 234, 37, 166, 89, 29, 227, 128, 166, 87, 204, 100, 60, 38, 166, 51, 171, 98, 224, 21, 65, 244, 32, 132, 81, 244, 203, 204, 50, 230, 36, 41, 1, 207, 241, 117, 15, 31, 95, 239, 162, 60, 203, 251, 220, 159, 163, 91, 205, 90, 12, 240, 137, 196, 179, 204, 48, 43, 196, 27, 196, 211, 155, 21, 131, 243, 62, 113, 152, 21, 100, 149, 248, 156, 120, 204, 164, 11, 18, 63, 114, 93, 113, 249, 141, 115, 222, 97, 129, 103, 134, 205, 84, 114, 158, 56, 76, 44, 230, 219, 88, 105, 99, 86, 48, 53, 226, 41, 226, 136, 170, 233, 148, 47, 164, 93, 86, 57, 111, 113, 214, 74, 85, 214, 188, 39, 127, 97, 40, 171, 175, 44, 115, 157, 230, 16, 226, 88, 196, 18, 36, 136, 80, 80, 69, 17, 37, 84, 16, 165, 85, 39, 197, 66, 146, 246, 99, 30, 254, 65, 199, 47, 145, 75, 33, 87, 17, 140, 28, 11, 40, 67, 131, 236, 248, 193, 255, 224, 119, 183, 86, 110, 114, 194, 77, 10, 197, 128, 206, 23, 219, 254, 24, 6, 2, 187, 64, 163, 102, 219, 223, 199, 182, 221, 56, 1, 252, 207, 192, 149, 222, 242, 151, 235, 192, 204, 39, 233, 181, 150, 22, 57, 2, 122, 183, 129, 139, 235, 150, 166, 236, 1, 151, 59, 192, 192, 147, 33, 155, 178, 35, 249, 105, 10, 185, 28, 240, 126, 70, 223, 148, 1, 250, 110, 129, 224, 154, 219, 91, 115, 31, 167, 15, 64, 138, 186, 74, 220, 0, 7, 135, 192, 72, 158, 178, 215, 61, 222, 221, 213, 222, 219, 191, 103, 154, 253, 253, 0, 105, 59, 114, 163, 137, 199, 135, 227, 0, 0, 0, 9, 112, 72, 89, 115, 0, 0, 46, 35, 0, 0, 46, 35, 1, 120, 165, 63, 118, 0, 0, 0, 25, 116, 69, 88, 116, 67, 111, 109, 109, 101, 110, 116, 0, 67, 114, 101, 97, 116, 101, 100, 32, 119, 105, 116, 104, 32, 71, 73, 77, 80, 87, 129, 14, 23, 0, 0, 0, 180, 101, 88, 73, 102, 73, 73, 42, 0, 8, 0, 0, 0, 6, 0, 18, 1, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, 26, 1, 5, 0, 1, 0, 0, 0, 86, 0, 0, 0, 27, 1, 5, 0, 1, 0, 0, 0, 94, 0, 0, 0, 40, 1, 3, 0, 1, 0, 0, 0, 2, 0, 0, 0, 19, 2, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, 105, 135, 4, 0, 1, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 223, 147, 4, 0, 232, 3, 0, 0, 223, 147, 4, 0, 232, 3, 0, 0, 6, 0, 0, 144, 7, 0, 4, 0, 0, 0, 48, 50, 49, 48, 1, 145, 7, 0, 4, 0, 0, 0, 1, 2, 3, 0, 0, 160, 7, 0, 4, 0, 0, 0, 48, 49, 48, 48, 1, 160, 3, 0, 1, 0, 0, 0, 255, 255, 0, 0, 2, 160, 4, 0, 1, 0, 0, 0, 13, 0, 0, 0, 3, 160, 4, 0, 1, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 22, 180, 142, 115, 0, 0, 0, 111, 73, 68, 65, 84, 120, 156, 99, 232, 15, 12, 252, 79, 10, 214, 8, 235, 252, 207, 64, 138, 6, 221, 78, 13, 48, 70, 209, 100, 216, 30, 251, 95, 163, 51, 14, 5, 35, 203, 119, 230, 106, 128, 105, 6, 108, 130, 32, 188, 123, 149, 19, 134, 77, 29, 26, 157, 16, 77, 32, 6, 204, 90, 144, 123, 241, 105, 130, 217, 140, 211, 79, 32, 77, 187, 86, 58, 131, 105, 24, 38, 90, 19, 186, 159, 49, 52, 193, 156, 73, 146, 243, 8, 249, 9, 134, 49, 66, 15, 20, 48, 248, 130, 29, 175, 159, 240, 97, 250, 105, 2, 0, 140, 116, 114, 145, 36, 120, 214, 87, 0, 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130>>)
          got: Ok(<<137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 13, 0, 0, 0, 13, 8, 6, 0, 0, 0, 114, 235, 228, 124, 0, 0, 1, 118, 105, 67, 67, 80, 105, 99, 99, 0, 0, 120, 156, 149, 145, 61, 72, 66, 81, 24, 134, 159, 123, 45, 10, 177, 28, 50, 136, 104, 184, 131, 5, 65, 65, 84, 68, 99, 89, 32, 65, 129, 152, 129, 86, 67, 247, 71, 77, 240, 94, 229, 94, 165, 197, 49, 104, 21, 26, 250, 89, 250, 27, 90, 154, 107, 109, 104, 13, 130, 160, 31, 136, 230, 134, 166, 162, 150, 136, 27, 71, 5, 37, 48, 232, 91, 206, 195, 123, 206, 251, 241, 125, 239, 1, 249, 48, 171, 155, 78, 203, 8, 152, 86, 193, 142, 134, 67, 74, 60, 177, 172, 180, 189, 224, 165, 19, 31, 131, 116, 171, 186, 147, 159, 142, 68, 230, 105, 90, 159, 119, 72, 226, 188, 29, 22, 189, 248, 95, 117, 24, 73, 71, 7, 73, 1, 166, 244, 188, 93, 0, 105, 13, 152, 216, 40, 228, 5, 239, 2, 1, 125, 93, 53, 64, 58, 3, 134, 236, 120, 98, 25, 164, 7, 161, 107, 85, 126, 21, 156, 174, 176, 44, 122, 6, 236, 88, 116, 6, 228, 0, 160, 164, 27, 88, 107, 96, 125, 221, 54, 65, 30, 7, 130, 134, 105, 25, 32, 199, 171, 108, 8, 46, 9, 54, 179, 69, 189, 54, 167, 216, 208, 151, 180, 150, 22, 133, 14, 244, 17, 102, 142, 5, 34, 40, 104, 20, 201, 144, 165, 192, 48, 25, 44, 20, 28, 162, 132, 9, 53, 241, 247, 86, 252, 17, 138, 104, 100, 201, 160, 163, 48, 75, 14, 19, 181, 226, 71, 252, 1, 191, 178, 117, 82, 99, 163, 213, 78, 190, 16, 180, 62, 187, 238, 123, 63, 180, 109, 195, 119, 217, 117, 191, 142, 92, 247, 251, 24, 60, 79, 112, 105, 213, 253, 185, 67, 152, 252, 0, 79, 185, 174, 5, 15, 192, 191, 9, 231, 87, 117, 77, 219, 129, 139, 45, 232, 121, 204, 171, 182, 90, 145, 60, 128, 156, 74, 193, 219, 41, 116, 36, 160, 235, 6, 188, 43, 213, 220, 106, 247, 156, 220, 67, 172, 4, 243, 215, 176, 183, 15, 3, 105, 240, 175, 54, 217, 187, 189, 49, 183, 63, 223, 212, 242, 251, 1, 105, 59, 114, 163, 251, 105, 200, 184, 0, 0, 0, 9, 112, 72, 89, 115, 0, 0, 46, 35, 0, 0, 46, 35, 1, 120, 165, 63, 118, 0, 0, 0, 25, 116, 69, 88, 116, 67, 111, 109, 109, 101, 110, 116, 0, 67, 114, 101, 97, 116, 101, 100, 32, 119, 105, 116, 104, 32, 71, 73, 77, 80, 87, 129, 14, 23, 0, 0, 0, 180, 101, 88, 73, 102, 73, 73, 42, 0, 8, 0, 0, 0, 6, 0, 18, 1, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, 26, 1, 5, 0, 1, 0, 0, 0, 86, 0, 0, 0, 27, 1, 5, 0, 1, 0, 0, 0, 94, 0, 0, 0, 40, 1, 3, 0, 1, 0, 0, 0, 2, 0, 0, 0, 19, 2, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, 105, 135, 4, 0, 1, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 223, 147, 4, 0, 232, 3, 0, 0, 223, 147, 4, 0, 232, 3, 0, 0, 6, 0, 0, 144, 7, 0, 4, 0, 0, 0, 48, 50, 49, 48, 1, 145, 7, 0, 4, 0, 0, 0, 1, 2, 3, 0, 0, 160, 7, 0, 4, 0, 0, 0, 48, 49, 48, 48, 1, 160, 3, 0, 1, 0, 0, 0, 255, 255, 0, 0, 2, 160, 4, 0, 1, 0, 0, 0, 13, 0, 0, 0, 3, 160, 4, 0, 1, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 22, 180, 142, 115, 0, 0, 0, 120, 73, 68, 65, 84, 120, 156, 99, 232, 15, 12, 252, 79, 10, 214, 8, 235, 252, 207, 64, 138, 6, 221, 78, 13, 48, 70, 209, 100, 216, 30, 251, 95, 163, 51, 14, 5, 35, 203, 119, 230, 106, 128, 105, 6, 108, 130, 253, 129, 129, 255, 119, 175, 114, 194, 176, 169, 67, 163, 19, 162, 9, 196, 208, 133, 90, 11, 114, 47, 62, 77, 48, 155, 113, 250, 105, 247, 42, 167, 255, 187, 86, 58, 131, 105, 24, 38, 90, 83, 63, 154, 159, 49, 52, 233, 66, 157, 73, 146, 243, 52, 8, 248, 9, 134, 49, 66, 15, 20, 48, 248, 130, 29, 175, 159, 240, 97, 250, 105, 2, 0, 140, 116, 114, 145, 253, 19, 70, 97, 0, 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130>>)
     output: 

Finished in 0.330 seconds
67 tests, 11 failures

Might also be some difference with the libvips version / OS or something like that.
I'm running this on macOS 15.5

@jrstrunk

Copy link
Copy Markdown
Contributor

Yes, the string args are bypassing vix and going straight to vips. I can't remember the exact reason why I did it that way now, but I believe it was because I was either more comfortable with the vips API, or needed an arg that was not available to vix. Although this package sits on top of vix, I am inclined to support more of the vips API over the vix API, because vips is the real thing we are using.

Using keyword args, would there be a better way of doing it in Gleam other than the Custom constructor taking an argument of List(#(String, String))? We could enumerate all vips options and strongly type them, but that would add a large maintenance burden and we still couldn't guarantee that the host system's vips package was compiled with the right encoders / decoders.

@jrstrunk

jrstrunk commented Jul 16, 2025

Copy link
Copy Markdown
Contributor

I am running on Ubuntu 24.04, but I will try to upgrade my Elixir and see if I get the failing tests too. Thanks for the help triaging!

@JonasGruenwald

Copy link
Copy Markdown
Contributor Author

I see, thanks for explaining, that sounds very reasonable to me, best to go direct to vips.

Using keyword args, would there be a better way of doing it in Gleam other than the Custom constructor taking an argument of List(#(String, String))?

I actually kind of think it would be a decent option to drop the ImageFormat type altogether and just make the write / to_bitarray functions take a single string parameter. That would also solve my problem that this PR addresses, since the user supplies the final path in that case.

I looked at some other bindings and the python ones have it like that (though they do also allow a keyword list)

https://libvips.github.io/pyvips/vimage.html?highlight=write_to_file#pyvips.Image.write_to_file

@jrstrunk

Copy link
Copy Markdown
Contributor

True! I will think about removing the ImageFormat type. In the meantime, what about also detecting when the user-supplied path ends in the image format extension, and then not adding it? Like if the user passes "output.png", then "output.png" will be written, not "output.png.png".

@JonasGruenwald

JonasGruenwald commented Jul 16, 2025

Copy link
Copy Markdown
Contributor Author

Hmm not a fan of implicitly changing the behaviour like that tbh, I'd say either document the current behaviour (I added that in this PR too btw) or accept the full path only.

https://github.com/tinybackup/ansel/pull/4/files#diff-052d60b54ac76a2822be4bb9bfa8f2efdf31029fa3b330ad5a4d41d5d38c24a9R498-R499

@jrstrunk

Copy link
Copy Markdown
Contributor

Okay, sounds good! I like the changes in this PR. Could you address the one comment I left in the code? Then we can merge it.

@JonasGruenwald

Copy link
Copy Markdown
Contributor Author

Hm, I don't see any comment, you may have forgotten to submit the review if you left a comment in review mode?

Comment thread src/ansel/image.gleam Outdated
@jrstrunk

Copy link
Copy Markdown
Contributor

Oh hahaha I did, thanks!

@jrstrunk

Copy link
Copy Markdown
Contributor

Looks fantastic, thank you for the contribution! I will let this change sit a little bit, and push a v2 if no other change comes up in that period. Cheers!

@jrstrunk jrstrunk merged commit be34f7a into tinybackup:main Jul 16, 2025
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Filename paths / extensions

2 participants