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

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

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

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

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

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

convert --version

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

二、可以编写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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C++语言】多态

一、多态的概念 多态的概念:通俗来说,就是多种形态,具体点就是去完成某种行为,当不同的对象去完成时会产生出不同的状态。 我们可以举一个例子: 比如买票这种行为,当普通人买票时,是全价买票&am…

Centos7配置webrtc-streamer环境

Centos7配置webrtc-streamer环境 安装webrtc-streamer0.7版本 升级gdb 1、yum安装2、查看gdb版本3.下载待升级的gdb版本4.QA 1、预编译的时候报错no acceptable C compiler found in $PATH2、make的时候报错[all-bfd] Error3、make的时候报错 升级GCC 1.源码编译升级gcc9.3.0…

【AIGC】ChatGPT 结构化 Prompt 的高级应用

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: AIGC | ChatGPT 文章目录 &#x1f4af;前言&#x1f4af;标识符的使用&#xff08;Use of Identifiers&#xff09;1. #2. <>3. - 或 4. [] &#x1f4af;属性词的重要性和应用应用场景 &#x1f4af;具体模块…

OpenEuler 22.03 安装 flink-1.17.2 集群

零&#xff1a;规划 本次计划安装三台OpenEuler 22.03 版本操作系统的服务器&#xff0c;用于搭建 flink 集群。这里使用flink1.17.2 的原因&#xff0c;是便于后续与springboot的整合 服务器名IP地址作用其他应用flink01192.168.159.133主jdk11、flink-1.17.2flink02192.168.…

Docker 安装 禅道-21.2版本-外部数据库模式

Docker 安装系列 1、拉取最新版本&#xff08;zentao 21.2&#xff09; [rootTseng ~]# docker pull hub.zentao.net/app/zentao Using default tag: latest latest: Pulling from app/zentao 55ab1b300d4b: Pull complete 6b5749e5ef1d: Pull complete bdccb03403c1: Pul…

车载网关性能 --- GW ECU报文(message)处理机制的技术解析

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 所谓鸡汤,要么蛊惑你认命,要么怂恿你拼命,但都是回避问题的根源,以现象替代逻辑,以情绪代替思考,把消极接受现实的懦弱,伪装成乐观面对不幸的…

【潜意识Java】深度解析黑马项目《苍穹外卖》与蓝桥杯算法的结合问题

目录 为什么要结合项目与算法&#xff1f; 1. 蓝桥杯与《苍穹外卖》项目的结合 实例&#xff1a;基于蓝桥杯算法思想的订单配送路径规划 问题描述&#xff1a; 代码实现&#xff1a;使用动态规划解决旅行商问题 代码解析&#xff1a; 为什么这个题目与蓝桥杯相关&#x…

自己搭建专属AI:Llama大模型私有化部署

前言 AI新时代&#xff0c;提高了生产力且能帮助用户快速解答问题&#xff0c;现在用的比较多的是Openai、Claude&#xff0c;为了保证个人隐私数据&#xff0c;所以尝试本地&#xff08;Mac M3&#xff09;搭建Llama模型进行沟通。 Gpt4all 安装比较简单&#xff0c;根据 G…

GIS数据处理/程序/指导,街景百度热力图POI路网建筑物AOI等

简介其他数据处理/程序/指导&#xff01;&#xff01;&#xff01;&#xff08;1&#xff09;街景数据获取&#xff08;2&#xff09;街景语义分割后像素提取&#xff0c;指标计算代码&#xff08;绿视率&#xff0c;天空开阔度、视觉熵/景观多样性等&#xff09;&#xff08;3…

微前端qiankun的使用——实践

qiankun 创建主应用项目——vue2 main.js注册子应用 $ yarn add qiankun # 或者 npm i qiankun -Simport { registerMicroApps, start } from qiankun; import Vue from "vue"; import App from "./App.vue"; import router from "./router"; …

SAP SD客户主数据及其配置

