如何更改特定大小的图像类型?

时间:2015-04-10 作者:Rarst

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

低挂水果是为了确保加载缩略图大小(由于视网膜的原因,缩略图的宽度仍然相当于520像素),而不是它们原来的全部大小。

然而,几乎所有图像都保存在PNG中。这是对摄影图像的巨大浪费。生成的缩略图应该是JPG。。。但似乎没有办法做到这一点。

从核心代码来看,最接近的似乎是WP_Image_Editor->get_output_format() 但它似乎不容易调整和针对特定的尺寸。

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

1 个回复
最合适的回答,由SO网友:TheDeadMedic 整理而成

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

结束

相关推荐

定义`GET_POST_QUALUALY_Images`的大小,它们似乎已调整为150x150

我正在使用get_post_gallery_images 它可以输出150x150的图像。它看起来不需要大小参数,所以我假设它只会显示最大的图像,或者最好是我定义的一个大小。150x150太小了,有没有地方可以声明我想要多大尺寸的画廊图片?例如,我正在做:<?php $gallery = get_post_gallery_images( $post ); foreach ($gallery as $img) { ?> <li><img src