Packages
image
0.18.0
0.72.0
0.71.0
0.70.0
0.69.0
0.68.0
0.67.0
0.67.0-dev
retired
0.66.0
0.65.0
0.64.0
0.63.0
0.62.1
0.62.0
0.61.1
0.61.0
0.60.0
0.59.3
0.59.2
0.59.1
0.59.0
0.58.0
0.57.0
0.56.1
0.56.0
0.55.2
0.55.1
retired
0.55.0
0.54.4
0.54.3
0.54.2
0.54.1
0.54.0
0.53.0
0.52.3
0.52.2
0.52.1
0.52.0
retired
0.51.0
0.50.0
0.49.0
0.48.1
0.48.0
0.47.0
0.46.0
0.45.0
0.44.0
0.43.2
0.43.1
0.43.0
0.42.0
0.41.0
0.40.0
0.39.3
0.39.2
0.39.1
0.39.0
0.38.4
0.38.3
0.38.2
0.38.1
0.38.0
0.37.0
0.36.2
0.36.1
0.36.0
0.35.0
0.34.0
0.33.0
0.32.0
0.31.1
0.31.0
0.30.0
0.29.0
0.28.2
0.28.1
0.28.0
0.27.0
0.26.0
0.25.1
0.25.0
0.24.1
0.24.0
0.23.2
0.23.1
0.23.0
0.22.1
0.22.0
0.21.0
0.20.0
retired
0.19.0
0.18.1
0.18.0
0.17.0
0.16.0
0.15.0
0.14.4
0.14.2
0.14.1
0.14.0
retired
0.13.1
0.13.0
0.12.0
0.11.0
0.10.0
0.10.0-rc.0
retired
0.9.0
retired
0.8.0
0.7.0
0.6.0
0.5.0
0.4.0
0.3.0
0.2.0
0.1.0
An approachable image processing library primarily based upon Vix and libvips that is NIF-based, fast, multi-threaded, pipelined and has a low memory footprint.
Current section
Files
Jump to
Current section
Files
lib/image/options/rotate.ex
defmodule Image.Options.Rotate do
@moduledoc """
Options and option validation for `Image.rotate/3`.
"""
@typedoc """
The options applicable to rotating an
image.
"""
@type rotation_options :: [
{:idy, float()}
| {:idx, float()}
| {:ody, float()}
| {:odx, float()}
| {:background, Image.pixel()}
]
@valid_options [:idy, :idx, :ody, :odx]
@doc false
defguard is_color(color) when is_number(color) and color >= 0
@doc """
Validate the options for `Image.rotate/3`.
See `t:Image.Options.Rotate.rotation_options/0`.
"""
def validate_options(options) do
case Enum.reduce_while(options, options, &validate_option(&1, &2)) do
{:error, value} ->
{:error, value}
options ->
{:ok, options}
end
end
defp validate_option({:background, background}, options) when is_color(background) do
options = Keyword.put(options, :background, List.wrap(background))
{:cont, options}
end
defp validate_option({:background, [r, g, b]}, options)
when is_color(r) and is_color(g) and is_color(b) do
{:cont, options}
end
defp validate_option({:background, [c]}, options) when is_color(c) do
{:cont, options}
end
defp validate_option({option, value}, options)
when option in @valid_options and is_number(value) do
{:cont, options}
end
defp validate_option(option, _options) do
{:halt, {:error, invalid_option(option)}}
end
defp invalid_option(option) do
"Invalid option or option value: #{inspect(option)}"
end
end