web-dev-qa-db-ja.com

WordPressがGIFファイルをトリミングしないようにする

WordPressがファイル拡張子に基づいてファイルをトリミングするのを防ぐ方法はありますか。 GIF画像のトリミング後、GIFファイルのトリミングを無効にしたいのですが….

  1. GiF画像が動画のままにならない
  2. アニメーション化されたままでも、私はそれらの小さいGIFサイズを使用しません。

そのため、画像のファイル拡張子に基づいてサムネイルの生成を無効にする方法があります(GIFの場合)。

5
Robert hue

サイズを設定解除することは通常intermediate_image_sizes_advancedフックを通して簡単にされることができます。唯一の問題は、利用可能な$sizes配列しかないため、一般的なレベルではこれで十分ですが、これを条件付きで実行したい場合には不十分です。条件付きでそれを行うのに必要な情報はdebug_backtraceで集めることができます - debug_backtraceはパフォーマンス的にはやや高価です。とにかく、私はそれが以下に示されるようにされることができると想像します:

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