makemywall: new interface
We support new ways of reading files that we want to modify/generate: % ./makemywall 1920 1080 myfile1.png myfile2.png % ./makemywall 1920 1080 < mylist.txt % find . -type f -name '*.png' | ./makemywall 1080 1920
Cette révision appartient à :
Parent
8fb0ec040c
révision
7a3cd41678
68
makemywall
68
makemywall
|
@ -28,10 +28,19 @@ set -e
|
||||||
|
|
||||||
usage() {
|
usage() {
|
||||||
cat << EOH
|
cat << EOH
|
||||||
Usage: $0 [-s] <source file> <width> <height> : creates a wallpaper
|
Generate wallpapers to a specified size, given a base picture
|
||||||
-s : use a "safer" and slower method to get the background color
|
|
||||||
$0 -h : displays this help message
|
$0 [-vs] width height [picture [picture [...]]]
|
||||||
Example: $0 coolimage.png 1920 1080
|
$0 -h
|
||||||
|
|
||||||
|
-h : displays this help message
|
||||||
|
-s : use a "safer" and slower method to get the background color
|
||||||
|
-v : be verbose (set -x)
|
||||||
|
|
||||||
|
Example: $0 1920 1080 coolimage.png
|
||||||
|
|
||||||
|
The following syntax also works:
|
||||||
|
find . -type f -name '*.png' | $0 1080 1920
|
||||||
EOH
|
EOH
|
||||||
exit ${1:-0}
|
exit ${1:-0}
|
||||||
}
|
}
|
||||||
|
@ -40,18 +49,24 @@ die() {
|
||||||
echo "$1" && exit "${2:-1}"
|
echo "$1" && exit "${2:-1}"
|
||||||
}
|
}
|
||||||
|
|
||||||
if [ "$1" = "-h" ]; then
|
while getopts ":hvs" _opt; do
|
||||||
usage
|
case "$_opt" in
|
||||||
fi
|
h) usage ;;
|
||||||
|
s) _slow=1 ;;
|
||||||
|
v) set -x ;;
|
||||||
|
*) usage 1 >&2 ;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
if [ "$1" = "-s" ]; then
|
shift $((OPTIND-1))
|
||||||
|
|
||||||
|
if [ -n "$_slow" ]; then
|
||||||
getbg() {
|
getbg() {
|
||||||
# We get all hexa codes of all pixels in the picture, and pick the most
|
# We get all hexa codes of all pixels in the picture, and pick the most
|
||||||
# frequent one... which should be the background color?
|
# frequent one... which should be the background color?
|
||||||
convert "$1" -format %c +dither -depth 5 histogram:info: |
|
convert "$1" -format %c +dither -depth 5 histogram:info: |
|
||||||
sort -nr | head -1 | grep -Eo '#[A-F0-9]{6}'
|
sort -nr | head -1 | grep -Eo '#[A-F0-9]{6}'
|
||||||
}
|
}
|
||||||
shift
|
|
||||||
else
|
else
|
||||||
getbg() {
|
getbg() {
|
||||||
# We get the color of the top-left pixel.
|
# We get the color of the top-left pixel.
|
||||||
|
@ -59,19 +74,30 @@ else
|
||||||
}
|
}
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ $# -ne 3 ]; then
|
# We require width & height
|
||||||
|
# TODO: maybe auto-detect? seems tricky with dual screen
|
||||||
|
if [ $# -lt 2 ]; then
|
||||||
usage 1 >&2
|
usage 1 >&2
|
||||||
fi
|
fi
|
||||||
|
width="$1"
|
||||||
|
height="$2"
|
||||||
|
shift 2
|
||||||
|
|
||||||
[ -r "$1" ] || die "File $1 is not readable!"
|
{ if [ -z "$1" ]; then
|
||||||
inpfile="$1"
|
# No arguments, we read stdin
|
||||||
outfile="$(basename "$inpfile")"
|
cat -
|
||||||
width="$2"
|
else
|
||||||
height="$3"
|
for _file in "$@"; do
|
||||||
bgcolor="$(getbg "$inpfile")"
|
printf "%s\n" "$_file"
|
||||||
|
done
|
||||||
|
fi } |
|
||||||
|
while IFS= read -r inpfile; do
|
||||||
|
outfile="$(basename "$inpfile")"
|
||||||
|
bgcolor="$(getbg "$inpfile")"
|
||||||
|
|
||||||
# We use the `-resize ..x..\>` syntax to only shrink pictures. Enlarging is
|
# We use the `-resize ..x..\>` syntax to only shrink pictures. Enlarging is
|
||||||
# asking for trouble (artifacting, etc.)
|
# asking for trouble (artifacting, etc.)
|
||||||
convert "$inpfile" -gravity center -resize "${width}x${height}>" \
|
convert "$inpfile" -gravity center -resize "${width}x${height}>" \
|
||||||
-background "$bgcolor" -extent "${width}x${height}" \
|
-background "$bgcolor" -extent "${width}x${height}" \
|
||||||
"${outfile%.*}-${width}x${height}.${outfile##*.}"
|
"${outfile%.*}-${width}x${height}.${outfile##*.}"
|
||||||
|
done
|
||||||
|
|
Référencer dans un nouveau ticket