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.pswp.cn/web/63844.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/63844.shtml
英文地址,請注明出處:http://en.pswp.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…

Vue.js 響應接口

Vue.js 響應接口 引言 Vue.js,作為當前前端開發領域中的佼佼者,以其簡潔、高效和靈活的特點,贏得了廣大開發者的喜愛。其核心功能之一便是響應式系統,它使得數據與視圖之間的同步變得異常簡單。本文將深入探討Vue.js的響應接口,解析其工作原理,并展示如何在實際項目中有…

深入了解藍牙Profile類型與設備的對應關系

在現代技術中,藍牙作為一種無線通信技術,廣泛應用于各種設備之間的短距離通信。不同的設備在連接時使用不同的藍牙Profile(配置文件),每種Profile都為特定的設備功能提供支持,例如音頻流傳輸、語音通話、文件傳輸等。在本文中,我們將詳細介紹藍牙Profile的常見類型及其對…

LLMs之PDF:MinerU(將PDF文件轉換成Markdown和JSON格式)的簡介、安裝和使用方法、案例應用之詳細攻略

LLMs之PDF:MinerU(將PDF文件轉換成Markdown和JSON格式)的簡介、安裝和使用方法、案例應用之詳細攻略 目錄 MinerU的簡介 0、日志 1、MinerU 的主要特點 2、已知問題 MinerU 安裝和使用方法 1、MinerU的三種體驗方式 T1、在線演示 T2、快速CPU演示 T3、GPU …

【AIGC】ChatGPT 結構化 Prompt 的高級應用

博客主頁&#xff1a; [小????????] 本文專欄: AIGC | ChatGPT 文章目錄 &#x1f4af;前言&#x1f4af;標識符的使用&#xff08;Use of Identifiers&#xff09;1. #2. <>3. - 或 4. [] &#x1f4af;屬性詞的重要性和應用應用場景 &#x1f4af;具體模塊…

Python繪制圖表

Python提供了多種可視化庫&#xff0c;常用的有matplotlib、seaborn和plotly等。這些庫可以用于繪制各種類型的圖表&#xff0c;如折線圖、散點圖、柱狀圖、餅圖等。 下面是一個使用matplotlib繪制折線圖的示例&#xff1a; python import matplotlib.pyplot as plt # 準備數…

Python 練習

一、列表練習 1、求偶數元素的和[1,2,1,2,3,3,6,5,8] 1 2 3 4 5 6 list01 [1, 2, 1, 2, 3, 3, 6, 5, 8] sum 0 for i in list01: if int(i) % 2 0: sum sum i print(f"列表中所有偶數和是: {sum}") 2、計算 1 - 2 3 - 4 ... 99 中除88以外…

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…

寬帶ANC、窄帶ANC、正弦噪聲抑制組成混合噪聲控制系統結構

混合控制結構由寬帶ANC子系統&#xff08;BANC&#xff09;、窄帶ANC子系統&#xff08;NANC&#xff09;和正弦噪聲抑制子系統&#xff08;SNC&#xff09;三部分組成。這種混合系統的設計目標是有效地控制同時包含寬帶噪聲和窄帶噪聲&#xff08;例如周期性的正弦噪聲&#x…

車載網關性能 --- 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…

大語言模型中的Agent優勢及相關技術;Agent和RAG區別

大語言模型中的Agent優勢及相關技術: 強大的任務規劃與執行能力 技術:通過將復雜任務拆解為多個子任務,并依據任務間的邏輯關系和優先級進行規劃,確定執行順序,調用相應工具或模型來完成各子任務,最終實現復雜任務的整體解決。如微軟的Jarvis,可利用LLM的推理規劃能力拆…

深入理解構造函數:C++ 編程中的基石

一、概念 構造函數(Constructor) 是一種特殊的成員函數&#xff0c;用于在創建對象時初始化對象的狀態&#xff08;即成員變量&#xff09;。它的主要作用是保證對象在創建時具有有效的初始值。 二、特點 與類同名&#xff1a; 構造函數的名稱與類名相同&#xff0c;沒有返回…

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"; …

后端項目java中字符串、集合、日期時間常用方法

我這里只介紹了項目中最常用的哈,比如像集合有很多,但我們最常用的就是ArrayList。 然后我這里會以javascript中的字符串、數組的方法為基準來實現,有些方法js和java會有些區別也會介紹 字符串 每次修改 String 對象都會創建一個新的對象,而 StringBuffer 可以在同一個對象…

Ubuntu 22.04永久保存路由

在 Ubuntu 22.04 上&#xff0c;可以按照以下方式配置讓流量訪問 172.19.201.207 走指定的路由。 1. 臨時添加路由 臨時路由規則只在當前系統會話中有效&#xff0c;重啟后會丟失。 添加路由規則 運行以下命令&#xff1a; sudo ip route add 172.19.201.207 via 192.168.2…