summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Felder <feld@feld.me>2021-02-12 17:48:26 -0600
committerMark Felder <feld@feld.me>2021-02-12 17:48:26 -0600
commite531a0dd575b9e558071e624db753e38f4491c48 (patch)
treef49ccecb42775b154fdfbdb6fe3d3170a19640ea
parentf2c5c763c35f8970e58eb65c1b631e865c092556 (diff)
Add filter for HEIF (.heic) files to convert them to JPEGs
-rw-r--r--lib/pleroma/upload/filter/heif.ex41
1 files changed, 41 insertions, 0 deletions
diff --git a/lib/pleroma/upload/filter/heif.ex b/lib/pleroma/upload/filter/heif.ex
new file mode 100644
index 000000000..167c12595
--- /dev/null
+++ b/lib/pleroma/upload/filter/heif.ex
@@ -0,0 +1,41 @@
+# Pleroma: A lightweight social networking server
+# Copyright © 2017-2021 Pleroma Authors <https://pleroma.social/>
+# SPDX-License-Identifier: AGPL-3.0-only
+
+defmodule Pleroma.Upload.Filter.Heif do
+ @behaviour Pleroma.Upload.Filter
+ alias Pleroma.Upload
+
+ require Logger
+
+ @type conversion :: action :: String.t() | {action :: String.t(), opts :: String.t()}
+ @type conversions :: conversion() | [conversion()]
+
+ @spec filter(Pleroma.Upload.t()) :: {:ok, :atom} | {:error, String.t()}
+ def filter(
+ %Pleroma.Upload{name: name, path: path, tempfile: tempfile, content_type: "image/heic"} =
+ upload
+ ) do
+ try do
+ name = name |> String.replace_suffix(".heic", ".jpg")
+ path = path |> String.replace_suffix(".heic", ".jpg")
+ convert(tempfile)
+
+ {:ok, :filtered, %Upload{upload | name: name, path: path, content_type: "image/jpeg"}}
+ rescue
+ e in ErlangError ->
+ {:error, "mogrify command not found: #{inspect(e)}"}
+ end
+ end
+
+ def filter(_), do: {:ok, :noop}
+
+ def convert(tempfile) do
+ tempfile
+ |> Mogrify.open()
+ |> Mogrify.format("jpeg")
+ |> Mogrify.save(in_place: true)
+ |> Mogrify.verbose()
+ |> IO.inspect
+ end
+end