diff options
| author | Mark Felder <feld@FreeBSD.org> | 2020-08-25 17:18:22 -0500 | 
|---|---|---|
| committer | Mark Felder <feld@FreeBSD.org> | 2020-08-25 17:18:22 -0500 | 
| commit | 899ea2da3e77ca64598e45eba986d5315b523120 (patch) | |
| tree | bba793a5778bd5c18953d9f85a648457ece76b49 | |
| parent | 479578b148f28f311a7d20f6da99bbc0dab1652c (diff) | |
| download | pleroma-899ea2da3e77ca64598e45eba986d5315b523120.tar.gz pleroma-899ea2da3e77ca64598e45eba986d5315b523120.zip  | |
Switch to imagemagick, only support videos
| -rw-r--r-- | config/config.exs | 2 | ||||
| -rw-r--r-- | config/description.exs | 4 | ||||
| -rw-r--r-- | lib/pleroma/helpers/media_helper.ex | 13 | ||||
| -rw-r--r-- | lib/pleroma/web/media_proxy/media_proxy_controller.ex | 15 | 
4 files changed, 14 insertions, 20 deletions
diff --git a/config/config.exs b/config/config.exs index e1558e29e..972b96d2d 100644 --- a/config/config.exs +++ b/config/config.exs @@ -444,7 +444,7 @@ config :pleroma, :media_preview_proxy,    enabled: false,    thumbnail_max_width: 600,    thumbnail_max_height: 600, -  quality: 2, +  image_quality: 85,    proxy_opts: [      head_request_max_read_duration: 5_000    ] diff --git a/config/description.exs b/config/description.exs index 0082cc84f..60f76be45 100644 --- a/config/description.exs +++ b/config/description.exs @@ -1975,9 +1975,9 @@ config :pleroma, :config_description, [          description: "Max height of preview thumbnail."        },        %{ -        key: :quality, +        key: :image_quality,          type: :integer, -        description: "Quality of the output. Ranges from 1 (max quality) to 31 (lowest quality)." +        description: "Quality of the output. Ranges from 0 (min quality) to 100 (max quality)."        },        %{          key: :proxy_opts, diff --git a/lib/pleroma/helpers/media_helper.ex b/lib/pleroma/helpers/media_helper.ex index 89dd4204b..07e6dba5e 100644 --- a/lib/pleroma/helpers/media_helper.ex +++ b/lib/pleroma/helpers/media_helper.ex @@ -7,18 +7,17 @@ defmodule Pleroma.Helpers.MediaHelper do    Handles common media-related operations.    """ -  def ffmpeg_resize(uri_or_path, %{max_width: max_width, max_height: max_height} = options) do -    quality = options[:quality] || 1 +  def image_resize(url, %{max_width: max_width, max_height: max_height} = options) do +    quality = options[:quality] || 85      cmd = ~s""" -    ffmpeg -i #{uri_or_path} -f lavfi -i color=c=white \ -      -filter_complex "[0:v] scale='min(#{max_width},iw)':'min(#{max_height},ih)': \ -        force_original_aspect_ratio=decrease [scaled]; \ -        [1][scaled] scale2ref [bg][img]; [bg] setsar=1 [bg]; [bg][img] overlay=shortest=1" \ -      -loglevel quiet -f image2 -vcodec mjpeg -frames:v 1 -q:v #{quality} pipe:1 +    convert - -resize '#{max_width}x#{max_height}>' -quality #{quality} -      """      pid = Port.open({:spawn, cmd}, [:use_stdio, :in, :stream, :exit_status, :binary]) +    {:ok, env} = url |> Pleroma.Web.MediaProxy.url() |> Pleroma.HTTP.get() +    image = env.body +    Port.command(pid, image)      loop_recv(pid)    end diff --git a/lib/pleroma/web/media_proxy/media_proxy_controller.ex b/lib/pleroma/web/media_proxy/media_proxy_controller.ex index 1c51aa5e3..b925973ba 100644 --- a/lib/pleroma/web/media_proxy/media_proxy_controller.ex +++ b/lib/pleroma/web/media_proxy/media_proxy_controller.ex @@ -66,25 +66,20 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyController do    end    defp handle_preview("image/" <> _ = _content_type, conn, url) do -    handle_image_or_video_preview(conn, url) -  end - -  defp handle_preview("video/" <> _ = _content_type, conn, url) do -    handle_image_or_video_preview(conn, url) +    handle_image_preview(conn, url)    end    defp handle_preview(content_type, conn, _url) do      send_resp(conn, :unprocessable_entity, "Unsupported content type: #{content_type}.")    end -  defp handle_image_or_video_preview(%{params: params} = conn, url) do -    quality = Config.get!([:media_preview_proxy, :quality]) +  defp handle_image_preview(%{params: params} = conn, url) do +    quality = Config.get!([:media_preview_proxy, :image_quality])      with {thumbnail_max_width, thumbnail_max_height} <- thumbnail_max_dimensions(params), -         media_proxy_url <- MediaProxy.url(url),           {:ok, thumbnail_binary} <- -           MediaHelper.ffmpeg_resize( -             media_proxy_url, +           MediaHelper.image_resize( +             url,               %{max_width: thumbnail_max_width, max_height: thumbnail_max_height, quality: quality}             ) do        conn  | 
