裏紙に書く程度の内容

wordpress のアップロード済み画像を圧縮する

Wordpressで作ったサイトを PageSpeed Insights でチェックすると、”画像を最適化する”項目に引っかかった場合の対処法。

画像を圧縮すればいいんだけどアップロードしている画像が大量にあったりするとかなりの手間になります。

そこで php でまとめて圧縮するスクリプトを作って作業を簡単にする。

スクリプト

そのコード。

<?php

// パス設定
$src_dir = "./uploads";
min_images($src_dir);

/**
 * ディレクトリを指定して画像を圧縮する.
 * 再帰関数.
 *
 * @param string $path 対象ディレクトリ
 * @access public
 * @return void
 */
function min_images($path)
{
    if (is_dir($path)) {

        // 配下のファイルを取得
        $dh = opendir($path);
        while ($file_name = readdir($dh)) {
            if (preg_match('/^(\.|\.\.)$/', $file_name)) {

                // . .. は無視
                continue;
            }

            // 2階層目
            $sub_path = $path. '/'. $file_name;
            if (is_dir($sub_path)) {

                // ここもディレクトリなら再帰
                min_images($sub_path);

            } else {

                // ファイル圧縮処理へ
                overwrite_image_file($sub_path);
            }

        }

    }
}

/**
 * 画像ファイルを圧縮して上書きする.
 * gifは未対応.
 *
 * @param mixed $file 対象ファイル
 * @access public
 * @return void
 */
function overwrite_image_file ($file)
{
    // 拡張子取得
    $ext = pathinfo($file, PATHINFO_EXTENSION);
    echo 'target : '. $file. "\r\n";
    switch ($ext) {
    case 'png':
    case 'PNG':
        $res = imagecreatefrompng($file);
        imagealphablending($res, false);
        imagesavealpha($res, true);
        imagepng($res, $file, 9);
        break;
    case 'bmp':
    case 'BMP':
        $res = imagecreatefromwbmp($file);
        imagewbmp($res, $file);
        break;
    case 'jpg':
    case 'jpeg':
    case 'JPG':
    case 'JPEG':
        $res = imagecreatefromjpeg($file);
        imagejpeg($res, $file, 80);
        break;
    default:
        break;
    }

}

素直にディレクトリをたどって、画像ファイルなら圧縮するだけです。

簡易的なスクリプトなので、アップロードファイル格納先はコード内にベタ書きです。

実行

上記のままのコードなら、wp-content配下に上記phpファイルを作成し、

php (作成したphpファイル名)

で実行。

それ以外の場所にスクリプトを置く場合はパス設定の部分を適宜変えてください。

注意

自分の環境で動かして問題はありませんでしたが、きちんとテストしているわけではないので使用はは自己責任でお願いします。。

参考

【php】GD関数でpng画像を加工したら透明部分が透明でなくなった!

広告
Index
広告