Remove scale_if_smaller, no more symlinking

This commit is contained in:
byte[] 2022-02-07 22:30:39 -05:00
parent 6e4771a57a
commit 1670fd9eb9
5 changed files with 24 additions and 116 deletions

View file

@ -8,18 +8,18 @@ defmodule Philomena.Processors.Gif do
end end
def process(analysis, file, versions) do def process(analysis, file, versions) do
dimensions = analysis.dimensions
duration = analysis.duration duration = analysis.duration
preview = preview(duration, file) preview = preview(duration, file)
palette = palette(file) palette = palette(file)
{:ok, intensities} = Intensities.file(preview) {:ok, intensities} = Intensities.file(preview)
scaled = Enum.flat_map(versions, &scale_if_smaller(palette, file, dimensions, &1)) scaled = Enum.flat_map(versions, &scale(palette, file, &1))
videos = generate_videos(file)
%{ %{
intensities: intensities, intensities: intensities,
thumbnails: scaled ++ [{:copy, preview, "rendered.png"}] thumbnails: scaled ++ videos ++ [{:copy, preview, "rendered.png"}]
} }
end end
@ -66,27 +66,7 @@ defmodule Philomena.Processors.Gif do
palette palette
end end
# Generate full version, and WebM and MP4 previews defp scale(palette, file, {thumb_name, {width, height}}) do
defp scale_if_smaller(_palette, file, _dimensions, {:full, _target_dim}) do
[{:symlink_original, "full.gif"}] ++ generate_videos(file)
end
defp scale_if_smaller(
palette,
file,
{width, height},
{thumb_name, {target_width, target_height}}
) do
if width > target_width or height > target_height do
scaled = scale(palette, file, {target_width, target_height})
[{:copy, scaled, "#{thumb_name}.gif"}]
else
[{:symlink_original, "#{thumb_name}.gif"}]
end
end
defp scale(palette, file, {width, height}) do
scaled = Briefly.create!(extname: ".gif") scaled = Briefly.create!(extname: ".gif")
scale_filter = "scale=w=#{width}:h=#{height}:force_original_aspect_ratio=decrease" scale_filter = "scale=w=#{width}:h=#{height}:force_original_aspect_ratio=decrease"
@ -110,7 +90,7 @@ defmodule Philomena.Processors.Gif do
scaled scaled
]) ])
scaled [{:copy, scaled, "#{thumb_name}.gif"}]
end end
defp generate_videos(file) do defp generate_videos(file) do

View file

