特定のサイズの画像タイプを変更するにはどうすればよいですか?


8

グリッド内のページに大量(数十)の画像があるサイトを最適化しています。網膜をサポートするには、画像のサイズも2倍にする必要があります。

ぶら下がっている果物は、サムネイルの元のサイズではなく、サムネイルのサイズがロードされることを確認することでした(網膜のため、幅はかなり520pxです)。

ただし、ほとんどすべての画像はPNGで保存されます。これは、写真画像の無駄遣いです。生成されたサムネイルがJPGであることは理にかなっています...それを行う方法がないように見えることを除いて。

コアコードを見ると、最も近いように見えますWP_Image_Editor->get_output_format()が、簡単に調整して特定のサイズをターゲットにすることは、友好的ではないようです。

生成される画像のタイプを変更しようとするコードの他のポイントはありますか?

回答:


10

wp_generate_attachment_metadataフィルターを使用できます。

function wpse_183835_to_jpeg( $meta, $post_id ) {
    $sizes_to_convert = array(
        'thumbnail',
    );

    $path = dirname( get_attached_file( $post_id ) );

    foreach ( $sizes_to_convert as $size ) {
        if ( ! empty( $meta['sizes'][ $size ] ) ) {
            $data = $meta['sizes'][ $size ];
            if ( $data['mime-type'] === 'image/png' && is_file( $file = "$path/{$data['file']}" ) ) {
                if ( $image =@ imagecreatefrompng( $file ) ) {
                    // Change file extension
                    $file_jpg = preg_replace( '/\.[^\.]+$/', '', $data['file'] ) . '.jpg';

                    if ( @ imagejpeg( $image, "$path/$file_jpg", 90 ) ) { // Save new jpg version
                        // Update metadata with new filename
                        $meta['sizes'][ $size ]['file'] = $file_jpg;
                        // Delete png version
                        @ unlink( $file );
                    }

                    @ imagedestroy( $image );
                }
            }
        }
    }

    return $meta;
}

add_filter( 'wp_generate_attachment_metadata', 'wpse_183835_to_jpeg', 10, 2 );

https://codex.wordpress.org/Function_Reference/wp_generate_attachment_metadata


1
ゴールド!見てきので、画像が生成されたにこの画像をいじるテクニックを実際に思い出しました。:)テスト済みで動作しています。ありがとうございます。
Rarst、2015
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.