Packages
image
0.15.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/enum/kernel.ex
defmodule Image.Kernel do
@moduledoc """
Defines the known resampling kernels to which
an image can be converted to and from.
"""
@kernel_map %{
nearest: :VIPS_KERNEL_NEAREST,
linear: :VIPS_KERNEL_LINEAR,
cubic: :VIPS_KERNEL_CUBIC,
mitchell: :VIPS_KERNEL_MITCHELL,
lanczos2: :VIPS_KERNEL_LANCZOS2,
lanczos3: :VIPS_KERNEL_LANCZOS3
}
@kernel Map.keys(@kernel_map)
@vips_kernel Map.values(@kernel_map)
@reverse_kernel Enum.map(@kernel_map, fn {k, v} -> {v, k} end)
|> Map.new()
@typedoc """
Defines the known kernel resampling methods.
"""
@type t :: unquote(Enum.reduce(@kernel, &{:|, [], [&1, &2]}))
@doc """
Returns the known colorspace interpretations
"""
def known_kernel do
@kernel
end
@doc """
Normalizes and validates a resampling kernel.
### Arguments
* `kernel` is any atom or string value
in `Image.Kernel.known_kernel/0`.
### Returns
* `{:error, normalized_kernel}` or
* `{:error, reason}`
### Examples
iex> Image.Kernel.validate_kernel(:linear)
{:ok, :VIPS_KERNEL_LINEAR}
iex> Image.Kernel.validate_kernel(:VIPS_KERNEL_CUBIC)
{:ok, :VIPS_KERNEL_CUBIC}
iex> Image.Kernel.validate_kernel(:unknown)
{:error, "Unknown kernel. Found :unknown"}
"""
def validate_kernel(kernel) when kernel in @vips_kernel do
{:ok, kernel}
end
def validate_kernel(kernel) when is_atom(kernel) do
case Map.fetch(@kernel_map, kernel) do
{:ok, kernel} -> {:ok, kernel}
:error -> {:error, unknown_kernel_error(kernel)}
end
end
def validate_kernel(kernel) when is_binary(kernel) do
kernel
|> String.downcase()
|> String.to_existing_atom()
|> validate_kernel()
rescue ArgumentError ->
{:error, unknown_kernel_error(kernel)}
end
@doc false
def validate_kernel(kernel, options) when kernel in @kernel do
kernel =
Map.fetch!(@kernel_map, kernel)
options =
options
|> Keyword.delete(:interpolate)
|> Keyword.put(:kernel, kernel)
{:cont, options}
end
def validate_kernel(kernel, options) when kernel in @vips_kernel do
{:cont, Keyword.put(options, :kernel, kernel)}
end
def validate_kernel(kernel, _options) do
{:halt, {:error, unknown_kernel_error(kernel)}}
end
@doc false
def decode_kernel(kernel) do
Map.fetch!(@reverse_kernel, kernel)
end
defp unknown_kernel_error(kernel) do
"Unknown kernel. Found #{inspect(kernel)}"
end
end