Packages
image
0.42.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/exif/data/thumbnail.ex
defmodule Image.Exif.Thumbnail do
@moduledoc false
# Internal representation of Thumbnail tag in the EXIF.
@type t :: %__MODULE__{
thumbnail_offset: non_neg_integer(),
thumbnail_size: non_neg_integer()
}
@fields [
:thumbnail_offset,
:thumbnail_size
]
@spec fields :: [:thumbnail_offset | :thumbnail_size]
@doc false
def fields, do: @fields
defstruct @fields
@spec to_image(binary(), t()) :: :ok | {:error, :bad_thumbnail_data | :file.posix()}
@doc "Converts the thumbnail to image and writes it to the file"
def to_image(_, %__MODULE__{thumbnail_offset: offset, thumbnail_size: size})
when is_nil(offset) or is_nil(size),
do: {:error, :bad_thumbnail_data}
def to_image(file, %__MODULE__{thumbnail_offset: offset, thumbnail_size: size})
when is_binary(file) do
[name, dot, ext] = String.split(file, ~r/(?=.{3,4}\z)/)
with {:ok, src} <-
File.open(file, [:read], fn f ->
IO.binread(f, offset)
IO.binread(f, size)
end),
{:ok, _dst} <- File.open("#{name}-thumb#{dot}#{ext}", [:write], &IO.binwrite(&1, src)),
do: :ok
end
defimpl String.Chars, for: Image.Exif.Thumbnail do
@spec to_string(data :: Image.Exif.Thumbnail.t()) :: <<_::64, _::_*8>>
def to_string(data), do: "Image Thumbnail of size #{data.thumbnail_size}"
end
end