Packages
vix
0.12.0
0.40.0
0.39.0
0.38.0
0.37.0
0.36.0
0.35.0
0.34.0
0.33.1
0.33.0
0.32.0
0.31.1
0.31.0
0.30.0
0.29.0
0.28.0
0.27.0
0.26.0
0.25.0
0.24.0
0.23.1
0.22.0
0.21.0
0.20.0
0.19.0
0.18.0
0.17.0
0.16.4
0.16.3
0.16.2
0.16.1
0.16.0
0.15.1
0.15.0
0.14.0
0.13.0
0.12.0
0.11.0
0.10.1
0.10.0
0.9.0
0.8.0
0.7.0
0.6.1
0.6.0
0.5.0
0.4.0
0.3.0
0.2.1
0.2.0
retired
0.1.0
NIF based bindings for libvips
Current section
Files
Jump to
Current section
Files
lib/vix/tensor.ex
defmodule Vix.Tensor do
alias Vix.Vips.Image
@moduledoc """
Struct to hold raw pixel data returned by the Libvips along with metadata about the binary.
Useful for interoperability between different libraries. See `Vix.Vips.Image.write_to_tensor/1`
"""
@type t() :: %__MODULE__{}
defstruct data: nil,
shape: {0, 0, 0},
names: [:width, :height, :bands],
type: {}
def binary_to_tensor(binary, size, %Image{} = image)
when is_binary(binary) and is_integer(size) do
struct(__MODULE__,
data: binary,
shape: {Image.width(image), Image.height(image), Image.bands(image)},
names: [:width, :height, :bands],
type: nx_type(image)
)
end
# should we support :VIPS_FORMAT_COMPLEX and :VIPS_FORMAT_DPCOMPLEX ?
defp nx_type(image) do
case Image.format(image) do
:VIPS_FORMAT_UCHAR ->
{:u, 8}
:VIPS_FORMAT_CHAR ->
{:s, 8}
:VIPS_FORMAT_USHORT ->
{:u, 16}
:VIPS_FORMAT_SHORT ->
{:s, 16}
:VIPS_FORMAT_UINT ->
{:u, 32}
:VIPS_FORMAT_INT ->
{:s, 32}
:VIPS_FORMAT_FLOAT ->
{:f, 32}
:VIPS_FORMAT_DOUBLE ->
{:f, 64}
other ->
raise ArgumentError, "Cannot convert this image type to binary. Found #{inspect(other)}"
end
end
end