Bagaimana cara mengubah tipe gambar untuk ukuran tertentu?

8

Saya mengoptimalkan situs dengan jumlah gambar besar di halaman dalam kotak. Untuk dukungan retina, gambar juga harus berukuran 2x.

Buah menggantung rendah adalah untuk memastikan ukuran thumbnail dimuat (yang masih cukup lebar 520px karena retina) daripada ukuran asli penuh mereka.

Namun hampir semua gambar disimpan dalam PNG. Yang merupakan pemborosan besar pada citra fotografi. Masuk akal jika gambar mini yang dihasilkan adalah JPG ... Kecuali sepertinya tidak ada cara untuk melakukannya.

Dari melihat-lihat kode inti, tampaknya yang terdekat adalah WP_Image_Editor->get_output_format()tetapi tampaknya tidak ramah untuk dengan mudah disesuaikan dan menargetkan ukuran tertentu.

Apakah ada poin lain dalam kode di mana saya bisa mencoba mengubah jenis gambar yang dihasilkan?

Jarang
sumber

Jawaban:

10

Anda dapat menggunakan wp_generate_attachment_metadatafilter:

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

TheDeadMedic
sumber
1
Emas! Sekarang setelah saya melihatnya, saya benar-benar ingat teknik mengacaukan gambar ini setelah dihasilkan. :) Diuji dan bekerja, terima kasih.
Paling lambat