web-dev-qa-db-fra.com

Empêcher WordPress de rogner les fichiers GIF

Existe-t-il un moyen d'empêcher WordPress de rogner des fichiers en fonction de leur extension? En fait, je veux désactiver le recadrage des fichiers GIF car après le recadrage de l'image GIF ...

  1. Image GiF ne reste pas animée
  2. Même s'il reste animé, je n'utiliserai pas ces petites tailles GIF.

Il existe donc un moyen de désactiver la génération de miniatures (pour GIF) en fonction de l’extension de fichier d’une image.

5
Robert hue

Les tailles de défilement peuvent normalement être facilement effectuées via le crochet intermediate_image_sizes_advanced. Le seul problème est qu'il n'y a que le tableau $sizes disponible, donc suffisant pour un niveau général, mais pas si vous souhaitez le faire de manière conditionnelle. Les informations nécessaires pour le faire de manière conditionnelle peuvent être rassemblées avec debug_backtrace - debug_backtrace est cependant un peu cher en termes de performances. Quoi qu'il en soit, j'imagine que cela pourrait être fait comme indiqué ci-dessous:

add_action(
    'intermediate_image_sizes_advanced',
    'wpse162413_unset_sizes_if_gif'
);
function wpse162413_unset_sizes_if_gif( $sizes ) {
    // we're only having the sizes available
    // we're using debug_backtrace to get additional information
    $dbg_back = debug_backtrace();
    // scan $dbg_back array for function and get $args
    foreach ( $dbg_back as $sub ) {
        if ( $sub[ 'function'] == 'wp_generate_attachment_metadata' ) {
            $args = $sub[ 'args' ]; 
        }
    }
    // attachment id
    $att_id       = $args[0];
    // attachment path
    $att_path     = $args[1];
    // split up file information
    $pathinfo = pathinfo( $att_path );
    // if extension is gif unset sizes
    if ( $pathinfo[ 'extension' ] == 'gif' ) {
        // get all intermediate sizes
        $intermediate_image_sizes = get_intermediate_image_sizes();
        // loop trough the intermediate sizes array
        foreach ( $intermediate_image_sizes as $size ) {
            // unset the size in the sizes array
            unset( $sizes[ $size ] );
        }
    }
    // return sizes
    return $sizes;
}
6
Nicolai