欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Linux shell腳本對(duì)常見(jiàn)圖片格式批量轉(zhuǎn)換為PDF文件

 更新時(shí)間:2024年12月26日 10:09:43   作者:星如雨落  
Linux Debian12基于ImageMagick圖像處理工具編寫shell腳本用于常見(jiàn)圖片png、jpg、jpeg、webp、tiff格式批量轉(zhuǎn)PDF文件,”多個(gè)圖片分開生成多個(gè)PDF文件“或者“多個(gè)圖片合并生成一個(gè)PDF文件”,本文詳細(xì)介紹了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í)例詳解

    這篇文章主要介紹了Shell執(zhí)行/調(diào)用Java/Jar程序例子的實(shí)例詳解的相關(guān)資料,這里提供實(shí)例幫助大家實(shí)現(xiàn)這樣的功能,需要的朋友可以參考下
    2017-08-08
  • 一波實(shí)用的Bash Shell整理

    一波實(shí)用的Bash Shell整理

    這篇文章主要介紹了一波實(shí)用的Bash Shell整理,適用于Ubuntu等Debian系的Linux系統(tǒng),需要的朋友可以參考下
    2015-06-06
  • 幾個(gè)常用的Linux操作系統(tǒng)監(jiān)控腳本代碼

    幾個(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é)

    遠(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-04
  • shell實(shí)現(xiàn)猜數(shù)字小游戲

    shell實(shí)現(xiàn)猜數(shù)字小游戲

    這篇文章主要為大家詳細(xì)介紹了shell實(shí)現(xiàn)猜數(shù)字小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • 如何讓history命令顯示日期和時(shí)間

    如何讓history命令顯示日期和時(shí)間

    我們都對(duì) history 命令很熟悉。它將終端上 bash 執(zhí)行過(guò)的所有命令存儲(chǔ)到 .bash_history 文件中,來(lái)幫助我們復(fù)查用戶之前執(zhí)行過(guò)的命令。這篇文章主要介紹了讓history命令顯示日期和時(shí)間的方法,需要的朋友可以參考下
    2018-01-01
  • Shell腳本讀取ini配置文件的實(shí)現(xiàn)代碼2例

    Shell腳本讀取ini配置文件的實(shí)現(xiàn)代碼2例

    這篇文章主要介紹了Shell腳本讀取ini配置文件的實(shí)現(xiàn)代碼2例,如果只是讀取內(nèi)容推薦使用簡(jiǎn)單版,有更多需求請(qǐng)見(jiàn)復(fù)雜版,需要的朋友可以參考下
    2014-08-08
  • Shell循環(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))

    本文主要介紹了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-06
  • linux shell之控制臺(tái)打印各種顏色字體和背景的實(shí)現(xiàn)方法

    linux 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
  • 判斷文件是否存在的shell腳本代碼

    判斷文件是否存在的shell腳本代碼

    判斷文件是否存在的shell腳本,有詳細(xì)的注釋,很不錯(cuò),有需要的朋友不妨參考下
    2013-02-02

最新評(píng)論