add_image_sizeで同じサイズの複数の画像サイズを追加する方法


8

WordPressインストールでアップロードされたすべての画像にグレースケールフィルターを使用しています。しかし、私は自分のウェブサイトにグレースケールの画像とカラー画像(ホバーで色付け)の両方を必要としています。私がこれを試みた方法は、次のようなadd_image_size()の束を作成することでした:

add_image_size( 'gho-small', 100, 0, true ); // Used for small images
add_image_size( 'gho-small-grayscale', 100, 0, true ); // Used for small grayscaled images
add_image_size( 'gho-medium', 200, 0, true ); // Used for medium images
add_image_size( 'gho-medium-grayscale', 200, 0, true ); // Used for medium grayscaled images
add_image_size( 'gho-large', 400, 0, true ); // Used for large images
add_image_size( 'gho-large-grayscale', 400, 0, true ); // Used for large grayscaled images

次に、画像にフィルターを適用し、*グレースケールIDのみを取得して保存します。

add_filter('wp_generate_attachment_metadata','gholumns_grayscale_filter');
function gholumns_grayscale_filter($meta)
{
    $dir = wp_upload_dir();
    $file = trailingslashit($dir['path']).$meta['sizes']['gho-large-grayscale']['file'];
    do_grayscale_filter($file);
    return $meta;
}

これは問題なく機能しますが、明らかにadd_image_size()は幅と高さの引数を調べ、その組み合わせでサイズがすでに定義されている場合、サイズは追加されません。その機能は新しいサイズを追加することであり、サイズが重複している場合は通常、処理時間を節約するために再度追加しない方がよいことは理解できます。しかし、今は同じサイズの2つの画像が必要ですが、1つはフィルターが適用され、もう1つはオリジナルです。

どうすればこれを達成できますか?

次のように、1ピクセルだけ広い別のサイズを追加しようとしました。

add_image_size( 'gho-small-grayscale', 101, 0, true ); // Used for small grayscaled images

そして、フィルターの後で画像のサイズを変更して、100/200/400何にでも戻します。しかし、それは正しくないget_the_post_thumbnail()と思い101x$heightます。また、画像の寸法はだと思っているので、呼び出しをめちゃくちゃにします。また> 1px、幅+ 1pxの場合、比率によって高さが高くなる可能性があるため、画像を水平および垂直に1ピクセルずつサイズ変更するほど簡単ではありません。


コーエン、あなたは解答を回答として投稿すべきだ。よくある質問を確認すると、自分の質問に答えても問題ないことがわかります。
ブラソフィロ

1
@brasofiloはい私は知っていますが、当時、投稿してから24時間以内に自分の質問に答えるのに十分な評判がありませんでした。通常私はそうします、心配しないでください。
Coen、2012年

おっと...私がFAQに戻ってその評判の部分を読む時間です。Q&Aの
優れた

回答:


9

ねえ、私はいつも自分の問題を解決し続けています。これが最後に解決した方法です。add_image_sizeは画像サイズの同一の寸法を無視しないで、代わりにファイル名をアップロードディレクトリの同じファイルに向けていることを発見しました。それがわかったら、グレースケールイメージを別の名前で保存し、その名前をフック内の$ meta配列に返すだけで、WPはそれを情報としてデータベースに格納します。すべてのget_thumbnail()関数は引き続き正常に機能しており、-grayscale IDを要求するだけです。

add_filter('wp_generate_attachment_metadata','gholumns_grayscale_filter');
function gholumns_grayscale_filter($meta)
{
$file = $meta['sizes']['gho-large-grayscale']['file'];
$meta['sizes']['gho-large-grayscale']['file'] = do_grayscale_filter($file);
//do_resize($file, -1, -1); # No longer necessary!
$file = $meta['sizes']['gho-medium-grayscale']['file'];
$meta['sizes']['gho-medium-grayscale']['file'] = do_grayscale_filter($file);
//do_resize($file, -1, -1); # No longer necessary!
$file = $meta['sizes']['gho-small-grayscale']['file'];
$meta['sizes']['gho-small-grayscale']['file'] = do_grayscale_filter($file);
//do_resize($file, -1, -1); # No longer necessary!
return $meta;
}


function do_grayscale_filter($file)
{
$dir = wp_upload_dir();
$image = wp_load_image(trailingslashit($dir['path']).$file);
imagefilter($image, IMG_FILTER_GRAYSCALE);
return save_modified_image($image, $file, '-grayscale');
}

function save_modified_image($image, $filename, $suffix)
{
$dir = wp_upload_dir();
$dest = trailingslashit($dir['path']).$filename;

list($orig_w, $orig_h, $orig_type) = @getimagesize($dest);

$filename = str_ireplace(array('.jpg', '.jpeg', '.gif', '.png'), array($suffix.'.jpg', $suffix.'.jpeg', $suffix.'.gif', $suffix.'.png'), $filename);
$dest = trailingslashit($dir['path']).$filename;

switch ($orig_type)
{
    case IMAGETYPE_GIF:
        imagegif( $image, $dest );
        break;
    case IMAGETYPE_PNG:
        imagepng( $image, $dest );
        break;
    case IMAGETYPE_JPEG:
        imagejpeg( $image, $dest );
        break;
}

return $filename;
}

これは素晴らしく、まさに私がやりたかったことですが、代わりにphotoshopのブレンドモード乗算効果を使用します。通常のPHPで別の画像から複数の赤い画像を正常に作成するためのコードはありましたが、現在のすべての画像サイズに適用する方法を理解できませんでした。
Mike Kormendy 2014年

私が気づいたことの1つは、これは画像再生器や現在の投稿に保存されていない画像の投稿ではまったく機能しないことです。
マイクコルメンディ2014年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.