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

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

BiliBili视频链接:

Linux shell脚本对常见图片格式转换webp和添加文本水印

在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
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/941613.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

本地电脑使用命令行上传文件至远程服务器

将本地文件上传到远程服务器,在本地电脑中cmd使用该命令: scp C:/Users/"你的用户名"/Desktop/environment.yml ws:~/environment.yml 其中,C:/Users/“你的用户名”/Desktop/environment.yml是本地文件的路径, ~/en…

004最长回文子串

#include #include #include using namespace std; class Solution { public: string longestPalindrome(string s) { int n s.size(); if (n < 2) { return s; } int maxLen 1;int begin 0;// dp[i][j] 表示 s[i..j] 是否是回文串vector<vector<int>> …

蓝桥杯刷题——day8

蓝桥杯刷题——day8 题目一题干解题思路代码 题目二题干解题思路代码 题目一 题干 N 架飞机准备降落到某个只有一条跑道的机场。其中第i架飞机在 Ti时刻到达机场上空&#xff0c;到达时它的剩余油料还可以继续盘旋 Di个单位时间&#xff0c;即它最早可以于 Ti时刻开始降落&am…

ue5 pcg(程序内容生成)真的简单方便,就5个节点

总结&#xff1a; 前情提示 鼠标单击右键平移节点 1.编辑-》插件-》procedural->勾选两个插件 2.右键-》pcg图表-》拖拽进入场景 3.先看点point 右键-》调试(快捷键d)->右侧设置粒子数 3.1调整粒子数 可以在右侧输入框&#xff0c;使用加减乘除 4.1 表面采样器 …

【编辑器扩展】打开持久化路径/缓存路径/DataPath/StreamingAssetsPath文件夹

