問題描述

我正在網格中的網頁上大量 (數十種) 影像的網站進行最佳化。對於視網膜支援,影像也需要 2x 尺寸。

低懸的水果是確保縮圖的大小載入 (由於視網膜,它們仍然相當於 520px 寬),而不是原始尺寸。

然而,幾乎所有的影像都儲存在 PNG 中。哪個是攝影影像的巨大浪費。生成的縮圖是 JPG … 這是有意義的,除了似乎沒有辦法做到這一點。

從核心程式碼看,最接近似乎是 WP_Image_Editor->get_output_format(),但它似乎很容易調整和針對特定大小的’s doesn’t 。

在程式碼中還有其他幾點,我可以嘗試改變生成的影像型別嗎?

最佳解決方案

您可以使用 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

參考文獻

注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。