Packages
image
0.14.1
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/interpretation.ex
defmodule Image.Interpretation do
@moduledoc """
Defines the known color interpretations to which
an image can be converted to and from.
"""
@interpretation_map %{
multiband: :VIPS_INTERPRETATION_MULTIBAND,
bw: :VIPS_INTERPRETATION_B_W,
histogram: :VIPS_INTERPRETATION_HISTOGRAM,
xyz: :VIPS_INTERPRETATION_XYZ,
lab: :VIPS_INTERPRETATION_LAB,
cmyk: :VIPS_INTERPRETATION_CMYK,
labq: :VIPS_INTERPRETATION_LABQ,
rbg: :VIPS_INTERPRETATION_RGB,
cmc: :VIPS_INTERPRETATION_CMC,
lch: :VIPS_INTERPRETATION_LCH,
labs: :VIPS_INTERPRETATION_LABS,
srgb: :VIPS_INTERPRETATION_sRGB,
yxy: :VIPS_INTERPRETATION_YXY,
fourier: :VIPS_INTERPRETATION_FOURIER,
rgb16: :VIPS_INTERPRETATION_RGB16,
grey16: :VIPS_INTERPRETATION_GREY16,
matrix: :VIPS_INTERPRETATION_MATRIX,
scrgb: :VIPS_INTERPRETATION_scRGB,
hsv: :VIPS_INTERPRETATION_HSV
}
@reverse_interpretation Enum.map(@interpretation_map, fn {k, v} -> {v, k} end)
|> Map.new()
@interpretation Map.keys(@interpretation_map)
@vips_interpretation Map.values(@interpretation_map)
@reverse_interpretation Enum.map(@interpretation_map, fn {k, v} -> {v, k} end)
|> Map.new()
@typedoc """
Defines the known colorspace interpretations.
"""
@type t :: unquote(Enum.reduce(@interpretation, &{:|, [], [&1, &2]}))
@doc """
Returns the known colorspace interpretations
"""
def known_interpretations do
@interpretation
end
@doc """
Normalizes and validates a color interpretation.
### Arguments
* `interpretation` is any atom or string value
in `Image.Interpretation.known_interpretations/0`.
### Returns
* `{:error, normalized_interpretation}` or
* `{:error, reason}`
### Examples
iex> Image.Interpretation.validate_interpretation(:bw)
{:ok, :VIPS_INTERPRETATION_B_W}
iex> Image.Interpretation.validate_interpretation(:VIPS_INTERPRETATION_sRGB)
{:ok, :VIPS_INTERPRETATION_sRGB}
iex> Image.Interpretation.validate_interpretation(:unknown)
{:error, "Unknown interpretation. Found :unknown"}
"""
def validate_interpretation(interpretation) when interpretation in @vips_interpretation do
{:ok, interpretation}
end
def validate_interpretation(interpretation) when is_atom(interpretation) do
case Map.fetch(@interpretation_map, interpretation) do
{:ok, interpretation} -> {:ok, interpretation}
:error -> {:error, unknown_interpretation_error(interpretation)}
end
end
def validate_interpretation(interpretation) when is_binary(interpretation) do
interpretation
|> String.downcase()
|> String.to_existing_atom()
|> validate_interpretation()
rescue ArgumentError ->
{:error, unknown_interpretation_error(interpretation)}
end
@doc false
def decode_interpretation(interpretation) do
Map.fetch!(@reverse_interpretation, interpretation)
end
defp unknown_interpretation_error(interpretation) do
"Unknown interpretation. Found #{inspect(interpretation)}"
end
end