画像をまとめて軽量化!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回の記事で詳しく解説しています)

あわせて読みたい
画像をWebPへ一括変換する方法|ImageMagickでまとめて形式変更|UNIX Cafe UNIX Cafe | 第24回 はじめに:WebサイトのJPGやPNG画像を、WebPに変換しよう ページの表示速度が遅い原因、その多くは「画像ファイルの重さ」にあります。そして、サイ...

魔法の画像処理ツール「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 のおすすめ本

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

のいのアバター のい UNIX Cafe マスター

Macintosh Color Classicから始まった旅は、長いWindows時代を経て、Windows10のサポート終了をきっかけにUNIXの世界へ戻ってきました。UNIX Cafeでは、UNIX・Linux・そしてMacな世界を、むずかしい言葉を使わず、物語のように書いています。プログラミングは、アイデアをコンピューターに伝えるための言葉です。簡単な単語と文法を覚えれば、誰でもコマンドを使えます。ぜひ一度、やさしいプログラミングの世界をのぞいてみてください。

目次