Merge branch 'develop' of git.pleroma.social:pleroma/pleroma into validate-user-info
[akkoma] / lib / pleroma / upload / filter / mogrifun.ex
1 defmodule Pleroma.Upload.Filter.Mogrifun do
2 @behaviour Pleroma.Upload.Filter
3
4 @filters [
5 {"implode", "1"},
6 {"-raise", "20"},
7 {"+raise", "20"},
8 [{"-interpolate", "nearest"}, {"-virtual-pixel", "mirror"}, {"-spread", "5"}],
9 "+polaroid",
10 {"-statistic", "Mode 10"},
11 {"-emboss", "0x1.1"},
12 {"-emboss", "0x2"},
13 {"-colorspace", "Gray"},
14 "-negate",
15 [{"-channel", "green"}, "-negate"],
16 [{"-channel", "red"}, "-negate"],
17 [{"-channel", "blue"}, "-negate"],
18 {"+level-colors", "green,gold"},
19 {"+level-colors", ",DodgerBlue"},
20 {"+level-colors", ",Gold"},
21 {"+level-colors", ",Lime"},
22 {"+level-colors", ",Red"},
23 {"+level-colors", ",DarkGreen"},
24 {"+level-colors", "firebrick,yellow"},
25 {"+level-colors", "'rgb(102,75,25)',lemonchiffon"},
26 [{"fill", "red"}, {"tint", "40"}],
27 [{"fill", "green"}, {"tint", "40"}],
28 [{"fill", "blue"}, {"tint", "40"}],
29 [{"fill", "yellow"}, {"tint", "40"}]
30 ]
31
32 def filter(%Pleroma.Upload{tempfile: file, content_type: "image" <> _}) do
33 filter = Enum.random(@filters)
34
35 file
36 |> Mogrify.open()
37 |> mogrify_filter(filter)
38 |> Mogrify.save(in_place: true)
39
40 :ok
41 end
42
43 def filter(_), do: :ok
44
45 defp mogrify_filter(mogrify, [filter | rest]) do
46 mogrify
47 |> mogrify_filter(filter)
48 |> mogrify_filter(rest)
49 end
50
51 defp mogrify_filter(mogrify, []), do: mogrify
52
53 defp mogrify_filter(mogrify, {action, options}) do
54 Mogrify.custom(mogrify, action, options)
55 end
56
57 defp mogrify_filter(mogrify, string) when is_binary(string) do
58 Mogrify.custom(mogrify, string)
59 end
60 end