creating images

This commit is contained in:
Gavin McDonald
2025-04-28 16:55:01 -04:00
parent 3f9b51bf64
commit 48e83f4986
6 changed files with 86 additions and 2 deletions

1
.gitignore vendored
View File

@@ -27,6 +27,7 @@ labelmaker-*.tar
# Ignore assets that are produced by build tools.
/priv/static/assets/
/priv/static/labels/
# Ignore digested assets cache.
/priv/static/cache_manifest.json

View File

@@ -17,7 +17,7 @@ defmodule LabelmakerWeb do
those modules here.
"""
def static_paths, do: ~w(assets fonts images favicon.ico robots.txt)
def static_paths, do: ~w(assets fonts images labels favicon.ico robots.txt)
def router do
quote do

View File

@@ -0,0 +1,22 @@
defmodule LabelmakerWeb.Home do
use LabelmakerWeb, :live_view
def mount(_params, _session, socket) do
{:ok, assign(socket, :label, "")}
end
def handle_event("update_label", %{"label" => label}, socket) do
{:noreply, assign(socket, :label, label)}
end
def render(assigns) do
~H"""
<div>
<h1>|{@label}|</h1>
<form phx-change="update_label">
<input type="text" name="label" value={@label} placeholder="Enter your label" />
</form>
</div>
"""
end
end

View File

@@ -0,0 +1,53 @@
defmodule LabelmakerWeb.Label do
use LabelmakerWeb, :live_view
@label_dir Path.join(:code.priv_dir(:labelmaker), "static/labels")
def mount(%{"label" => label}, _session, socket) do
File.mkdir_p!(@label_dir)
filename = "#{label}.png"
filepath = Path.join(@label_dir, filename)
unless File.exists?(filepath) do
generate_label_image(label, filepath)
end
{:ok,
assign(socket,
label: label,
image_path: ~p"/labels/#{filename}"
)}
end
def render(assigns) do
~H"""
<div>
<h1>Label: {@label}</h1>
<img src={@image_path} alt="" />
</div>
"""
end
defp generate_label_image(label, filepath) do
args = [
"-background",
"none",
"-fill",
"black",
"-pointsize",
"24",
"-font",
"Comic-Sans-MS",
"label:#{label}",
filepath
]
{_, 0} = System.cmd("magick", args)
IO.puts(filepath)
# png_binary = File.read!(filepath)
# File.rm(tmp_file)
# Base.encode64(png_binary)
end
end

View File

@@ -14,10 +14,17 @@ defmodule LabelmakerWeb.Router do
plug :accepts, ["json"]
end
# scope "/", LabelmakerWeb do
# pipe_through :browser
#
# get "/", PageController, :home
# end
scope "/", LabelmakerWeb do
pipe_through :browser
get "/", PageController, :home
live "/", Home
live "/:label", Label
end
# Other scopes may use custom stacks.

View File

@@ -11,6 +11,7 @@
"hpax": {:hex, :hpax, "1.0.3", "ed67ef51ad4df91e75cc6a1494f851850c0bd98ebc0be6e81b026e765ee535aa", [:mix], [], "hexpm", "8eab6e1cfa8d5918c2ce4ba43588e894af35dbd8e91e6e55c817bca5847df34a"},
"jason": {:hex, :jason, "1.4.4", "b9226785a9aa77b6857ca22832cffa5d5011a667207eb2a0ad56adb5db443b8a", [:mix], [{:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "c5eb0cab91f094599f94d55bc63409236a8ec69a21a67814529e8d5f6cc90b3b"},
"mime": {:hex, :mime, "2.0.6", "8f18486773d9b15f95f4f4f1e39b710045fa1de891fada4516559967276e4dc2", [:mix], [], "hexpm", "c9945363a6b26d747389aac3643f8e0e09d30499a138ad64fe8fd1d13d9b153e"},
"mogrify": {:hex, :mogrify, "0.9.3", "238c782f00271dace01369ad35ae2e9dd020feee3443b9299ea5ea6bed559841", [:mix], [], "hexpm", "0189b1e1de27455f2b9ae8cf88239cefd23d38de9276eb5add7159aea51731e6"},
"phoenix": {:hex, :phoenix, "1.7.21", "14ca4f1071a5f65121217d6b57ac5712d1857e40a0833aff7a691b7870fc9a3b", [:mix], [{:castore, ">= 0.0.0", [hex: :castore, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix_pubsub, "~> 2.1", [hex: :phoenix_pubsub, repo: "hexpm", optional: false]}, {:phoenix_template, "~> 1.0", [hex: :phoenix_template, repo: "hexpm", optional: false]}, {:phoenix_view, "~> 2.0", [hex: :phoenix_view, repo: "hexpm", optional: true]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 2.7", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:plug_crypto, "~> 1.2 or ~> 2.0", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}, {:websock_adapter, "~> 0.5.3", [hex: :websock_adapter, repo: "hexpm", optional: false]}], "hexpm", "336dce4f86cba56fed312a7d280bf2282c720abb6074bdb1b61ec8095bdd0bc9"},
"phoenix_html": {:hex, :phoenix_html, "4.2.1", "35279e2a39140068fc03f8874408d58eef734e488fc142153f055c5454fd1c08", [:mix], [], "hexpm", "cff108100ae2715dd959ae8f2a8cef8e20b593f8dfd031c9cba92702cf23e053"},
"phoenix_live_dashboard": {:hex, :phoenix_live_dashboard, "0.8.7", "405880012cb4b706f26dd1c6349125bfc903fb9e44d1ea668adaf4e04d4884b7", [:mix], [{:ecto, "~> 3.6.2 or ~> 3.7", [hex: :ecto, repo: "hexpm", optional: true]}, {:ecto_mysql_extras, "~> 0.5", [hex: :ecto_mysql_extras, repo: "hexpm", optional: true]}, {:ecto_psql_extras, "~> 0.7", [hex: :ecto_psql_extras, repo: "hexpm", optional: true]}, {:ecto_sqlite3_extras, "~> 1.1.7 or ~> 1.2.0", [hex: :ecto_sqlite3_extras, repo: "hexpm", optional: true]}, {:mime, "~> 1.6 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:phoenix_live_view, "~> 0.19 or ~> 1.0", [hex: :phoenix_live_view, repo: "hexpm", optional: false]}, {:telemetry_metrics, "~> 0.6 or ~> 1.0", [hex: :telemetry_metrics, repo: "hexpm", optional: false]}], "hexpm", "3a8625cab39ec261d48a13b7468dc619c0ede099601b084e343968309bd4d7d7"},