Advertisement
stevenos

Rotate

May 22nd, 2024 (edited)
832
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 1.93 KB | None | 0 0
  1. #!/bin/bash
  2. # 安装依赖: ImageMagick ffmpeg
  3.  
  4. # 参数设置
  5. IMAGE="input.png"
  6. OUTPUT="output.gif"
  7. DIRE=1
  8. FRAME=30
  9. DIFF=2
  10. ZOOM="100%"
  11. TEMP_DIR="temp_frames"
  12. BACKGROUND_COLOR="transparent"
  13.  
  14. help() {
  15.     echo "Usage:"
  16.     echo "$0 [-i input.png][-o output.gif]"
  17.     echo "[-c]逆时针旋转"
  18.     echo "[-z 100%]放大比例"
  19.     echo "[-f 30]帧率"
  20.     echo "[-d 2]每帧旋转角度"
  21.     echo "[-b ffffff]背景色 不要加#"
  22.     exit -1
  23. }
  24.  
  25. while getopts 'i:o:cf:d:b:z:' opt; do
  26.     case $opt in
  27.         i)
  28.             IMAGE="$OPTARG"
  29.             ;;
  30.         o)
  31.             OUTPUT="$OPTARG"
  32.             ;;
  33.         c)
  34.             DIRE=-1
  35.             ;;
  36.         f)
  37.             FRAME="$OPTARG"
  38.             ;;
  39.         d)
  40.             DIFF="$OPTARG"
  41.             ;;
  42.         b)
  43.             BACKGROUND_COLOR="#$OPTARG"
  44.             ;;
  45.         z)
  46.             ZOOM="$OPTARG"
  47.             ;;
  48.         ?)
  49.             help
  50.             ;;
  51.     esac
  52. done
  53.  
  54. if [ ! -f "$IMAGE" ]; then
  55.     echo "$IMAGE 文件不存在"
  56.     help
  57. fi
  58.  
  59. echo "
  60. 当前配置:
  61. IMAGE=$IMAGE
  62. OUTPUT=$OUTPUT
  63. DIRE=$DIRE
  64. FRAME=$FRAME
  65. DIFF=$DIFF
  66. ZOOM=$ZOOM
  67. TEMP_DIR=$TEMP_DIR
  68. BACKGROUND_COLOR=$BACKGROUND_COLOR
  69. "
  70.  
  71.  
  72. # 创建临时目录
  73. mkdir -p $TEMP_DIR
  74.  
  75. # 计算总帧数
  76. TOTAL_FRAMES=$((360 / DIFF))
  77.  
  78. echo "正在生成图像帧$TOTAL_FRAMES"
  79. magick $IMAGE -resize $ZOOM "$TEMP_DIR/zoom.png"
  80. IMAGE="$TEMP_DIR/zoom.png"
  81. # 旋转图像并生成帧
  82. for ((i=0; i<TOTAL_FRAMES; i++)); do
  83.     ANGLE=$((i * DIFF * DIRE))
  84.     magick $IMAGE -alpha background -background $BACKGROUND_COLOR -rotate $ANGLE -gravity center -extent $(identify -format "%wx%h" $IMAGE) $TEMP_DIR/frame_$i.png
  85. done
  86.  
  87. echo "正在拼接gif"
  88. # 使用 ffmpeg 将帧转换为 gif
  89. ffmpeg -framerate $FRAME -i "$TEMP_DIR/frame_%d.png" -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" -loop 0 $OUTPUT
  90.  
  91. # 清理临时文件
  92. rm -r $TEMP_DIR
  93.  
  94. echo "
  95. GIF 已生成: $OUTPUT"
  96.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement