Packages
image
0.71.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/sharpen.ex
defmodule Image.Options.Sharpen do
@moduledoc """
Options and option validation for `Image.sharpen/2`.
"""
@typedoc """
Valid options for `Image.sharpen/2`.
"""
@type sharpen_option ::
{:jagged_amount, float()}
| {:flat_amount, float()}
| {:max_darkening, float()}
| {:max_brightening, float()}
| {:threshold, float()}
| {:sigma, float()}
@typedoc """
Options applicable to Image.sharpen/2
"""
@type sharpen_options :: [sharpen_option()] | map()
@doc """
Validate the options for `Image.sharpen/2`.
See `t:Image.Options.Sharpen.sharpen_options/0`.
"""
def validate_options(options) when is_list(options) do
options = Keyword.merge(default_options(), options)
case Enum.reduce_while(options, options, &validate_option(&1, &2)) do
{:error, value} ->
{:error, value}
options ->
{:ok, Map.new(options)}
end
end
def validate_options(%{} = options) do
{:ok, options}
end
defp validate_option({:sigma, sigma}, options)
when is_number(sigma) and sigma > 0 and sigma <= 10 do
{:cont, options}
end
defp validate_option({:jagged_amount, jagged_amount}, options)
when is_number(jagged_amount) and jagged_amount >= 0 do
{:cont, options}
end
defp validate_option({:flat_amount, flat_amount}, options)
when is_number(flat_amount) and flat_amount >= 0 do
{:cont, options}
end
defp validate_option({:threshold, threshold}, options)
when is_number(threshold) and threshold >= 0 do
{:cont, options}
end
defp validate_option({:max_brightening, max_brightening}, options)
when is_number(max_brightening) and max_brightening >= 0 do
{:cont, options}
end
defp validate_option({:max_darkening, max_darkening}, options)
when is_number(max_darkening) and max_darkening >= 0 do
{:cont, options}
end
defp validate_option(option, _options) do
{:halt, {:error, invalid_option(option)}}
end
defp invalid_option(option) do
%Image.Error{
reason: :invalid_option,
value: option,
message: "Invalid option or option value: #{inspect(option)}"
}
end
# These defaults are appropriate for screen sharpening
defp default_options do
[
jagged_amount: 3.0,
flat_amount: 0.0,
max_darkening: 20.0,
max_brightening: 10.0,
threshold: 2.0,
sigma: 1.0
]
end
end