aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/pleroma/upload.ex7
-rw-r--r--lib/pleroma/upload/filter/set_meta.ex9
-rw-r--r--lib/pleroma/web/activity_pub/transmogrifier.ex1
3 files changed, 15 insertions, 2 deletions
diff --git a/lib/pleroma/upload.ex b/lib/pleroma/upload.ex
index 4d58abd48..5570ed104 100644
--- a/lib/pleroma/upload.ex
+++ b/lib/pleroma/upload.ex
@@ -25,6 +25,7 @@ defmodule Pleroma.Upload do
path as the temporary file is also tracked by `Plug.Upload{}` and automatically deleted once the request is over.
* `:width` - width of the media in pixels
* `:height` - height of the media in pixels
+ * `:blurhash` - string hash of the image encoded with the blurhash algorithm (https://blurha.sh/)
Related behaviors:
@@ -58,9 +59,10 @@ defmodule Pleroma.Upload do
content_type: String.t(),
width: integer(),
height: integer(),
+ blurhash: String.t(),
path: String.t()
}
- defstruct [:id, :name, :tempfile, :content_type, :width, :height, :path]
+ defstruct [:id, :name, :tempfile, :content_type, :width, :height, :blurhash, :path]
defp get_description(opts, upload) do
case {opts[:description], Pleroma.Config.get([Pleroma.Upload, :default_description])} do
@@ -98,7 +100,8 @@ defmodule Pleroma.Upload do
|> Maps.put_if_present("height", upload.height)
],
"name" => description
- }}
+ }
+ |> Maps.put_if_present("blurhash", upload.blurhash)}
else
{:description_limit, _} ->
{:error, :description_too_long}
diff --git a/lib/pleroma/upload/filter/set_meta.ex b/lib/pleroma/upload/filter/set_meta.ex
index cccb6c371..81c48228a 100644
--- a/lib/pleroma/upload/filter/set_meta.ex
+++ b/lib/pleroma/upload/filter/set_meta.ex
@@ -23,6 +23,7 @@ defmodule Pleroma.Upload.Filter.SetMeta do
upload
|> Map.put(:width, image.width)
|> Map.put(:height, image.height)
+ |> Map.put(:blurhash, get_blurhash(file))
{:ok, :filtered, upload}
rescue
@@ -33,4 +34,12 @@ defmodule Pleroma.Upload.Filter.SetMeta do
end
def filter(_), do: {:ok, :noop}
+
+ defp get_blurhash(file) do
+ with {:ok, blurhash} <- :eblurhash.magick(file) do
+ blurhash
+ else
+ _ -> nil
+ end
+ end
end
diff --git a/lib/pleroma/web/activity_pub/transmogrifier.ex b/lib/pleroma/web/activity_pub/transmogrifier.ex
index acb4f4b3e..f601d6111 100644
--- a/lib/pleroma/web/activity_pub/transmogrifier.ex
+++ b/lib/pleroma/web/activity_pub/transmogrifier.ex
@@ -973,6 +973,7 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do
}
|> Maps.put_if_present("width", url["width"])
|> Maps.put_if_present("height", url["height"])
+ |> Maps.put_if_present("blurhash", data["blurhash"])
end)
Map.put(object, "attachment", attachments)