代码 [MenuItem("Assets/Open Explorer/PersistentDataPath")]public static void OpenPersistentDataPath(){Application.OpenURL(Application.persistentDataPath);}[MenuItem("Assets/Open Explorer/DataPath")]public static void OpenDataPath(){Appl…

STM32——“SPI Flash”

引入 在给单片机写程序的时候&#xff0c;有时会用到显示屏&#xff0c;就拿市面上的0.96寸单色显示器来说&#xff0c;一张全屏的图片就占用8x1281024个字节&#xff0c;即1kb的空间&#xff0c;这对于单片机来说确实有点奢侈&#xff0c;于是我买了一个8Mb的SPI Flash&#x…

Linux 下SVN新手操作手册

下面来介绍Linux 下 SVN操作方法&#xff1a; 1、SVN的安装 Centos 7 安装Subversion sudo yum -y install subversion Ubuntu 安装Subversion sudo apt-get install subversion 自定义安装&#xff0c;官方地址&#xff1a;https://subversion.apache.org/ 2、SVN的使用…

中国信通院致信感谢易保全:肯定贡献能力,期许未来合作

近日&#xff0c;中国信息通信研究院&#xff08;以下简称“中国信通院”&#xff09;向易保全发感谢信表达谢意&#xff0c;对其在中国信通院牵头的“铸基计划”——企业数字化转型高质量发展推进行动实施中展现出的重要贡献给予了高度评价和肯定&#xff0c;并展望了双方至20…

【微信小程序】1|底部图标 | 我的咖啡店-综合实训

底部图标 引言 在微信小程序开发中&#xff0c;底部导航栏&#xff08;tabBar&#xff09;是用户界面的重要组成部分&#xff0c;它为用户提供了快速切换不同页面的功能。今天&#xff0c;我们将通过一个实际案例——“我的咖啡店”小程序&#xff0c;来详细解析如何配置底部图…

(补)算法刷题Day24: BM61 矩阵最长递增路径

题目链接 思路 方法一&#xff1a;dfs暴力回溯 使用原始used数组4个方向遍历框架 &#xff0c; 全局添加一个最大值判断最大的路径长度。 方法二&#xff1a;加上dp数组记忆的优雅回溯 抛弃掉used数组&#xff0c;使用dp数组来记忆遍历过的节点的最长递增路径长度。每遍历到已…

基于单片机的智能电子秤(论文+源码)

1.设计框架 本次智能电子秤单片机控制系统由7个部分构成&#xff0c;包括手机&#xff0c;蓝牙传输模块&#xff0c;LCD液晶显示模块&#xff0c;单片机控制系统、压力传感器检测电路&#xff0c;按键电路以及复位晶振&#xff0c;整体框图如图2.1所示。在功能上&#xff0c;整…

【保姆级别教程】VMware虚拟机安装Mac OS15苹果系统附带【VMware TooLS安装】【解锁虚拟机】和【Mac OS与真机共享文件夹】手把手教程

目录 准备工作 一、安装虚拟机 二、解锁系统 三、安装系统 四、部署系统 五、安装VMware Tools(选做) 为什么要安装VMware Tools&#xff0c;这是啥玩意&#xff1f; 六、配置共享文件夹(选做) 为什么要共享文件夹&#xff1f; 注意事项&#xff1a; 七、安装完成 准…

【服务器】linux服务器管理员查看用户使用内存情况

【服务器】linux服务器管理员查看用户使用硬盘内存情况 1、查看所有硬盘内存使用情况 df -h2、查看硬盘挂载目录下所有用户内存使用情况 du -sh /public/*3、查看某个用户所有文件夹占用硬盘内存情况 du -sh /public/zhangsan/*

Etcd注册中心基本实现

Etcd入门 什么是Etcd GitHub&#xff1a;https://github.com/etcd-io/etcd Etcd数据结构与特性 键值对格式&#xff0c;类似文件层次结构。 Etcd如何保证数据一致性&#xff1f; 表面来看&#xff0c;Etcd支持事务操作&#xff0c;能够保证数据一致性。 底层来看&#xff0…

sqlite 自定以脚本解释器

应用程序使用 libfdt 解析设备树,获取兼容性配置 内核源码支持libfdt 标准设备树语法,不用自己再创造 非常的爽,因为设备树支持预编译 一些可以跑类 BSD 系统的设备也可以使用这样的方法,不仅仅是在linux 系统上跑 有pylibfdt 支持解析设备树&#xff0c;校验设备树是否是正确的…

[python]pymc3-3.11.0安装后测试代码

测试通过环境&#xff1a; pymc33.11.0 python3.8 测试代码&#xff1a; import arviz as az import matplotlib.pyplot as plt import numpy as np import pymc3 as pm RANDOM_SEED 8927 np.random.seed(RANDOM_SEED) az.style.use("arviz-darkgrid") # True p…

Chrome 关闭自动添加https

Open Chrome and go to “chrome://net-internals/#hsts”

重温设计模式--适配器模式

文章目录 适配器模式&#xff08;Adapter Pattern&#xff09;概述适配器模式UML图适配器模式的结构目标接口&#xff08;Target&#xff09;&#xff1a;适配器&#xff08;Adapter&#xff09;&#xff1a;被适配者&#xff08;Adaptee&#xff09;&#xff1a; 作用&#xf…

Flamingo:少样本多模态大模型

Flamingo&#xff1a;少样本多模态大模型 论文大纲理解1. 确认目标2. 分析过程&#xff08;目标-手段分析&#xff09;3. 实现步骤4. 效果展示5. 金手指 解法拆解全流程核心模式提问Flamingo为什么选择使用"固定数量的64个视觉tokens"这个特定数字?这个数字的选择背…

[spring]处理器

我们可以通过spring来管理我们的类&#xff0c;之后我们可以通过spring的容器来获取我们所需要的Bean类对象。Spring的处理器是Spring对外开发的重要扩展点&#xff0c;它允许我们介入到Bean的整个实例化流程中来&#xff0c;可以动态添加、修改BeanDefinition、动态修改Bean 首…