お世話になります。
現在VPSを用いてWordPress環境を運用しています。
今まで画像圧縮にはプラグイン(EWWW Image Optimizer有料版等)を利用していました。
有料版では通常よりも高品質で圧縮効率が良いので非常に助かっていたのですが、このプラグインはクラウドを利用しているため、圧縮完了するのにかなりの時間がかかってしまいます。
そのため自サーバーで効率の良い圧縮環境を実現しようと思ったのですが、mozjpeg(https://github.com/mozilla/mozjpeg/releases/tag/v3.1)がそれを実現出来るようなので導入するに至りました。
圧縮にはmozjpeg内にあるcjpegを使っていますが、思ったように動作しなくて困っています。
考えではWordPress内でアップロード時にcjpegを利用して元ファイルを上書きする形です。
以下は試した例です。
functions.php
php
1// 画像アップロード時に圧縮 2function moz_compress( $file ) { 3 4 // タイプ指定 5 if ( $file['type'] == 'image/jpeg' OR $file['type'] == 'image/png') { 6 7 // 画像の情報を取得 8 $image = wp_get_image_editor( $file['file'] ); 9 10 $path = wp_get_image_editor( $file['file'] ); 11 12 // エラーが無い場合 13 if ( ! is_wp_error( $image ) ){ 14 15 // 最大画像サイズを指定 16 $max_width = 1024; 17 $max_height = 1024; 18 $size = $image->get_size(); 19 $width = $size['width']; 20 $height = $size['height']; 21 22 // 指定サイズを超えた場合 23 if ($width > $max_width || $height > $max_height) { 24 $image->resize($max_width, $max_height, false); 25 } 26 27 // 画像を一時保存 28 $image->save($file['file']); 29 30 // 画像をcjpegで圧縮(動作せず) 31 $output = shell_exec("mozcjpeg -quality 70 '$path' > '$path' "); 32 echo "<pre>$output</pre>"; 33 34 } 35 36 } 37 38 return $file; 39 40} 41add_action( 'wp_handle_upload', 'moz_compress' );
他の所は一応動作しているのですが、
以下の部分が上手く動作せず、ファイルの上書きが出来ていません(元ファイルがアップロードされているのみ)。
php
1... 2$output = shell_exec("mozcjpeg -quality 70 '$path' > '$path' "); 3echo "<pre>$output</pre>"; 4...
実現したい事
・アップロードした元ファイルをcjpegで圧縮。
・アップロード時に自動作成されるファイル(サムネイル等)もcjpegで圧縮。
少し長くなりましたが、ご教授願います。
よろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。