Current section
Files
Jump to
Current section
Files
lib/still/preprocessor/image.ex
defmodule Still.Preprocessor.Image do
@moduledoc """
Handles image transformation.
To configure it, set `:image_opts` in the metadata:
%{
image_opts: %{
sizes: [100, 200],
transformations: [color_filter: "grayscale_bt709"]
}
}
`:sizes` defines the widths of the output files to create.
`:transformations` defines the function name and arguments to call on the
adapter. By default, the adapter is `Still.Preprocessor.Image.Mogrify`.
However you can also include your own or make use of
`Still.Preprocessor.Image.Imageflow` by adding `:still_imageflow` as a
dependency and setting in your config:
config :still, :image_adapter, Still.Preprocessor.Image.Imageflow
The default quality value is 90. To change it, set the `:image_quality` key
in the config:
config :still, :image_quality, 80
For more information see [Mogrify](https://github.com/route/mogrify)'s
options or [ImageMagick's
docs](https://imagemagick.org/script/command-line-options.php) information.
When `:image_opts` is not set, it copies the input file to the output
file as it is.
"""
use Still.Preprocessor
import Still.Utils
@impl true
def render(%{run_type: :compile_metadata} = source_file), do: source_file
def render(%{metadata: %{image_opts: _opts}} = source_file) do
adapter().render(source_file)
end
def render(%{input_file: input_file, output_file: output_file} = source_file) do
output_file
|> Path.dirname()
|> mk_output_dir()
input_file
|> get_input_path()
|> File.cp!(get_output_path(output_file))
source_file
end
def adapter do
config(:image_adapter, __MODULE__.Mogrify)
end
end