@ -5,13 +5,12 @@ defmodule Philomena.Processors.Jpeg do
Enum.map(sizes, fn {name, _} -> "#{name}.jpg" end) Enum.map(sizes, fn {name, _} -> "#{name}.jpg" end)
end end
def process(analysis, file, versions) do def process(_analysis, file, versions) do
dimensions = analysis.dimensions
stripped = optimize(strip(file)) stripped = optimize(strip(file))
{:ok, intensities} = Intensities.file(stripped) {:ok, intensities} = Intensities.file(stripped)
scaled = Enum.flat_map(versions, &scale_if_smaller(stripped, dimensions, &1)) scaled = Enum.flat_map(versions, &scale(stripped, &1))
%{ %{
replace_original: stripped, replace_original: stripped,
@ -72,21 +71,7 @@ defmodule Philomena.Processors.Jpeg do
optimized optimized
end end
defp scale_if_smaller(_file, _dimensions, {:full, _target_dim}) do defp scale(file, {thumb_name, {width, height}}) do
[{:symlink_original, "full.jpg"}]
end
defp scale_if_smaller(file, {width, height}, {thumb_name, {target_width, target_height}}) do
if width > target_width or height > target_height do
scaled = scale(file, {target_width, target_height})
[{:copy, scaled, "#{thumb_name}.jpg"}]
else
[{:symlink_original, "#{thumb_name}.jpg"}]
end
end
defp scale(file, {width, height}) do
scaled = Briefly.create!(extname: ".jpg") scaled = Briefly.create!(extname: ".jpg")
scale_filter = "scale=w=#{width}:h=#{height}:force_original_aspect_ratio=decrease" scale_filter = "scale=w=#{width}:h=#{height}:force_original_aspect_ratio=decrease"
@ -106,7 +91,7 @@ defmodule Philomena.Processors.Jpeg do
{_output, 0} = System.cmd("jpegtran", ["-optimize", "-outfile", scaled, scaled]) {_output, 0} = System.cmd("jpegtran", ["-optimize", "-outfile", scaled, scaled])
scaled [{:copy, scaled, "#{thumb_name}.jpg"}]
end end
defp srgb_profile do defp srgb_profile do

View file

@ -6,12 +6,11 @@ defmodule Philomena.Processors.Png do
end end
def process(analysis, file, versions) do def process(analysis, file, versions) do
dimensions = analysis.dimensions
animated? = analysis.animated? animated? = analysis.animated?
{:ok, intensities} = Intensities.file(file) {:ok, intensities} = Intensities.file(file)
scaled = Enum.flat_map(versions, &scale_if_smaller(file, animated?, dimensions, &1)) scaled = Enum.flat_map(versions, &scale(file, animated?, &1))
%{ %{
intensities: intensities, intensities: intensities,
@ -47,26 +46,7 @@ defmodule Philomena.Processors.Png do
optimized optimized
end end
defp scale_if_smaller(_file, _animated?, _dimensions, {:full, _target_dim}) do defp scale(file, animated?, {thumb_name, {width, height}}) do
[{:symlink_original, "full.png"}]
end
defp scale_if_smaller(
file,
animated?,
{width, height},
{thumb_name, {target_width, target_height}}
) do
if width > target_width or height > target_height do
scaled = scale(file, animated?, {target_width, target_height})
[{:copy, scaled, "#{thumb_name}.png"}]
else
[{:symlink_original, "#{thumb_name}.png"}]
end
end
defp scale(file, animated?, {width, height}) do
scaled = Briefly.create!(extname: ".png") scaled = Briefly.create!(extname: ".png")
scale_filter = scale_filter =
@ -96,6 +76,6 @@ defmodule Philomena.Processors.Png do
System.cmd("optipng", ["-i0", "-o1", "-quiet", "-clobber", scaled]) System.cmd("optipng", ["-i0", "-o1", "-quiet", "-clobber", scaled])
scaled [{:copy, scaled, "#{thumb_name}.png"}]
end end
end end

View file

@ -7,16 +7,17 @@ defmodule Philomena.Processors.Svg do
|> Kernel.++(["rendered.png", "full.png"]) |> Kernel.++(["rendered.png", "full.png"])
end end
def process(analysis, file, versions) do def process(_analysis, file, versions) do
preview = preview(file) preview = preview(file)
{:ok, intensities} = Intensities.file(preview) {:ok, intensities} = Intensities.file(preview)
scaled = Enum.flat_map(versions, &scale_if_smaller(file, analysis.dimensions, preview, &1)) scaled = Enum.flat_map(versions, &scale(preview, &1))
full = [{:copy, preview, "full.png"}]
%{ %{
intensities: intensities, intensities: intensities,
thumbnails: scaled ++ [{:copy, preview, "rendered.png"}] thumbnails: scaled ++ full ++ [{:copy, preview, "rendered.png"}]
} }
end end
@ -35,26 +36,7 @@ defmodule Philomena.Processors.Svg do
preview preview
end end
defp scale_if_smaller(_file, _dimensions, preview, {:full, _target_dim}) do defp scale(preview, {thumb_name, {width, height}}) do
[{:symlink_original, "full.svg"}, {:copy, preview, "full.png"}]
end
defp scale_if_smaller(
_file,
{width, height},
preview,
{thumb_name, {target_width, target_height}}
) do
if width > target_width or height > target_height do
scaled = scale(preview, {target_width, target_height})
[{:copy, scaled, "#{thumb_name}.png"}]
else
[{:copy, preview, "#{thumb_name}.png"}]
end
end
defp scale(preview, {width, height}) do
scaled = Briefly.create!(extname: ".png") scaled = Briefly.create!(extname: ".png")
scale_filter = "scale=w=#{width}:h=#{height}:force_original_aspect_ratio=decrease" scale_filter = "scale=w=#{width}:h=#{height}:force_original_aspect_ratio=decrease"
@ -63,6 +45,6 @@ defmodule Philomena.Processors.Svg do
{_output, 0} = System.cmd("optipng", ["-i0", "-o1", "-quiet", "-clobber", scaled]) {_output, 0} = System.cmd("optipng", ["-i0", "-o1", "-quiet", "-clobber", scaled])
scaled [{:copy, scaled, "#{thumb_name}.png"}]
end end
end end

View file

@ -23,13 +23,13 @@ defmodule Philomena.Processors.Webm do
{:ok, intensities} = Intensities.file(preview) {:ok, intensities} = Intensities.file(preview)
scaled = scaled = Enum.flat_map(versions, &scale(stripped, palette, duration, dimensions, &1))
Enum.flat_map(versions, &scale_if_smaller(stripped, mp4, palette, duration, dimensions, &1)) mp4 = [{:copy, mp4, "full.mp4"}]
%{ %{
replace_original: stripped, replace_original: stripped,
intensities: intensities, intensities: intensities,
thumbnails: scaled ++ [{:copy, preview, "rendered.png"}] thumbnails: scaled ++ mp4 ++ [{:copy, preview, "rendered.png"}]
} }
end end
@ -70,31 +70,12 @@ defmodule Philomena.Processors.Webm do
stripped stripped
end end
defp scale_if_smaller(_file, mp4, _palette, _duration, _dimensions, {:full, _target_dim}) do defp scale(file, palette, duration, dimensions, {thumb_name, target_dimensions}) do
[ {webm, mp4} = scale_videos(file, dimensions, target_dimensions)
{:symlink_original, "full.webm"},
{:copy, mp4, "full.mp4"}
]
end
defp scale_if_smaller(
file,
mp4,
palette,
duration,
{width, height},
{thumb_name, {target_width, target_height}}
) do
{webm, mp4} =
if width > target_width or height > target_height do
scale_videos(file, {width, height}, {target_width, target_height})
else
{file, mp4}
end
cond do cond do
thumb_name in [:thumb, :thumb_small, :thumb_tiny] -> thumb_name in [:thumb, :thumb_small, :thumb_tiny] ->
gif = scale_gif(file, palette, duration, {target_width, target_height}) gif = scale_gif(file, palette, duration, target_dimensions)
[ [
{:copy, webm, "#{thumb_name}.webm"}, {:copy, webm, "#{thumb_name}.webm"},