Como alterar o tipo de imagem para tamanho específico?

8

Estou otimizando um site com uma grande quantidade (dezenas) de imagens na página em uma grade. Para suporte de retina, as imagens também precisam ser de tamanho 2x.

A fruta pendurada para baixo era para garantir que os tamanhos das unhas fossem carregados (que ainda são consideráveis 520px de largura por causa da retina) em vez do tamanho original completo que eles eram.

No entanto, quase todas as imagens são salvas em PNG. Que é um enorme desperdício de imagens fotográficas. Faz sentido que as miniaturas geradas sejam JPG ... Exceto que não parece haver uma maneira de fazer isso.

Ao analisar o código principal, o mais próximo parece ser WP_Image_Editor->get_output_format() , mas não parece ser fácil ajustar e segmentar tamanhos específicos.

Existem outros pontos no código onde eu poderia tentar mudar o tipo de imagem sendo gerada?

    
por Rarst 10.04.2015 / 15:55

1 resposta

10

Você pode usar o filtro 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 [email protected] 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 );

enlace

    
por TheDeadMedic 10.04.2015 / 17:23