Linux shell脚本用于常见图片png、jpg、jpeg、webp、tiff格式批量转PDF文件

server/2024/12/27 15:58:34/

Linux Debian12基于ImageMagick图像处理工具编写shell脚本用于常见图片png、jpg、jpeg、webp、tiff格式批量转PDF文件,”多个图片分开生成多个PDF文件“或者“多个图片合并生成一个PDF文件”

BiliBili视频链接:

Linux shell脚本对常见图片格式批量转换为PDF文件

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

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

sudo apt-get install imagemagick  # 对于基于Debian的系统

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

convert --version

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

shellPDF_25">二、可以编写shell脚本批量转换图片为PDF文件

shell脚本文件名:
pictures_to_pdf_v1.0.sh

#!/bin/bash
#脚本功能:把常用的图片格式(png、jpg、jpeg、webp、tiff)批量转换为PDF格式,
# “多个图片分开生成多个PDF文件”或者“多个图片合并生成一个PDF文件”#函数功能:使用了*通配符来检查字符串中是否有空格。如果字符串包含空格,contains_space函数将返回真(true),否则返回假(false)。
function contains_space() {[[ $1 = *\ * ]]
}#函数功能:把空格全部替换为'_'下划线"
function space2underline(){local file_name_old=$1# 使用contains_space函数判断文件名中是否含有空格if contains_space "$file_name_old"; thenfile_name_new="${file_name_old// /_}"mv "$file_name_old" "$file_name_new";echo "$file_name_new"elseecho "$file_name_old"fi
}# 多个图片分开生成多个PDF文件
function images_to_multiple_pdf(){# 获取第一个参数local new_folder=$1#for file_name in `ls *.png *.jpg *.jpeg *.webp *.tiff`;dofor file_name in *;do#echo "文件'${file_name}'"if [ "png" == "${file_name##*.}" ];thenfile_name=$(space2underline "$file_name")#echo "$file_name"(convert $file_name `echo ../$new_folder/${file_name//.png/.pdf}`) && (echo "${file_name}已成功转为pdf格式") || (echo "${file_name}转换失败")elif [ "jpg" == "${file_name##*.}" ];thenfile_name=$(space2underline "$file_name")#echo "$file_name"(convert $file_name `echo ../$new_folder/${file_name//.jpg/.pdf}`) && (echo "${file_name}已成功转为pdf格式") || (echo "${file_name}转换失败")elif [ "jpeg" == "${file_name##*.}" ];thenfile_name=$(space2underline "$file_name")#echo "$file_name"(convert $file_name `echo ../$new_folder/${file_name//.jpeg/.pdf}`) && (echo "${file_name}已成功转为pdf格式") || (echo "${file_name}转换失败")elif [ "webp" == "${file_name##*.}" ];thenfile_name=$(space2underline "$file_name")#echo "$file_name"(convert $file_name `echo ../$new_folder/${file_name//.webp/.pdf}`) && (echo "${file_name}已成功转为pdf格式") || (echo "${file_name}转换失败")elif [ "tiff" == "${file_name##*.}" ];thenfile_name=$(space2underline "$file_name")#echo "$file_name"(convert $file_name `echo ../$new_folder/${file_name//.tiff/.pdf}`) && (echo "${file_name}已成功转为pdf格式") || (echo "${file_name}转换失败")#else#echo "仅支持常见的图片格式(png、jpg、jpeg、webp、tiff)才可以转换为PDF格式,其他文件'${file_name}'不支持!"fidone
}# 多个图片合并生成一个PDF文件
function images_to_single_pdf(){# 获取第一个参数local new_folder=$1# 图片名称字符串,例如"1.png 2.jpg"local file_names=""#for file_name in `ls *.png *.jpg *.jpeg *.webp *.tiff`;dofor file_name in *;do#echo "文件'${file_name}'"if [ "png" == "${file_name##*.}" ];thenfile_name=$(space2underline "$file_name")#echo "$file_name"file_names+=" "$file_name#echo "'${file_names}'"elif [ "jpg" == "${file_name##*.}" ];thenfile_name=$(space2underline "$file_name")#echo "$file_name"file_names+=" "$file_name#echo "'${file_names}'"elif [ "jpeg" == "${file_name##*.}" ];thenfile_name=$(space2underline "$file_name")#echo "$file_name"file_names+=" "$file_name#echo "'${file_names}'"elif [ "webp" == "${file_name##*.}" ];thenfile_name=$(space2underline "$file_name")#echo "$file_name"file_names+=" "$file_name#echo "'${file_names}'"elif [ "tiff" == "${file_name##*.}" ];thenfile_name=$(space2underline "$file_name")#echo "$file_name"file_names+=" "$file_name#echo "'${file_names}'"#else#echo "仅支持常见的图片格式(png、jpg、jpeg、webp、tiff)才可以转换为PDF格式,其他文件'${file_name}'不支持!"fidone# 删除file_names字符串最前面的空格file_names=${file_names#"${file_names%%[![:space:]]*}"}echo "'${file_names}'"# 多个图片转换为一个pdf(convert $file_names `echo ../$new_folder/output.pdf`) && (echo "'${file_names}'已成功转为pdf格式") || (echo "'${file_names}'转换失败")}#---------------------------------------------------------------------------------
#函数功能:主函数
#---------------------------------------------------------------------------------
function main(){echo "温馨提示:仅支持常见的图片格式(png、jpg、jpeg、webp、tiff)才可以转换为PDF格式,其他文件类型不支持!"# 创建新文件夹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_folder"# 判断$1参数是否为空,不为空设置input_numberif [ -z $1 ];then# echo "第一个参数为空"# 获取当前脚本名称local script_name=$(basename "$0")echo "请在运行脚本'${script_name}'名称后面,输入参数'1':(多个图片分开生成多个PDF文件)或 参数'2':(多个图片合并生成一个PDF文件)"exitelse# echo "第一个参数不为空,值为:$1"local input_number=$1fiif [ "1" == "$input_number" ];then# 多个图片分开生成多个PDF文件images_to_multiple_pdf "$new_folder"elif [ "2" == "$input_number" ];then# 多个图片合并生成一个PDF文件images_to_single_pdf "$new_folder"else# 获取当前脚本名称local script_name=$(basename "$0")echo "请在运行脚本'${script_name}'名称后面,输入参数'1':(多个图片分开生成多个PDF文件)或 参数'2':(多个图片合并生成一个PDF文件)"exitfi# 进入上一级目录cd ..
}# ---------------执行主函数-------------------
main $1
三、使用方法

1.首先把图片放到input-images目录下。

在这里插入图片描述

2.赋予shell脚本文件执行权限

chmod +x pictures_to_pdf_v1.0.sh

3.运行shell脚本,“请在运行脚本名称后面,输入转换参数’1’:(多个图片分开生成多个PDF文件)或 参数’2’:(多个图片合并生成一个PDF文件)”

./pictures_to_pdf_v1.0.sh "转换参数"

测试效果如下:

在这里插入图片描述

4.在生成的output-images目录中,会看到生成的PDF文件。

四、该Shell脚本下载地址
 gitee链接:https://gitee.com/datutu2015/pictures_to_pdf蓝奏云链接:https://wwxc.lanzouo.com/io1tg2iv6rpa知识星球链接:https://t.zsxq.com/1Yjs8
五、报错处理

如果在图片转换pdf中,出现下面报错:

(‘PDFpng error‘, b“convert-im6.q16: attempt to perform an operation not allowed by the security poli

这个错误信息表明在执行将图片转换为PDF文件的命令时出现了问题,具体错误与安全策略不允许执行"PDF"操作有关。

需要修改这个安全策略policy.xml文件,打开命令终端,执行下面命令:

sudo vim /etc/ImageMagick-6/policy.xml

在找到的行中,将 rights 属性的值设置为 “read|write”,以允许读取和写入PDF文件。例如,将行修改为类似下面的形式:

<policy domain="coder" rights="read|write" pattern="PDF" />

在这里插入图片描述



http://www.ppmy.cn/server/153658.html

相关文章

JavaEE 导读与环境配置

JavaEE 介绍 Java EE(Java Platform Enterprise Edition), Java 平台企业版. 是JavaSE的扩展, ⽤于解决企业级的开发需求, 所以也可以称之为是⼀组⽤于企业开发的Java技术标准. 所以, 学习JavaEE主要是学习Java在企业中如何应⽤ 框架学习 Java EE 课程共涉及4个框架的学习: Spr…

DeepSeek V3:新一代开源 AI 模型,多语言编程能力卓越

DeepSeek V3 横空出世&#xff0c;以其强大的多语言编程能力和先进的技术架构&#xff0c;引发了业界的广泛关注。这款最新的 AI 模型不仅在性能上实现了质的飞跃&#xff0c;还采用了开源策略&#xff0c;为广大开发者提供了更广阔的探索空间。本文将深入解析 DeepSeek V3 的技…

视频监控平台:Liveweb视频汇聚融合平台智慧安防视频监控应用方案

Liveweb是一款功能强大、灵活部署的安防视频监控平台&#xff0c;支持多种主流标准协议&#xff0c;包括GB28181、RTSP/Onvif、RTMP等&#xff0c;同时兼容海康Ehome、海大宇等厂家的私有协议和SDK接入。该平台不仅提供传统安防监控功能&#xff0c;还支持接入AI智能分析&#…

PVE虚拟化平台之开启温度显示方法

PVE虚拟化平台之开启温度显示方法 一、PVE平台介绍1.1 PVE简介1.2 PVE特点1.3 PVE主要使用场景二、本次实践介绍2.1 环境介绍2.2 本次实践简介2.3 检查PVE状态三、pvetools介绍3.1 pvetool简介3.2 功能概览四、使用pvetools工具4.1 下载pvetools项目4.2 执行脚本五、一键安装脚…

在WSL的系统中配置免密和GitHub传输数据(SSH)

在 WSL&#xff08;Windows Subsystem for Linux&#xff09;系统中配置免密与 GitHub 传输数据&#xff0c;主要包括设置 SSH 密钥对、将公钥添加到 GitHub 账户以及确保可以通过 WSL 正常使用这些密钥。以下是详细的步骤&#xff1a; 1. 检查现有 SSH 密钥 首先&#xff0c…

网页数据的解析提取之xpath

上一篇博客我们实现了一个最基本的爬虫&#xff0c;但提取页面信息时使用的是正则表达式&#xff0c;过程比较烦琐&#xff0c;而且万一有地方写错了&#xff0c;可能会导致匹配失败&#xff0c;所以使用正则表达式提取页面信息多少还是有些不方便。 对于网页的节点来说&#…

STM32-笔记16-定时器中断点灯

一、实验目的 使用定时器 2 进行中断点灯&#xff0c;500ms LED 灯翻转一次。 二&#xff0c;定时器溢出时间计算 Tout&#xff1a;定时器溢出时间 Ft&#xff1a;定时器的时钟源频率 ARR&#xff1a;自动重装载寄存器的值 PSC&#xff1a;预分频器寄存器的值 例如&#xff0c…

【人工智能】探索当下热门视频生成模型

引言 在当今数字化浪潮下&#xff0c;视频生成模型宛如一颗璀璨的新星&#xff0c;正以惊人的速度改变着内容创作的格局。从影视制作到广告营销&#xff0c;从个人创意表达至教育培训领域&#xff0c;这些智能工具为我们开启了一扇通往无限可能的新大门。接下来&#xff0c;就让…