一、客户主数据概述 在SD模块概览中对于SD模块及其有关的三大主数据进行了概要介绍&#xff0c;本篇文章将重点对于客户主数据进行有关介绍。 1、业务伙伴主数据 在提到客户主数据之前&#xff0c;我们先了解业务伙伴主数据的概念。 业务伙伴主数据是一个更广泛的概念&#x…

GitCode 光引计划征文展示|MilvusPlus:开启向量数据库新篇章

在人工智能和大数据时代&#xff0c;向量数据库作为处理非结构化数据的核心技术&#xff0c;正变得越来越重要。MilvusPlus&#xff0c;作为「光引计划」的一部分&#xff0c;应运而生&#xff0c;旨在提供一个高性能、易扩展、全功能的向量数据库解决方案。项目背景根植于对现…

网络架构与IP技术:4K/IP演播室制作的关键支撑

随着科技的不断发展&#xff0c;广播电视行业也在不断迭代更新&#xff0c;其中4K/IP演播室技术的应用成了一个引人注目的焦点。4K超高清技术和IP网络技术的结合&#xff0c;不仅提升了节目制作的画质和效果&#xff0c;还为节目制作带来了更高的效率和灵活性。那么4K超高清技术…

30多种独特艺术抽象液态酸性金属镀铬封面背景视觉纹理MOV视频素材

使用 Prismatic Flows 转换您的项目&#xff01;这个包拥有 30 多种独特的液体背景和动画&#xff0c;为任何创意活动提供令人惊叹的视觉效果。 棱镜流 – 动画背景和迭加包括30多种不同的液体背景和动画。这些高质量的资源非常适合通过充满活力和动态的视觉效果来增强您的项目…

概率论 期末 笔记

第一章 随机事件及其概率 利用“四大公式”求事件概率 习题 推导 全概率公式与贝叶斯公式 伯努利概型求概率 一维随机变量及其分布

VLAN数据格式

概念&#xff1a;VLAN叫做虚拟局域网&#xff0c;指在物理网络中根据用于、工作组、应用等进行逻辑划分的局域网&#xff0c;是一个广播域&#xff0c;与用户的物理位置没有关系。 作用&#xff1a;VLAN可以灵活的进行分段和组织&#xff0c;能够实现更好的安全性&#xff0c;…

计算机vcruntime140_1.dll丢失是什么原因?vcruntime140_1.dll丢失的解决办法如下:

计算机中vcruntime140_1.dll文件丢失的原因可能有多种&#xff0c;以下是一些常见的原因&#xff1a; 安装不完整或损坏&#xff1a;某些应用程序在安装过程中可能因为意外中断、安装程序损坏或其他原因导致vcruntime140_1.dll未能正确安装或复制到系统目录。软件卸载或更新不…

Redis学习(三)缓存

Redis学习&#xff08;三&#xff09;缓存 一、什么是缓存?如何使用缓存 二、添加商户缓存1、缓存模型和思路2、缓存更新策略1、数据库缓存不一致解决方案&#xff1a;2、数据库和缓存不一致采用什么方案 3、实现商铺和缓存与数据库双写一致 三、缓存穿透问题的解决思路1、编码…

软件设计与体系结构

1.简要说明什么是软件体系结构&#xff0c;软件体系结构模型&#xff0c;为什么要建立软件体系结构模型&#xff1f; 答&#xff1a;软件体系结构指一个软件系统在高层次上的结构化组织方式&#xff0c;包括系统的组成部分和各个部分之间的关系&#xff0c;以及它们与环境之间的…

Essential Use Cases和Real Use Cases

在软件开发领域&#xff0c;用例&#xff08;Use Cases&#xff09;是一种非常重要的工具&#xff0c;它能够帮助开发团队、产品经理以及用户之间对系统的功能需求达成一致。用例描述了在特定条件下&#xff0c;系统对用户请求所做出的响应&#xff0c;从而清晰地表达了系统的行…