画像をまとめて軽量化!ImageMagickで一括リサイズ・圧縮する方法|UNIX Cafe

当サイトでは、コンテンツの一部に広告を掲載しています。
第30回|UNIX Cafe「画像をまとめて軽量化!UNIXコマンドでスッキリ最適サイズに」

UNIX Cafe | 第30回

目次

はじめに:ImageMagickで画像を最適化 | サイトの表示速度を改善する方法

「最近、自分のブログやサイトの表示がなんだか遅い…」
その原因、最適化されていない重い画像にあるかもしれません。

ページの表示速度は、読者の満足度に直結するだけでなく、Googleの検索順位を決めるSEO評価においても極めて重要な要素です。高画質な写真をそのままアップロードしてしまうと、知らず知らずのうちに機会損失を生んでいる可能性があります。

この記事では、そんなWebサイト運営者の共通の悩みを解決するため、MacやLinuxのターミナル(黒い画面)から使える魔法のツール**「ImageMagick」**を使い、フォルダ内の大量の画像を「軽くてキレイ」な最適サイズに一括で軽量化する方法を学んでいきます。

画像軽量化の基本戦略:3つのアプローチ

画像のファイルサイズを小さくするには、主に3つの方法があります。今回は特に1と2を組み合わせて、効果的な軽量化を目指します。

リサイズ(物理的なサイズを小さくする)

スマホやデジカメで撮った写真は、Webで表示するには大きすぎることがほとんどです。ブログの横幅に合わせて適切なサイズ(例: 1200pxなど)に縮小するだけで、ファイルサイズは劇的に小さくなります。

品質調整(圧縮率を調整する)

JPG画像などは、圧縮品質を少し下げることでファイルサイズを削減できます。品質85%程度であれば、人間の目にはほとんど画質の劣化が分からないまま、大幅な軽量化が可能です。

形式変換(より圧縮効率の高いフォーマットへ)

