问题描述
我正在网格中的网页上大量 (数十种) 图像的网站进行优化。对于视网膜支持,图像也需要 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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。