Packages
image
0.29.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/band_format.ex
defmodule Image.BandFormat do
@moduledoc """
Functions to define and validate the band
formats of an image.
"""
alias Vix.Vips.Image, as: Vimage
@type t ::
{:u, 8}
| {:s, 8}
| {:u, 16}
| {:s, 16}
| {:u, 32}
| {:s, 32}
| {:u, 64}
| {:s, 64}
| {:f, 32}
| {:f, 64}
if Code.ensure_loaded?(Nx) do
def image_format_from_nx(%Nx.Tensor{} = tensor) do
tensor
|> Nx.type()
|> image_format_from_nx()
end
end
def image_format_from_nx(nx_type) do
case nx_type do
{:u, 8} ->
{:ok, :VIPS_FORMAT_UCHAR}
{:s, 8} ->
{:ok, :VIPS_FORMAT_CHAR}
{:u, 16} ->
{:ok, :VIPS_FORMAT_USHORT}
{:s, 16} ->
{:ok, :VIPS_FORMAT_SHORT}
{:u, 32} ->
{:ok, :VIPS_FORMAT_UINT}
{:s, 32} ->
{:ok, :VIPS_FORMAT_INT}
# 32 bits in libvips, long is not supported
{:u, 64} ->
{:ok, :VIPS_FORMAT_UINT}
# 32 bits in libvips, long is not supported
{:s, 64} ->
{:ok, :VIPS_FORMAT_INT}
{:f, 32} ->
{:ok, :VIPS_FORMAT_FLOAT}
{:f, 64} ->
{:ok, :VIPS_FORMAT_DOUBLE}
other ->
{:error, "Cannot convert this data type to an image. Found #{inspect(other)}"}
end
end
@dialyzer {:nowarn_function, {:nx_format, 1}}
def nx_format(%Vimage{} = image) do
nx_format(Vix.Vips.Image.format(image))
end
def nx_format(format) when is_atom(format) do
case format do
:VIPS_FORMAT_UCHAR ->
{:ok, {:u, 8}}
:VIPS_FORMAT_CHAR ->
{:ok, {:s, 8}}
:VIPS_FORMAT_USHORT ->
{:ok, {:u, 16}}
:VIPS_FORMAT_SHORT ->
{:ok, {:s, 16}}
:VIPS_FORMAT_UINT ->
{:ok, {:u, 32}}
:VIPS_FORMAT_INT ->
{:ok, {:s, 32}}
:VIPS_FORMAT_FLOAT ->
{:ok, {:f, 32}}
:VIPS_FORMAT_DOUBLE ->
{:ok, {:f, 64}}
other ->
{:error, "Cannot convert this image type to binary. Found #{inspect(other)}"}
end
end
end