images – ¿Cómo cambiar el tipo de imagen para un tamaño específico?

Pregunta:

Estoy optimizando un sitio con una gran cantidad (docenas) de imágenes en la página en una cuadrícula. Para el soporte de la retina, las imágenes también deben ser de tamaño 2x.

La fruta madura era asegurarse de que se cargaran los tamaños de las miniaturas (que todavía tienen un ancho considerable de 520px debido a la retina) en lugar del tamaño original completo que tenían.

Sin embargo, casi todas las imágenes se guardan en PNG. Lo que es un gran desperdicio de imágenes fotográficas. Tendría sentido que las miniaturas generadas fueran JPG … Excepto que no parece haber una forma de hacerlo.

Al mirar a través del código central, el más cercano parece ser WP_Image_Editor->get_output_format() pero no parece fácil de ajustar y apuntar a tamaños específicos.

¿Hay otros puntos en el código en los que podría intentar cambiar el tipo de imagen que se genera?

Respuesta:

Puede utilizar el 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 =@ 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

Leave a Comment

Your email address will not be published. Required fields are marked *

web tasarım