ShortX随机壁纸实现

本文最后更新于 2023年9月12日 晚上

ShortX随机壁纸实现

  利用ShortX shell脚本配合magick裁剪图片设置壁纸

关于ShortX

  ShortX是什么

随机壁纸实现

  使用shell脚本返回目录中随机图片路径

1
2
3
4
5
6
7
8
_path="globalVarOf$_wallpaper_path"

cd "$_path"

random_filename=$(find . -type f \( -name "*.jpg" -o -name "*.JPG" -o -name "*.png" -o -name "*.PNG" \) | shuf -n 1)
random_filename="${random_filename#./}"

echo "$_path/$random_filename"

  前提是需要一个全局变量_wallpaper_path方便修改壁纸路径

  • 将全局变量的值传入_path
  • 进入目录
  • 在目录下查找后缀为jpg或png的文件并且随机返回一项
  • 然后去掉文件名前的./

裁剪实现

  图片大小不一怎么办?使用ImageMagick来处理

关于ImageMagick

  预编译二进制文件在此,我们只需要把二进制文件和库文件复制到手机内部设置好权限就可以使用,还可以做一个magisk模块挂载,模块的结构就像这样

1
2
3
4
5
6
──system
└bin
└magick
└lib64
└libc++_shared.so
└libomp.so

设置权限755,输入即可

shell脚本裁剪
1
2
3
4
5
6
7
8
9
10
magick "${random_filename}" -resize x2340 "/data/adb/wallpaper.jpg"
wallpaper_width=$(magick identify -format "%w" "/data/adb/wallpaper.jpg")
if [ "${wallpaper_width}" -ge 1080 ] && [ "${wallpaper_width}" -le 1950 ]; then
magick "/data/adb/wallpaper.jpg" -gravity center -crop 1080x2340+0+0 +repage "/data/adb/wallpaper1.jpg"
else
magick "/data/adb/wallpaper.jpg" -blur 0x4 "/data/adb/wallpaper_blur.jpg"
magick "${random_filename}" -resize 1080x "/data/adb/wallpaper2.jpg"
magick convert "/data/adb/wallpaper_blur.jpg" "/data/adb/wallpaper2.jpg" -gravity center -composite "/data/adb/wallpaper1.jpg"
magick convert "/data/adb/wallpaper1.jpg" -gravity center -crop 1080x2340+0+0 +repage "/data/adb/wallpaper1.jpg"
fi
  • 重设图片高度2340,保证宽高比,输出文件/data/adb/wallpaper.jpg
  • 判断重设宽度后图片的宽度
    1. 若宽度度大于1080,就居中裁剪1080*2340
    2. 若宽度小于1080,就依照1080宽度再重设一张/data/adb/wallpaper2.jpg,并给2340高的那张加上模糊,输出为/data/adb/wallpaper_blur.jpg,然后把模糊的作为背景,把宽度为1080的依照中心锚点合并,最后再切出1080*2340,输出为/data/adb/wallpaper1.jpg

设置壁纸

  直接使用ShortX内部动作设置壁纸实现即可,路径/data/adb/wallpaper.jpg
  不要忘了日后删除/data/adb下面的几张图片呐,当然也可以输出到其他位置