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