diff --git a/lib/music_library/records/importer.ex b/lib/music_library/records/importer.ex index 4b02718d..34a1dc10 100644 --- a/lib/music_library/records/importer.ex +++ b/lib/music_library/records/importer.ex @@ -64,12 +64,24 @@ defmodule MusicLibrary.Records.Importer do def import_cover_image(record) do with {:ok, image_data} <- blob_get(record.image_url) do + {:ok, thumb} = Vix.Vips.Operation.thumbnail_buffer(image_data, 400) + {:ok, thumb_data} = Vix.Vips.Image.write_to_buffer(thumb, ".jpg") + record - |> Rec.add_image_data(image_data) + |> Rec.add_image_data(thumb_data) |> MusicLibrary.Repo.update!() end end + def resize_cover_image(record) do + {:ok, thumb} = Vix.Vips.Operation.thumbnail_buffer(record.image_data, 400) + {:ok, thumb_data} = Vix.Vips.Image.write_to_buffer(thumb, ".jpg") + + record + |> Rec.add_image_data(thumb_data) + |> MusicLibrary.Repo.update!() + end + def import_all_cover_images do Rec |> MusicLibrary.Repo.all() @@ -81,6 +93,17 @@ defmodule MusicLibrary.Records.Importer do end) end + def resize_all_cover_images do + Rec + |> MusicLibrary.Repo.all() + |> Enum.each(fn r -> + if r.image_data != nil do + resize_cover_image(r) + IO.puts("Resized cover image for #{r.title}") + end + end) + end + def import_all do Rec |> MusicLibrary.Repo.all() diff --git a/mix.exs b/mix.exs index 641cc074..9d9880c5 100644 --- a/mix.exs +++ b/mix.exs @@ -40,6 +40,7 @@ defmodule MusicLibrary.MixProject do {:phoenix_live_reload, "~> 1.2", only: :dev}, {:yaml_elixir, "~> 2.11"}, {:finch, "~> 0.19.0"}, + {:vix, "~> 0.30.0"}, # TODO bump on release to {:phoenix_live_view, "~> 1.0.0"}, {:phoenix_live_view, "~> 1.0.0-rc.1", override: true}, {:floki, ">= 0.30.0", only: :test}, diff --git a/mix.lock b/mix.lock index c8a9c474..826509ba 100644 --- a/mix.lock +++ b/mix.lock @@ -38,6 +38,7 @@ "telemetry_metrics": {:hex, :telemetry_metrics, "1.0.0", "29f5f84991ca98b8eb02fc208b2e6de7c95f8bb2294ef244a176675adc7775df", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "f23713b3847286a534e005126d4c959ebcca68ae9582118ce436b521d1d47d5d"}, "telemetry_poller": {:hex, :telemetry_poller, "1.1.0", "58fa7c216257291caaf8d05678c8d01bd45f4bdbc1286838a28c4bb62ef32999", [:rebar3], [{:telemetry, "~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "9eb9d9cbfd81cbd7cdd24682f8711b6e2b691289a0de6826e58452f28c103c8f"}, "thousand_island": {:hex, :thousand_island, "1.3.5", "6022b6338f1635b3d32406ff98d68b843ba73b3aa95cfc27154223244f3a6ca5", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "2be6954916fdfe4756af3239fb6b6d75d0b8063b5df03ba76fd8a4c87849e180"}, + "vix": {:hex, :vix, "0.30.0", "e2865c01c443326fbe84aec70d665e99a58534651b2cd69716e7ba95ac84c469", [:make, :mix], [{:castore, "~> 0.1 or ~> 1.0", [hex: :castore, repo: "hexpm", optional: false]}, {:cc_precompiler, "~> 0.1.4 or ~> 0.2", [hex: :cc_precompiler, repo: "hexpm", optional: false]}, {:elixir_make, "~> 0.7.3 or ~> 0.8", [hex: :elixir_make, repo: "hexpm", optional: false]}, {:kino, "~> 0.7", [hex: :kino, repo: "hexpm", optional: true]}], "hexpm", "b07e43855c636de0378bc1730b82abcaf7db43c169e7e8c3333aaedee7bfde83"}, "websock": {:hex, :websock, "0.5.3", "2f69a6ebe810328555b6fe5c831a851f485e303a7c8ce6c5f675abeb20ebdadc", [:mix], [], "hexpm", "6105453d7fac22c712ad66fab1d45abdf049868f253cf719b625151460b8b453"}, "websock_adapter": {:hex, :websock_adapter, "0.5.7", "65fa74042530064ef0570b75b43f5c49bb8b235d6515671b3d250022cb8a1f9e", [:mix], [{:bandit, ">= 0.6.0", [hex: :bandit, repo: "hexpm", optional: true]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 2.6", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:websock, "~> 0.5", [hex: :websock, repo: "hexpm", optional: false]}], "hexpm", "d0f478ee64deddfec64b800673fd6e0c8888b079d9f3444dd96d2a98383bdbd1"}, "yamerl": {:hex, :yamerl, "0.10.0", "4ff81fee2f1f6a46f1700c0d880b24d193ddb74bd14ef42cb0bcf46e81ef2f8e", [:rebar3], [], "hexpm", "346adb2963f1051dc837a2364e4acf6eb7d80097c0f53cbdc3046ec8ec4b4e6e"},