Packages
image
0.59.3
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/kino.ex
defmodule Image.Kino do
@moduledoc """
Helper functions to simplify rendering images in Kino.
"""
# Since Kino is not a required dependency we
# avoid compiler warnings by using `apply/3`
alias Vix.Vips.Operation
alias Vix.Vips.Image, as: Vimage
@default_max_height 200
@doc """
Renders an image in [Kino](https://hex.pm/packages/kino),
### Arguments
* `image` is any `t:Vix.Vips.Image.t/0`.
* `options` is a keyword list of options.
### Options
* `:max_height` determines the maximum height for the
rendered image. The aspect ratio of the rendered
image is unchanged. The default is `#{inspect(@default_max_height)}`.
### Returns
* `maybe_resized_image` of type `t:Kino.Image.t/0`.
"""
@doc since: "0.18.0"
@spec show(image :: Vimage.t(), options :: Keyword.t()) :: Vimage.t()
def show(%Vimage{} = image, opts \\ []) do
image = maybe_resize_image(image, opts)
{:ok, image_bin} = Vimage.write_to_buffer(image, ".png")
apply(Kino.Image, :new, [image_bin, "image/png"])
end
# scale down if image height is larger than max_height
defp maybe_resize_image(image, opts) do
height = Image.height(image)
max_height = Keyword.get(opts, :max_height, @default_max_height)
if height > max_height do
Operation.resize!(image, max_height / height)
else
image
end
end
end