This repository has been archived on 2024-04-07. You can view files and clone it, but cannot push or open issues or pull requests.
dotfiles/dotfiles/scripts/memegen

89 lines
2.0 KiB
Fish
Executable File

#!/bin/fish
set fish_trace 1
set progname (status basename)
function warning
set_color yellow
echo "[$progname]" $argv >&2
set_color --default
end
function error
set_color brred
echo "[$progname]" $argv >&2
set_color --default
exit 1
end
argparse --name="$progname" \
'i/input=' \
'o/output=' \
't/top=' \
'b/bottom=' \
's/scale=' \
'open' \
'f/force' \
-- $argv
set input "$_flag_input"
set output "$_flag_output"
set top "$_flag_top"
set bottom "$_flag_bottom"
set scale "$_flag_scale"
set force "$_flag_force"
test -f "$input"
or error "No input file provided"
if test -z "$top""$bottom"
warning "No top or bottom text provided"
test -n "$top"
or set top (echo | wdmenu -p 'Top text: ')
test -n "$bottom"
or set bottom (echo | wdmenu -p 'Bottom text: ')
end
set original_name (basename "$input" |
string replace -r '\.\w+$' '')
set meme_text (string join - $top $bottom)
test -n "$output"
or set output "$meme_text-$original_name.png"
if test -f "$output"
and not set -q force
error "Output file exists"
end
if set -q scale
set resized (mktemp -t memegen-XXXXX.png)
command magick convert "$input" -resize "$scale""%" "$resized"
else
set resized "$input"
end
set size (magick identify -format "%[fx:w]x%[fx:h]" "$resized")
command magick convert "$resized" \
-gravity north \
\( -size "$size" xc:none -font Impact -pointsize 50 -stroke black -strokewidth 7 -annotate 0 "$top" -blur 0x1 \) -composite \
-font Impact -pointsize 50 -fill white -stroke none -annotate 0 "$top" \
-gravity south \
\( -size "$size" xc:none -font Impact -pointsize 50 -stroke black -strokewidth 7 -annotate 0 "$bottom" -blur 0x1 \) \
-font Impact -pointsize 50 -fill white -stroke none -annotate 0 "$bottom" -composite \
$argv "$output"
if test "$input" != "$resized"
command rm "$resized"
end
if set -q _flag_open
command xdg-open "$output"
end
# vim: ft=fish