A bash script to replace the background with a single colour and resize the image to square.
Uses background remover and ImageMagick.
A bash script to replace the background with a single colour and resize the image to square.
Uses background remover and ImageMagick.
#!/bin/bash | |
remove_background() { | |
echo "[$2] remove background:" | |
file=$2 | |
input="$1/$file" | |
output="./output/$file.png" | |
# https://github.com/nadermx/backgroundremover | |
backgroundremover -i "$input" -o "$output" | |
} | |
generate_alpha() { | |
echo "[$1] fix alpha:" | |
file=$1 | |
output="./output/$file.png" | |
alpha="./alpha/$file.png" | |
convert "$output" -alpha extract "$alpha" | |
convert "$alpha" \ | |
-define connected-components:mean-color=true \ | |
-define connected-components:area-threshold=30 \ | |
-connected-components 4 "$alpha" | |
} | |
apply_alpha() { | |
echo "[$2] apply alpha:" | |
file=$2 | |
input="$1/$file" | |
output="./output/$file.png" | |
alpha="./alpha/$file.png" | |
convert "$input" "$alpha" -alpha off -compose copy_opacity -composite "$output" | |
} | |
copy_transparent() { | |
echo "[$1] copy transparent" | |
file=$1 | |
output="./output/$file.png" | |
transparent="./transparent/$file.png" | |
cp $output $transparent | |
} | |
make_square() { | |
echo "[$1] make square:" | |
file=$1 | |
input="./output/$file.png" | |
output=$input | |
width=`identify -format "%w" "$input"` | |
height=`identify -format "%h" "$input"` | |
size=$(($width>$height ? $width : $height)) | |
convert "$input" -trim -resize ${size}x${size} -background Transparent \ | |
-gravity center -extent ${size}x${size} "$output" | |
} | |
make_color_variant() { | |
echo "[$1] make color variant: $3" | |
file=$1 | |
color=$2 | |
colorname=$3 | |
input="./output/$file.png" | |
output="./$colorname/$file.png" | |
convert "$input" -background $color -alpha remove -alpha off "$output" | |
} | |
dir="./$1" | |
if [ -z "$1" ]; then | |
dir="./input" | |
fi | |
files=`ls "$dir"` | |
#colors="magenta=Magenta black=Black white=White cyan=Cyan yellow=Yellow brand=#64B7D6" | |
colors="magenta=Magenta white=White brand=#64B7D6" | |
mkdir -p "./output" | |
mkdir -p "./alpha" | |
mkdir -p "./transparent" | |
for item in $colors | |
do | |
name=`echo $item | sed -e 's/=.*//g'` | |
mkdir -p "./$name" | |
done | |
for f in $files | |
do | |
mogrify -auto-orient "./$dir/$f" | |
if [ ! -f "./alpha/$f.png" ]; then | |
remove_background "$dir" "$f" | |
generate_alpha "$f" | |
fi | |
apply_alpha "$dir" "$f" | |
copy_transparent "$f" | |
make_square "$f" | |
for item in $colors | |
do | |
name=`echo $item | sed -e 's/=.*//g'` | |
color=`echo $item | sed -e 's/.*=//g'` | |
make_color_variant "$f" "$color" "$name" | |
done | |
done | |