Linux shell腳本對常見圖片格式批量轉換為PDF文件
在Linux系統(tǒng)中,使用ImageMagick可以圖片格式轉換,其中最常用的是通過命令行工具進行。
ImageMagick是一個非常強大的圖像處理工具集,它包含了許多用于圖像轉換的命令。
sudo apt-get install imagemagick # 對于基于Debian的系統(tǒng)
驗證是否安裝成功: 嘗試運行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"; then file_name_new="${file_name_old// /_}" mv "$file_name_old" "$file_name_new"; echo "$file_name_new" else echo "$file_name_old" fi } # 多個圖片分開生成多個PDF文件 function images_to_multiple_pdf(){ # 獲取第一個參數 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}已成功轉為pdf格式") || (echo "${file_name}轉換失敗") 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}已成功轉為pdf格式") || (echo "${file_name}轉換失敗") 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}已成功轉為pdf格式") || (echo "${file_name}轉換失敗") 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}已成功轉為pdf格式") || (echo "${file_name}轉換失敗") 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}已成功轉為pdf格式") || (echo "${file_name}轉換失敗") #else #echo "僅支持常見的圖片格式(png、jpg、jpeg、webp、tiff)才可以轉換為PDF格式,其他文件'${file_name}'不支持!" fi done } # 多個圖片合并生成一個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`;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 "僅支持常見的圖片格式(png、jpg、jpeg、webp、tiff)才可以轉換為PDF格式,其他文件'${file_name}'不支持!" fi done # 刪除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格式,其他文件類型不支持!" # 創(chuàng)建新文件夾 new_folder="output-images" # 檢查文件夾是否存在 if [ ! -d "$new_folder" ]; then # 文件夾不存在,創(chuàng)建文件夾 mkdir "$new_folder" fi # 存放待轉換的圖片文件夾 input_images_folder="input-images" # 檢查文件夾是否存在 if [ ! -d "$input_images_folder" ]; then # 文件夾不存在,創(chuàng)建文件夾 mkdir "$input_images_folder" fi # 進入input-images目錄 cd "$input_images_folder" # 判斷$1參數是否為空,不為空設置input_number if [ -z $1 ];then # echo "第一個參數為空" # 獲取當前腳本名稱 local script_name=$(basename "$0") echo "請在運行腳本'${script_name}'名稱后面,輸入參數'1':(多個圖片分開生成多個PDF文件)或 參數'2':(多個圖片合并生成一個PDF文件)" exit else # echo "第一個參數不為空,值為:$1" local input_number=$1 fi if [ "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文件)" exit fi # 進入上一級目錄 cd .. } # ---------------執(zhí)行主函數------------------- main $1
二、使用方法
1.首先把圖片放到input-images
目錄下。
2.賦予shell腳本文件執(zhí)行權限
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中,出現(xiàn)下面報錯:
(‘PDFpng error‘, b“convert-im6.q16: attempt to perform an operation not allowed by the security poli
這個錯誤信息表明在執(zhí)行將圖片轉換為PDF文件的命令時出現(xiàn)了問題,具體錯誤與安全策略不允許執(zhí)行"PDF"操作有關。
需要修改這個安全策略policy.xml
文件,打開命令終端,執(zhí)行下面命令:
sudo vim /etc/ImageMagick-6/policy.xml
在找到的行中,將 rights 屬性的值設置為 “read|write”,以允許讀取和寫入PDF文件。例如,將行修改為類似下面的形式:
<policy domain="coder" rights="read|write" pattern="PDF" />
以上就是Linux shell腳本對常見圖片格式批量轉換為PDF文件的詳細內容,更多關于Linux shell腳本圖片格式轉PDF的資料請關注腳本之家其它相關文章!
相關文章
Shell執(zhí)行/調用Java/Jar程序例子的實例詳解
這篇文章主要介紹了Shell執(zhí)行/調用Java/Jar程序例子的實例詳解的相關資料,這里提供實例幫助大家實現(xiàn)這樣的功能,需要的朋友可以參考下2017-08-08幾個常用的Linux操作系統(tǒng)監(jiān)控腳本代碼
本文介紹了幾個常用的Linux監(jiān)控腳本,可以實現(xiàn)主機網卡流量、系統(tǒng)狀況、主機磁盤空間、CPU和內存的使用情況等方面的自動監(jiān)控與報警。根據自己的需求寫出的shell腳本更能滿足需求,更能細化主機監(jiān)控的全面性2013-07-07Shell循環(huán)語句的使用(for循環(huán)、while循環(huán)、until循環(huán))
本文主要介紹了Shell循環(huán)語句的使用(for循環(huán)、while循環(huán)、until循環(huán)),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-06-06linux shell之控制臺打印各種顏色字體和背景的實現(xiàn)方法
今天小編就為大家分享一篇關于linux shell之控制臺打印各種顏色字體和背景的實現(xiàn)方法,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-04-04