defmodule Webp.Compressor do @behaviour Phoenix.Digester.Compressor require Logger def compress_file(file_path, content) do valid_extension = Path.extname(file_path) in Application.get_env(:webp, :image_extensions, [ ".png", ".jpg", ".jpeg" ]) case valid_extension do true -> compressed_content = convert(content, :webp, file_path) case compressed_content do {:ok, data} -> {:ok, data} _ -> :error end false -> :error end end def file_extensions do [".webp"] end defp convert(content, options, file_path) do cond do Code.ensure_loaded?(:eimp) and function_exported?(:eimp, :convert, 2) -> :eimp.convert(content, options) false -> location = Application.get_env(:webp, :destination) params = %{location: location} Webp.convert(file_path, params) :error end end end