当前位置: 首页 > article >正文

Linux shell脚本用于常见图片png、jpg、jpeg、webp、tiff格式批量添加文本水印

Linux Debian12基于ImageMagick图像处理工具编写shell脚本用于常见图片png、jpg、jpeg、webp、tiff格式批量添加文本水印

在Linux系统中,使用ImageMagick可以图片格式转换,其中最常用的是通过命令行工具进行。

ImageMagick是一个非常强大的图像处理工具集,它包含了许多用于图像转换的命令。

一、安装ImageMagick(如果尚未安装):
sudo apt-get install imagemagick  # 对于基于Debian的系统

验证是否安装成功:
尝试运行ImageMagick提供的一些常用命令,比如:

convert --version

如果convert命令可用,它将返回版本信息。

二、可以编写shell脚本批量为图片添加文本水印

1.shell脚本文件名:

add_text_watermark_v1.2

#!/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脚本文件执行权限

chmod +x add_text_watermark_v1.2.sh

2).运行shell脚本,"文本水印内容"替换自己需要添加的水印内容,设置文本水印位置(1:左上角;2:右上角;3:左下角;4:右下角;5:正中心)

./add_text_watermark_v1.2.sh "文本水印内容" "文本水印位置"

测试效果如下:

在这里插入图片描述

在生成的output-images目录中,图片都已添加文本水印

在这里插入图片描述

三、该Shell脚本下载地址:
 gitee链接:
 https://gitee.com/datutu2015/add_text_watermark
 
 蓝奏云链接:
 https://wwxc.lanzouo.com/iRdjN2ikfx9i
 
 知识星球链接:
 https://t.zsxq.com/KJRYN
 


http://www.kler.cn/a/446250.html

相关文章:

  • python 曲线拟合,曲线拟合交点
  • 滚珠花键的保养与维护方法
  • 【自用】通信内网部署rzgxxt项目_01,后端pipeDemo部署(使用nssm.exe仿照nohup)
  • 将4G太阳能无线监控的视频接入电子监控大屏,要考虑哪些方面?
  • electron-vite【实战系列教程】
  • 怿星科技联合赛力斯举办workshop活动,进一步推动双方合作
  • 负载均衡+LNMP+rsync+NFS+lsync部署流程
  • QT exe文件设置图标【终极解决方案!】
  • word实现两栏格式公式居中,编号右对齐
  • 解决Apache/2.4.39 (Win64) PHP/7.2.18 Server at localhost Port 80问题
  • Java 单元测试中 JSON 相关的测试案例
  • 【C++算法】48.分治_归并_数组中的逆序对
  • uniapp 图片上传功能以及给图片添加水印
  • 数据分析实战—鸢尾花数据分类
  • 诸葛智能CTO文革:放大数据价值,释放金融营销原动力
  • Day29 C++ 模板
  • day-95 定长子串中元音的最大数目
  • 计算机视觉:原理、分类与应用
  • 头歌实训数据结构与算法-图的最短路径(第2关:多源最短路径)
  • 在 C# 中加载图像而不锁定文件
  • Xcode 文件缺失:Missing submodule xxx
  • 基于Spring Boot的大学就业信息管理系统
  • MPLS小实验:静态建立LSP
  • 【Spring】Spring的模块架构与生态圈—Spring MVC与Spring WebFlux
  • thinkphp框架diygw-ui-php进销存出库记录操作
  • 基于Spring Boot的高校素拓分管理系统