Packages
image
0.66.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/blurhash.ex
defmodule Image.Options.Blurhash do
@moduledoc """
Options and option validation for `Image.Blurhash.encode/2`.
"""
@typedoc """
Options applicable to `Image.Blurhash.encode/2`
"""
@type blurhash_option ::
{:x_components, pos_integer()}
| {:y_components, pos_integer()}
@typedoc """
Options list for Image.Blurhash.encode/2
"""
@type blurhash_options :: [blurhash_option()] | map()
@default_x_components 4
@default_y_components 3
@doc """
Validate the options for `Image.Blurhash.encode/2`.
See `t:Image.Options.Blurhash.blurhash_options/0`.
"""
def validate_options(image, options) when is_list(options) do
options = Keyword.merge(default_options(), options)
with :ok <- validate_image_bands(Image.bands(image)) do
case Enum.reduce_while(options, options, &validate_option(&1, &2)) do
{:error, message} ->
{:error, message}
options ->
{:ok, Map.new(options)}
end
end
end
defp validate_image_bands(3), do: :ok
defp validate_image_bands(n),
do:
{:error,
%Image.Error{
message: "Image must have 3 bands. Found #{inspect(n)} bands in the image",
reason: "Image must have 3 bands. Found #{inspect(n)} bands in the image"
}}
defp validate_option({:x_components, x_components}, options) when x_components in 1..9 do
{:cont, options}
end
defp validate_option({:y_components, y_components}, options) when y_components in 1..9 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
defp default_options do
[
x_components: @default_x_components,
y_components: @default_y_components
]
end
end