如何更改特定尺寸的图像类型?


8

我正在优化一个站点,在网格中的页面上有大量(几十个)图像。为了支持视网膜,图像也需要为2倍大小。

悬而未决的结果是要确保加载缩略图大小(由于视网膜而仍为520像素宽),而不是原来的完整大小。

但是,几乎所有图像都保存在PNG中。这在摄影图像上是巨大的浪费。生成的缩略图为JPG是有意义的...除了似乎没有一种方法可以这样做。

从核心代码中看,最接近的似乎是,WP_Image_Editor->get_output_format()但易于调整并针对特定的大小似乎并不友好。

代码中是否还有其他地方可以尝试更改生成的图像类型?

Answers:


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年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.