Linux shell脚本用于常见图片png、jpg、jpeg、webp、tiff格式批量转PDF文件

news/2024/12/24 9:23:36 标签: linux, pdf, ImageMagick, 图片转PDF, shell, 图片处理, debian

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命令可用,它将返回版本信息。

shellPDF_21">二、可以编写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格式,其他文件类型不支持!"
    # 创建新文件夹
    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_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 ..
}


# ---------------执行主函数-------------------
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.niftyadmin.cn/n/5797637.html

相关文章

VSCode:IDE显示设置 --自定义字体及主题颜色

VSCode:IDE显示设置 1.设置字体大小2.设置主题背景 1.设置字体大小 (1)打开VSCode。 (2)打开设置:File – Preferences – Settings。 (3)设置字体大小:Text Editor –…

学习threejs,PerspectiveCamera透视相机和OrthographicCamera正交相机对比

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️THREE.PerspectiveCamera透…

GitLab的安装与卸载

目录 GitLab安装 GitLab使用 使用前可选操作 修改web端口 修改Prometheus端口 使用方法 GitLab的卸载 环境说明 系统版本 CentOS 7.2 x86_64 软件版本 gitlab-ce-10.8.4 GitLab安装 Gitlab的rpm包集成了它需要的软件,简化了安装步骤,所以直接…

c# 实现一个简单的异常日志记录(异常迭代+分片+定时清理)+AOP Rougamo全局注入

1. 日志目录和文件管理 日志目录:日志文件存储在 ./Exceptions 目录下。日志文件命名:日志文件的命名格式为 yyyy_MM_dd.log,表示当天的日期。如果当天的日志文件大小超过 maxFileSizeBytes(3KB),则会创建…

正则表达式解析与功能说明

正则表达式解析与功能说明 表达式说明 String regex "\\#\\{TOASRTRINNG\\((.*?)((.*?))\\)(\\})";该正则表达式的作用是匹配形如 #{TOASRTRINNG(...)} 的字符串格式。以下是正则表达式的详细解析: 拆解与解析 1. \\# 匹配:# 字符。说明…

Odrive源码分析(四) 位置爬坡算法

Odrive中自带一个简单的梯形速度爬坡算法&#xff0c;本文分析下这部分代码。 代码如下&#xff1a; #include <cmath> #include "odrive_main.h" #include "utils.hpp"// A sign function where input 0 has positive sign (not 0) float sign_ha…

springboot471基于协同过滤算法商品推荐系统(论文+源码)_kaic

摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装协同过滤算法商品推荐系统软件来发挥其高效地信息处理的作用…

2024年AI投资回顾:资本热潮持续涌动,巨额融资引领未来

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…