
Linux Debian12基于ImageMagick图像处理工具编写shell脚本用于常见图片png、jpg、jpeg、webp、tiff格式批量添加文本水印
在Linux系统中,使用ImageMagick可以图片格式转换,其中最常用的是通过命令行工具进行。
ImageMagick是一个非常强大的图像处理工具集,它包含了许多用于图像转换的命令。
一、安装ImageMagick(如果尚未安装):
1 2 |
sudo apt-get install imagemagick # 对于基于Debian的系统 |
验证是否安装成功:
尝试运行ImageMagick提供的一些常用命令,比如:
1 2 |
convert --version |
如果convert命令可用,它将返回版本信息。
二、可以编写shell脚本批量为图片添加文本水印
1.shell脚本文件名:
add_text_watermark_v1.2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 |
#!/bin/bash #脚本功能:把常用的图片格式(png、jpg、jpeg、webp、tiff)批量添加文本水印 #函数功能:使用了*通配符来检查字符串中是否有空格。如果字符串包含空格,contains_space函数将返回真(true),否则返回假(false)。 function contains_space() { [[ $1 = *\ * ]] } #函数功能:把空格全部替换为'_'下划线" function space2underline(){ local file_name_old=$1 # 使用contains_space函数判断文件名中是否含有空格 if contains_space "$file_name_old"; then file_name_new="${file_name_old// /_}" mv "$file_name_old" "$file_name_new"; echo "$file_name_new" else echo "$file_name_old" fi } #函数功能:批量为图片添加文本水印 function add_text_watermark(){ # 文本水印字体路径 font_path="../gb-font/国标黑体-GBT2312.ttf" # 文本水印颜色 text_color="#FF0000" # 红色 # 文本水印大小 text_size=30 # 判断$1参数是否为空,不为空设置用户文本水印 if [ -z $1 ];then local watermark_text="请添加自己的文本水印" else # 文本水印内容 local watermark_text=$1 fi # 水印位置在图片“左上角” # local watermark_position="northwest" # 水印位置在图片“右上角” # local watermark_position="northeast" # 水印位置在图片“左下角” # local watermark_position="southwest" # 水印位置在图片“右下角” # local watermark_position="southeast" # 水印位置在图片“正中心” # local watermark_position="center" # 判断$2参数是否为空,不为空,设置用户文本水印位置,为空,则默认文本水印在“左下角” if [ -z $2 ];then local watermark_position="southwest" else if [ $2 == "1" ];then local watermark_position="northwest" elif [ $2 == "2" ];then local watermark_position="northeast" elif [ $2 == "3" ];then local watermark_position="southwest" elif [ $2 == "4" ];then local watermark_position="southeast" elif [ $2 == "5" ];then local watermark_position="center" else local watermark_position="southwest" fi fi # 进入output-images目录 cd "output-images" # 批量为图片添加文本水印 for file_name in *;do # echo "文件'$file_name'" # 使用ImageMagick的convert命令添加文本水印 convert "$file_name" -gravity "$watermark_position" -font "$font_path" -pointsize "$text_size" -fill "$text_color" \ -annotate +6+6 "$watermark_text" "$file_name" echo "文件'$file_name'已经添加文本水印" done } #函数功能:主函数 function main(){ echo "温馨提示:仅支持常见的图片格式(png、jpg、jpeg、、webp、tiff)才可以添加文本水印,其他文件类型不支持!" # 文本水印内容 watermark_text=$1 # 水印位置 watermark_position=$2 # 创建新文件夹 new_folder="output-images" # 检查文件夹是否存在 if [ ! -d "$new_folder" ]; then # 文件夹不存在,创建文件夹 mkdir "$new_folder" fi # 存放待转换的图片文件夹 input_images_folder="input-images" # 检查文件夹是否存在 if [ ! -d "$input_images_folder" ]; then # 文件夹不存在,创建文件夹 mkdir "$input_images_folder" fi # 进入input-images目录 cd "input-images" #for file_name in `ls *.png *.jpg *.jpeg *.tiff`;do for file_name in *;do #echo "文件'${file_name}'" if [ "png" == "${file_name##*.}" ];then file_name=$(space2underline "$file_name") #echo "$file_name" cp $file_name `echo ../$new_folder/$file_name` elif [ "jpg" == "${file_name##*.}" ];then file_name=$(space2underline "$file_name") #echo "$file_name" cp $file_name `echo ../$new_folder/$file_name` elif [ "jpeg" == "${file_name##*.}" ];then file_name=$(space2underline "$file_name") #echo "$file_name" cp $file_name `echo ../$new_folder/$file_name` elif [ "webp" == "${file_name##*.}" ];then file_name=$(space2underline "$file_name") #echo "$file_name" cp $file_name `echo ../$new_folder/$file_name` elif [ "tiff" == "${file_name##*.}" ];then file_name=$(space2underline "$file_name") #echo "$file_name" cp $file_name `echo ../$new_folder/$file_name` #else #echo "仅支持常见的图片格式(png、jpg、jpeg、webp、tiff)才可以添加文本水印,其他文件'${file_name}'不支持!" fi done # 进入上一级目录 cd .. #批量为webp格式图片添加文本水印,设置文本水印位置(1:左上角;2:右上角;3:左下角;4:右下角;5:正中心) add_text_watermark "$watermark_text" "$watermark_position" } # ---------------执行主函数------------------- main $1 $2 |
2.使用方法:
首先把图片放到input-images
目录下。
1).赋予shell脚本文件执行权限
1 2 |
chmod +x add_text_watermark_v1.2.sh |
2).运行shell脚本,”文本水印内容”替换自己需要添加的水印内容,设置文本水印位置(1:左上角;2:右上角;3:左下角;4:右下角;5:正中心)
1 2 |
./add_text_watermark_v1.2.sh "文本水印内容" "文本水印位置" |
测试效果如下:
在生成的output-images
目录中,图片都已添加文本水印
三、该Shell脚本下载地址:
1 2 3 4 5 6 7 8 9 |
gitee链接: https://gitee.com/datutu2015/add_text_watermark 蓝奏云链接: https://wwxc.lanzouo.com/iRdjN2ikfx9i 知识星球链接: https://t.zsxq.com/KJRYN |