JPGやPNGを、より新しいWeb向けのフォーマットであるWebPに変換する方法です。これも非常に効果的ですが、今回はリサイズと品質調整に焦点を当てます。(WebP変換については第24回の記事で詳しく解説しています)

    魔法の画像処理ツール「ImageMagick」

    今回も主役は、コマンドラインで画像を自在に操る万能ツール「ImageMagick」です。

    macOSへのインストール (Homebrewを利用)

    ミナちゃん

    まだインストールしていない方は、ターミナルを開いてコマンドを一度だけ実行してください。

    brew install imagemagick

    これで、重い画像をスッキリ軽くするための準備が整いました。

    【基本編】1枚の画像をリサイズ&品質調整してみる

    まずは、コマンドの基本を理解するために、1枚の画像(input.jpg)を軽量化してみましょう。

    目標: 横幅を1200pxにリサイズし、JPG品質を85%に調整して、output.jpgとして保存します。

    magick input.jpg -resize 1200x -quality 85 output.jpg

    コマンドの解説

    • -resize 1200x: 横幅を1200pxに指定。xの後の高さを省略すると、縦横比を保ったまま自動で調整してくれます。
    • -quality 85: JPGの圧縮品質を85%に設定します。

    このコマンドを実行すると、例えば元の画像が3MB(3000KB)だったものが、わずか300KB程度(約1/10)になることも珍しくありません。驚くべき効果ですね。

    【応用編】フォルダ内の画像をまとめて軽量化する

    ここからがコマンドラインの真骨頂です。フォルダ内にある大量のJPG画像を、forループ(繰り返し処理)を使って一括で軽量化します。

    元画像はそのままに、軽量化した画像をoptimized/という新しいフォルダに保存するのが、安全で管理しやすいおすすめの方法です。

    # 1. 軽量化した画像を保存する "optimized" フォルダを作成
    mkdir -p optimized
    
    # 2. forループで、フォルダ内の全JPG画像を一つずつ処理
    for img in *.jpg
    do
        # 3. magickコマンドでリサイズと品質調整を行い、optimized/ フォルダに保存
        echo "Optimizing ${img}..."
        magick "$img" -resize 1200x -quality 85 "optimized/$img"
    done
    
    echo "✅ All images have been optimized."

    この数行のコマンドだけで、何十、何百枚の画像があっても、コーヒーを一杯飲んでいる間にすべての軽量化作業が完了します。

    ミナちゃん

    これなら、全部の画像を自動で処理してくれるんですね!

    【実践編】いつでも使える「画像軽量化スクリプト」

    この便利な処理を、いつでも誰でも使える「自分だけの軽量化コマンド(シェルスクリプト)」として保存しておきましょう。

    以下の内容を optimize_images.sh のような名前でファイルに保存します。

    #!/bin/bash
    #
    # optimize_images.sh
    # 使い方: このスクリプトを画像のあるフォルダに置いて実行すると、
    #         optimized/ フォルダ内に軽量化された画像が作成されます。
    #
    
    # --- 設定項目(ここで幅や品質を自由に変更できます) ---
    TARGET_WIDTH=1200
    JPG_QUALITY=85
    OUTPUT_DIR="optimized"
    
    # ----------------------------------------------------
    
    mkdir -p ${OUTPUT_DIR}
    
    echo "JPG画像を最適化します..."
    for img in *.jpg
    do
        echo "  -> ${img}"
        magick "$img" -resize ${TARGET_WIDTH}x -quality ${JPG_QUALITY} "${OUTPUT_DIR}/$img"
    done
    
    echo "PNG画像を最適化します..."
    for img in *.png
    do
        echo "  -> ${img}"
        # PNGには-qualityは効果が薄いため、リサイズのみ
        magick "$img" -resize ${TARGET_WIDTH}x "${OUTPUT_DIR}/$img"
    done
    
    echo "✅ すべての画像の軽量化が完了しました!"

    スクリプトの使い方

    chmod +x optimize_images.sh
    • 作成したファイルに、以下のコマンドで実行権限を与えます。
    • 軽量化したい画像があるフォルダに、このスクリプトファイルを置きます。
    • ターミナルでそのフォルダに移動し、スクリプトを実行します。
    ./optimize_images.sh

    スクリプト上部の設定項目を書き換えるだけで、いつでも好きなサイズ・品質で画像を最適化できる、あなただけの強力なツールの完成です。

    PNGや他の形式にも対応できる?

    ここまでは主にJPG画像を例に解説してきましたが、もちろんImageMagickはPNGや、スマホでよく使われるHEICなど、様々な画像形式に対応しています。

    forループの対象とする拡張子を変えるだけで、どんな形式の画像でも同じように一括処理が可能です。

    PNG画像をまとめて軽量化する場合

    PNGファイルは、写真よりもイラストやロゴ、スクリーンショットなど、色の境界がはっきりした画像で使われることが多い形式です。

    JPGの-qualityオプションはPNGには直接適用されませんが、リサイズだけでもファイルサイズを大幅に削減できます。

    PNG画像を横幅1000pxに一括リサイズする例:

    # 軽量化したPNG画像を保存する "optimized_png" フォルダを作成
    mkdir -p optimized_png
    
    # forループでPNG画像を一枚ずつ処理
    for img in *.png
    do
        echo "Optimizing ${img}..."
        magick "$img" -resize 1000x "optimized_png/$img"
    done
    
    echo "✅ All PNG images have been optimized."

    このように、*.jpgだった部分を*.pngに変え、保存先のフォルダ名を分かりやすく変更するだけで、PNGファイル用の軽量化処理が完成します。

    【応用】JPGもPNGも、一度に全部まとめて処理したい!

    「フォルダの中にJPGもPNGも混在しているから、一度に全部処理したい」
    そんな欲張りな願いも、シェルスクリプトなら簡単に叶えられます。

    findコマンドとwhileループを組み合わせることで、フォルダ内にある全てのJPGとPNGファイルを探し出し、一括で軽量化処理を行うことができます。

    #!/bin/bash
    #
    # optimize_all_images.sh
    # JPGとPNGの両方をまとめて軽量化するスクリプト
    #
    
    TARGET_WIDTH=1200
    JPG_QUALITY=85
    OUTPUT_DIR="optimized"
    
    mkdir -p ${OUTPUT_DIR}
    
    # findコマンドでjpgとpngを探し、whileループで一つずつ処理する
    find . -maxdepth 1 \( -iname "*.jpg" -o -iname "*.png" \) | while read img; do
        
        # ./ をファイル名から取り除く
        img_name=$(basename "$img")
        
        echo "Processing ${img_name}..."
    
        # 拡張子に応じて処理を分ける
        if [[ "$img_name" == *.jpg || "$img_name" == *.jpeg ]]; then
            magick "$img_name" -resize ${TARGET_WIDTH}x -quality ${JPG_QUALITY} "${OUTPUT_DIR}/$img_name"
        elif [[ "$img_name" == *.png ]]; then
            magick "$img_name" -resize ${TARGET_WIDTH}x "${OUTPUT_DIR}/$img_name"
        fi
    done
    
    echo "✅ すべての画像の最適化が完了しました!"

    このスクリプトを実行すれば、あなたはもうファイル形式を気にする必要はありません。ImageMagickとシェルの連携が、すべてを自動で判断し、最適化してくれます。

    このように、基本のコマンドを一度覚えてしまえば、あとは応用次第でどんな状況にも対応できるのが、コマンドラインの面白さであり、強力な点なのです。

    ミナちゃん

    これならどんな形式でも応用できますね!

    さらに軽くしたいときは?

    リサイズと品質調整だけでも画像は十分に軽くなりますが、最高のパフォーマンスを求めるなら、もう一歩先へ進んでみましょう。

    それは、画像を次世代フォーマット「WebP(ウェッピー)」に変換することです。

    WebPは、JPGやPNGよりもさらに高い圧縮率を誇り、画質をほとんど劣化させることなく、ファイルサイズを劇的に削減できます。ページの表示速度を極限まで高めたい場合、このWebPへの変換は非常に強力な一手となります。

    詳しい手順やコマンドについては、こちらの記事で詳しく解説しています。リサイズした画像を、さらにWebPに変換して、最強の軽量画像を目指してみませんか?

    まとめ:画像の軽量化を習慣にして、快適なサイトを作ろう

    最後に、今回の重要なポイントをまとめます。

    • Webサイトの表示速度にとって、**画像の軽量化(最適化)**は必須のSEO対策。
    • ImageMagickを使えば、「リサイズ」と「品質調整」をコマンドで一括処理できる。
    • forループと組み合わせることで、フォルダ内の大量の画像を自動で軽量化可能。
    • 一連の処理をシェルスクリプトにしておけば、いつでもワンタッチで最高のパフォーマンスを発揮できる画像を用意できる。

    画像の最適化は、読者のため、そしてあなた自身のサイトの評価のために、今すぐ始められる最も効果的な施策の一つです。ぜひこの自動化のテクニックを身につけ、快適なWebサイト運営を実現してください。

    ミナちゃん

    この流れをつかめば、どんなサイトの画像もスッと軽くできますよ。

    次回予告

    ユニ先生

    次回は“撮影日で自動分類!”をやってみよう。
    EXIFデータを使って、写真を日付ごとに仕分けるんだ。

    ミナちゃん

    旅行写真を整理するのにぴったりですね!楽しみです♪

    さらに学びたいあなたへ

    📘 用途ごとに選ぶ Linux のおすすめ本

    あわせて読みたい
    レベル・用途別おすすめ Linux 本リスト|UNIX Cafe UNIX Cafe | 第65回 Linux の世界には、「はじめて触る人」「コマンドを覚えはじめた人」「サーバーに挑戦したい人」と、さまざまな段階があります。そんなときに、自分...
    よかったらシェアしてね!
    • URLをコピーしました!
    • URLをコピーしました!

    この記事を書いた人

    のいのアバター のい UNIX Cafe 編集部

    UNIX Cafe は、むずかしい言葉をできるだけ使わず、物語を読むような気持ちで気軽に学べる場所です。
    プログラミングは、アイデアをコンピューターに伝えるための「ことば」。
    簡単な単語と文法を覚えることで、誰でもターミナルから便利なコマンドを使えるようになります。
    コーヒーを片手に立ち寄るような気持ちで、やさしいプログラミングの世界を、
    そっとのぞいてみてください。

    目次