Linux shell腳本對(duì)常見(jiàn)圖片格式批量轉(zhuǎn)換為PDF文件
在Linux系統(tǒng)中,使用ImageMagick可以圖片格式轉(zhuǎn)換,其中最常用的是通過(guò)命令行工具進(jìn)行。
ImageMagick是一個(gè)非常強(qiáng)大的圖像處理工具集,它包含了許多用于圖像轉(zhuǎn)換的命令。
sudo apt-get install imagemagick # 對(duì)于基于Debian的系統(tǒng)
驗(yàn)證是否安裝成功: 嘗試運(yùn)行ImageMagick提供的一些常用命令,比如:
convert --version
如果convert命令可用,它將返回版本信息。
一、可以編寫shell腳本批量轉(zhuǎn)換圖片為PDF文件
shell腳本文件名: pictures_to_pdf_v1.0.sh
#!/bin/bash #腳本功能:把常用的圖片格式(png、jpg、jpeg、webp、tiff)批量轉(zhuǎn)換為PDF格式, # “多個(gè)圖片分開生成多個(gè)PDF文件”或者“多個(gè)圖片合并生成一個(gè)PDF文件” #函數(shù)功能:使用了*通配符來(lái)檢查字符串中是否有空格。如果字符串包含空格,contains_space函數(shù)將返回真(true),否則返回假(false)。 function contains_space() { [[ $1 = *\ * ]] } #函數(shù)功能:把空格全部替換為'_'下劃線" function space2underline(){ local file_name_old=$1 # 使用contains_space函數(shù)判斷文件名中是否含有空格 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 } # 多個(gè)圖片分開生成多個(gè)PDF文件 function images_to_multiple_pdf(){ # 獲取第一個(gè)參數(shù) local new_folder=$1 #for file_name in `ls *.png *.jpg *.jpeg *.webp *.tiff`;do for file_name in *;do #echo "文件'${file_name}'" if [ "png" == "${file_name##*.}" ];then file_name=$(space2underline "$file_name") #echo "$file_name" (convert $file_name `echo ../$new_folder/${file_name//.png/.pdf}`) && (echo "${file_name}已成功轉(zhuǎn)為pdf格式") || (echo "${file_name}轉(zhuǎn)換失敗") elif [ "jpg" == "${file_name##*.}" ];then file_name=$(space2underline "$file_name") #echo "$file_name" (convert $file_name `echo ../$new_folder/${file_name//.jpg/.pdf}`) && (echo "${file_name}已成功轉(zhuǎn)為pdf格式") || (echo "${file_name}轉(zhuǎn)換失敗") elif [ "jpeg" == "${file_name##*.}" ];then file_name=$(space2underline "$file_name") #echo "$file_name" (convert $file_name `echo ../$new_folder/${file_name//.jpeg/.pdf}`) && (echo "${file_name}已成功轉(zhuǎn)為pdf格式") || (echo "${file_name}轉(zhuǎn)換失敗") elif [ "webp" == "${file_name##*.}" ];then file_name=$(space2underline "$file_name") #echo "$file_name" (convert $file_name `echo ../$new_folder/${file_name//.webp/.pdf}`) && (echo "${file_name}已成功轉(zhuǎn)為pdf格式") || (echo "${file_name}轉(zhuǎn)換失敗") elif [ "tiff" == "${file_name##*.}" ];then file_name=$(space2underline "$file_name") #echo "$file_name" (convert $file_name `echo ../$new_folder/${file_name//.tiff/.pdf}`) && (echo "${file_name}已成功轉(zhuǎn)為pdf格式") || (echo "${file_name}轉(zhuǎn)換失敗") #else #echo "僅支持常見(jiàn)的圖片格式(png、jpg、jpeg、webp、tiff)才可以轉(zhuǎn)換為PDF格式,其他文件'${file_name}'不支持!" fi done } # 多個(gè)圖片合并生成一個(gè)PDF文件 function images_to_single_pdf(){ # 獲取第一個(gè)參數(shù) local new_folder=$1 # 圖片名稱字符串,例如"1.png 2.jpg" local file_names="" #for file_name in `ls *.png *.jpg *.jpeg *.webp *.tiff`;do for file_name in *;do #echo "文件'${file_name}'" if [ "png" == "${file_name##*.}" ];then file_name=$(space2underline "$file_name") #echo "$file_name" file_names+=" "$file_name #echo "'${file_names}'" elif [ "jpg" == "${file_name##*.}" ];then file_name=$(space2underline "$file_name") #echo "$file_name" file_names+=" "$file_name #echo "'${file_names}'" elif [ "jpeg" == "${file_name##*.}" ];then file_name=$(space2underline "$file_name") #echo "$file_name" file_names+=" "$file_name #echo "'${file_names}'" elif [ "webp" == "${file_name##*.}" ];then file_name=$(space2underline "$file_name") #echo "$file_name" file_names+=" "$file_name #echo "'${file_names}'" elif [ "tiff" == "${file_name##*.}" ];then file_name=$(space2underline "$file_name") #echo "$file_name" file_names+=" "$file_name #echo "'${file_names}'" #else #echo "僅支持常見(jiàn)的圖片格式(png、jpg、jpeg、webp、tiff)才可以轉(zhuǎn)換為PDF格式,其他文件'${file_name}'不支持!" fi done # 刪除file_names字符串最前面的空格 file_names=${file_names#"${file_names%%[![:space:]]*}"} echo "'${file_names}'" # 多個(gè)圖片轉(zhuǎn)換為一個(gè)pdf (convert $file_names `echo ../$new_folder/output.pdf`) && (echo "'${file_names}'已成功轉(zhuǎn)為pdf格式") || (echo "'${file_names}'轉(zhuǎn)換失敗") } #--------------------------------------------------------------------------------- #函數(shù)功能:主函數(shù) #--------------------------------------------------------------------------------- function main(){ echo "溫馨提示:僅支持常見(jiàn)的圖片格式(png、jpg、jpeg、webp、tiff)才可以轉(zhuǎn)換為PDF格式,其他文件類型不支持!" # 創(chuàng)建新文件夾 new_folder="output-images" # 檢查文件夾是否存在 if [ ! -d "$new_folder" ]; then # 文件夾不存在,創(chuàng)建文件夾 mkdir "$new_folder" fi # 存放待轉(zhuǎn)換的圖片文件夾 input_images_folder="input-images" # 檢查文件夾是否存在 if [ ! -d "$input_images_folder" ]; then # 文件夾不存在,創(chuàng)建文件夾 mkdir "$input_images_folder" fi # 進(jìn)入input-images目錄 cd "$input_images_folder" # 判斷$1參數(shù)是否為空,不為空設(shè)置input_number if [ -z $1 ];then # echo "第一個(gè)參數(shù)為空" # 獲取當(dāng)前腳本名稱 local script_name=$(basename "$0") echo "請(qǐng)?jiān)谶\(yùn)行腳本'${script_name}'名稱后面,輸入?yún)?shù)'1':(多個(gè)圖片分開生成多個(gè)PDF文件)或 參數(shù)'2':(多個(gè)圖片合并生成一個(gè)PDF文件)" exit else # echo "第一個(gè)參數(shù)不為空,值為:$1" local input_number=$1 fi if [ "1" == "$input_number" ];then # 多個(gè)圖片分開生成多個(gè)PDF文件 images_to_multiple_pdf "$new_folder" elif [ "2" == "$input_number" ];then # 多個(gè)圖片合并生成一個(gè)PDF文件 images_to_single_pdf "$new_folder" else # 獲取當(dāng)前腳本名稱 local script_name=$(basename "$0") echo "請(qǐng)?jiān)谶\(yùn)行腳本'${script_name}'名稱后面,輸入?yún)?shù)'1':(多個(gè)圖片分開生成多個(gè)PDF文件)或 參數(shù)'2':(多個(gè)圖片合并生成一個(gè)PDF文件)" exit fi # 進(jìn)入上一級(jí)目錄 cd .. } # ---------------執(zhí)行主函數(shù)------------------- main $1
二、使用方法
1.首先把圖片放到input-images
目錄下。
2.賦予shell腳本文件執(zhí)行權(quán)限
chmod +x pictures_to_pdf_v1.0.sh
3.運(yùn)行shell腳本,"請(qǐng)?jiān)谶\(yùn)行腳本名稱后面,輸入轉(zhuǎn)換參數(shù)'1':(多個(gè)圖片分開生成多個(gè)PDF文件)或 參數(shù)'2':(多個(gè)圖片合并生成一個(gè)PDF文件)"
./pictures_to_pdf_v1.0.sh "轉(zhuǎn)換參數(shù)"
測(cè)試效果如下:
4.在生成的output-images
目錄中,會(huì)看到生成的PDF文件。
三、該Shell腳本下載地址
gitee鏈接: https://gitee.com/datutu2015/pictures_to_pdf 藍(lán)奏云鏈接: https://wwxc.lanzouo.com/io1tg2iv6rpa 知識(shí)星球鏈接: https://t.zsxq.com/1Yjs8
四、報(bào)錯(cuò)處理
如果在圖片轉(zhuǎn)換pdf中,出現(xiàn)下面報(bào)錯(cuò):
(‘PDFpng error‘, b“convert-im6.q16: attempt to perform an operation not allowed by the security poli
這個(gè)錯(cuò)誤信息表明在執(zhí)行將圖片轉(zhuǎn)換為PDF文件的命令時(shí)出現(xiàn)了問(wèn)題,具體錯(cuò)誤與安全策略不允許執(zhí)行"PDF"操作有關(guān)。
需要修改這個(gè)安全策略policy.xml
文件,打開命令終端,執(zhí)行下面命令:
sudo vim /etc/ImageMagick-6/policy.xml
在找到的行中,將 rights 屬性的值設(shè)置為 “read|write”,以允許讀取和寫入PDF文件。例如,將行修改為類似下面的形式:
<policy domain="coder" rights="read|write" pattern="PDF" />
以上就是Linux shell腳本對(duì)常見(jiàn)圖片格式批量轉(zhuǎn)換為PDF文件的詳細(xì)內(nèi)容,更多關(guān)于Linux shell腳本圖片格式轉(zhuǎn)PDF的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Shell執(zhí)行/調(diào)用Java/Jar程序例子的實(shí)例詳解
這篇文章主要介紹了Shell執(zhí)行/調(diào)用Java/Jar程序例子的實(shí)例詳解的相關(guān)資料,這里提供實(shí)例幫助大家實(shí)現(xiàn)這樣的功能,需要的朋友可以參考下2017-08-08幾個(gè)常用的Linux操作系統(tǒng)監(jiān)控腳本代碼
本文介紹了幾個(gè)常用的Linux監(jiān)控腳本,可以實(shí)現(xiàn)主機(jī)網(wǎng)卡流量、系統(tǒng)狀況、主機(jī)磁盤空間、CPU和內(nèi)存的使用情況等方面的自動(dòng)監(jiān)控與報(bào)警。根據(jù)自己的需求寫出的shell腳本更能滿足需求,更能細(xì)化主機(jī)監(jiān)控的全面性2013-07-07遠(yuǎn)程SSH連接服務(wù)與基本排錯(cuò)經(jīng)驗(yàn)總結(jié)
下面小編就為大家?guī)?lái)一篇遠(yuǎn)程SSH連接服務(wù)與基本排錯(cuò)經(jīng)驗(yàn)總結(jié)。小編覺(jué)得聽不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-04-04Shell腳本讀取ini配置文件的實(shí)現(xiàn)代碼2例
這篇文章主要介紹了Shell腳本讀取ini配置文件的實(shí)現(xiàn)代碼2例,如果只是讀取內(nèi)容推薦使用簡(jiǎn)單版,有更多需求請(qǐng)見(jiàn)復(fù)雜版,需要的朋友可以參考下2014-08-08Shell循環(huán)語(yǔ)句的使用(for循環(huán)、while循環(huán)、until循環(huán))
本文主要介紹了Shell循環(huán)語(yǔ)句的使用(for循環(huán)、while循環(huán)、until循環(huán)),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-06-06linux shell之控制臺(tái)打印各種顏色字體和背景的實(shí)現(xiàn)方法
今天小編就為大家分享一篇關(guān)于linux shell之控制臺(tái)打印各種顏色字體和背景的實(shí)現(xiàn)方法,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-04-04