web-dev-qa-db-ja.com

サムネイルを常に 'png'ではなく 'jpg'として保存するようワードプレスに強制することは可能ですか?

私はこれに関するphp apiドキュメントで何か設定を見ることができず、多くを見ることができないのですか?

たとえば、元のファイルのアップロードがpngの場合、wordpressはjpgに変換します。

1
Alex

これは私のクライアントが非常に高品質のPNGを使っていたために私が書いたものです。これは元の画像を保存したままで、サムネイルのみを変更することに注意してください。これをあなたのfunctions.phpに加えてください

<?php

//Force PNG Thumbnails into JPGs
add_filter('wp_generate_attachment_metadata','force_png_to_jpg');

function force_png_to_jpg($image_data) {

  $sizes = array('thumbnail','medium','large');

  $upload_dir = wp_upload_dir();
  $file = $upload_dir['path'] . '/' . basename($image_data['file']);

  foreach($sizes as $size){

    if(isset($image_data['sizes'][$size]))
    {
      if( $image_data['sizes'][$size]['mime-type'] == "image/png" ){

        //change format and filename for jpg
        $dest_file = preg_replace('/\.png$/i', '.jpg', $image_data['sizes'][$size]['file']);
        $image_data['sizes'][$size]['file'] = $dest_file;
        $image_data['sizes'][$size]['mime-type'] = "image/jpg";

        //process image into jpg using standard Gd lib
        $image = imagecreatefrompng($file);
        $bg = imagecreatetruecolor(imagesx($image), imagesy($image));
        imagefill($bg, 0, 0, imagecolorallocate($bg, 255, 255, 255));
        imagealphablending($bg, TRUE);
        imagecopy($bg, $image, 0, 0, 0, 0, imagesx($image), imagesy($image));
        $bg = imagescale($bg, $image_data['sizes'][$size]['width'], $image_data['sizes'][$size]['height'] );
        imagedestroy($image);

        //set quality and save
        $quality = 80; // 0 = worst / smaller file, 100 = better / bigger file 
        imagejpeg($bg, $upload_dir['path'] . '/' . $dest_file, $quality);
        imagedestroy($bg);
      }
    }
  }

  return $image_data;
}
3
Justin Fortier

サムネイルは、ファイルのMIMEタイプを使用して保存されます。

あなたはphpの拡張子やライブラリを使ってあなた自身の関数を作成する必要があるでしょう。 WordPressは Gd を使用しますが、うまくいけばこれは3.5で ImageMagick に移植されるでしょう。拡張機能で利用可能なAPIを使用して、画像を変換するためのフックとフィルタを追加できます。良い出発点は、 media_handle_downloadmedia_sideload_image 関数を探すことです。 。

1
Chris_O