サポート » 使い方全般 » mozjpegを利用した自サーバー内での画像圧縮

  • お世話になります。

    現在VPSを使ったwordpress環境を構築して運用しています。

    これまで画像圧縮にはプラグイン(EWWW Image Optimizer有料版 or Compress JPEG & PNG images有料版)を利用していました。

    これらプラグインは非常に圧縮効率が良かったのですが、どちらもクラウドを利用した圧縮のため、圧縮完了するのにかなりの時間がかかってしまいます。

    そして時間短縮のために自サーバーで圧縮作業をしようと考えた結果、mozjpeg(https://github.com/mozilla/mozjpeg/releases/tag/v3.1)を導入するに至りました。

    その後mozjpeg内にあるcjpegを使い、圧縮の試行錯誤しているのですが思ったように動作しません。

    以下は試した例です。

    functions.php

    // 画像アップロード時に圧縮
    function moz_compress( $file ) {
    	// タイプ指定
    	if ( $file['type'] == 'image/jpeg' OR $file['type'] == 'image/png') {
    
    		// 画像の情報を取得
    		$image = wp_get_image_editor( $file['file'] );
    
    		$path = wp_get_image_editor( $file['file'] );
    
    		// エラーが無い場合
    		if ( ! is_wp_error( $image ) ){
    
    			// 最大画像サイズを指定
    			$max_width = 1024;
    			$max_height = 1024;
    			$size = $image->get_size();
    			$width = $size['width'];
    			$height = $size['height'];
    
    			// 指定サイズを超えた場合
    			if ($width > $max_width || $height > $max_height) {
    				$image->resize($max_width, $max_height, false);
    			}
    
    			// 画像を一時保存
    			$image->save($file['file']);
    
    			// 画像をcjpegで圧縮(動作せず)
    			$output = shell_exec("mozcjpeg -quality 70 '$path' > '$path' ");
    			echo "<pre>$output</pre>";
    
    		}
    
    	}
    
      return $file;
    
    }
    add_action( 'wp_handle_upload', 'moz_compress' );

    実現したい事
    ・アップロードした元ファイルをcjpegで圧縮。
    ・アップロード時に自動作成されるファイル(サムネイル等)もcjpegで圧縮。

    少しややこしいですが、どうかご教授願います。
    よろしくお願いします。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • モデレーター jim912

    (@jim912)

    wp_handle_upload フィルターは、メディアがアップロードされた際に動作するものなので、適用されるとしてもフルサイズの画像のみとなります。

    自動生成されるサムネイルなどにも適用するには、独自に画像編集用のクラスを定義し、wp_image_editors フィルターで該当クラスを適用させるのが最も正当な手法となります。

    How to load a custom WP_Image_Editor

    jim912様、コメントありがとうございます。

    まだ元ファイルしか適用出来ていませんが、試してみます。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • トピック「mozjpegを利用した自サーバー内での画像圧縮」には新たに返信することはできません。