🎃

[ubuntu] コマンドラインで画像をpdf化

2024/04/19に公開

きっかけ

研究室に所属しlatexを書く機会があったのですが,画像はpdf化して貼る必要があるらしく,今後も同様のシチュエーションが多発するだろうと思い画像をpdf化するbash関数を作成しました.

環境

NAME="Ubuntu"
VERSION="20.04.6 LTS (Focal Fossa)"

必要なツールのインストール

imagemagickをインストールする.

sudo apt install imagemagick

pdf変換を行えるようにするため設定ファイルの編集

/etc/ImageMagick-6/policy.xmlを以下のように変更する.

/etc/ImageMagick-6/policy.xml
~略~
- <policy domain="coder" rights="none" pattern="PDF" />
+ <policy domain="coder" rights="read|write" pattern="PDF" />
~略~

bash関数の作成

~/.bashrcに以下の関数を追加する.

~/.bashrc
~略~
topdf() {
    local path=$1
    
    # 引数がファイルの場合
    if [[ -f "$path" ]]; then
        local output_file="${path%.*}.pdf"
        convert "$path" -auto-orient "$output_file"
        echo "converted $path to $output_file."
    
    # 引数がディレクトリの場合
    elif [[ -d "$path" ]]; then
        # ディレクトリ内のすべてのサポートされる画像ファイルに対してループ
        for img_file in "$path"/*; do
            # ファイルが画像ファイルかどうかをチェック
            if [[ -f "$img_file" ]]; then
                local mimetype=$(file --mime-type -b "$img_file")
                if [[ "$mimetype" == image/* ]]; then
                    local output_file="${img_file%.*}.pdf"
                    convert "$img_file" -auto-orient "$output_file"
                    echo "converted $img_file to $output_file."
                fi
            fi
        done
    
    else
        echo "Please specify a supported image file or folder."
    fi
}

~/.bashrcの読み込み

source ~/.bashrc

利用例

topdf hoge.jpg # hoge.jpgがpdf化されhoge.pdfが生成される
topdf . # 現在のディレクトリ内のすべての画像がpdf化される

Discussion