Trusted WordPress tutorials, when you need them most.
Beginner’s Guide to WordPress
WPBカップ
25 Million+
Websites using our plugins
16+
Years of WordPress experience
3000+
WordPress tutorials
by experts

WordPressで画像をグレースケール化する方法

アップロードする前に画像をグレースケール化するために、WordPressとフォトエディターを定数切り替えていませんか?事前に写真を個別に編集するのは面倒で非効率的な作業です。

幸いなことに、WordPressの長年の実験を通じて、アップロード時に画像を自動的にグレースケール化する簡単な方法を発見しました。

この投稿では、WordPressで画像をグレースケール化しながらサイトにアップロードする方法を順を追って紹介する。

Greyscale Images in WordPress

WordPressでグレースケール画像を使うべきタイミングとは?

グレースケール画像は、画像内の光の量に関する情報のみを含んでいる。画像の色は、黒と白の間で変化する、さまざまな灰色の濃淡を示す。

特定の状況下では、グレースケール画像を使用すると、WordPressのサイトに有益なことがあります。例えば、画像に表示されているオブジェクトの可読性を向上させるために使用することができます。

一方、グレースケール画像はサイズが小さいため、画像処理によく使われる。そのため、開発者は複雑な処理を短時間で実行できる。

ということで、WordPressで画像をアップロードする際にグレースケールにする方法を見てみよう。

WordPressでアップロード時に画像をグレースケール化する

WordPressで画像を追加するとなると、アップロード前にPhotoshopのような写真編集ソフトで編集し、カラー写真をグレースケールに変換する必要がある。

アップロードする画像が何百枚、何千枚とある場合、1枚1枚手作業で編集するのは大変な時間がかかります。

しかし、アップロード時に自動的にグレースケール画像にすることができます。まず、テーマのfunctions.phpファイルに次のコードを追加するだけです:

add_filter('wp_generate_attachment_metadata','rb_bw_filter');
   
function rb_bw_filter($meta) {
   
    $path = wp_upload_dir(); // get upload directory
    $file = $path['basedir'].'/'.$meta['file']; // Get full size image
   
    $files[] = $file; // Set up an array of image size urls
   
    foreach ($meta['sizes'] as $size) {
        $files[] = $path['path'].'/'.$size['file'];
    }
   
    foreach ($files as $file) { // iterate through each image size
   
        // Convert image to grayscale credit to http://ottopress.com/2011/customizing-wordpress-images/
   
        list($orig_w, $orig_h, $orig_type) = @getimagesize($file);
        $image = wp_load_image($file);
        imagefilter($image, IMG_FILTER_GRAYSCALE);
        switch ($orig_type) {
            case IMAGETYPE_GIF:
                imagegif( $image, $file );
                break;
            case IMAGETYPE_PNG:
                imagepng( $image, $file );
                break;
            case IMAGETYPE_JPEG:
                imagejpeg( $image, $file );
                break;
        }
    }
    return $meta;
}

テーマファイルにコードを追加する簡単な方法は、WordPress用のWPCodeプラグインを使用することです。

テーマのfunction.phpファイルを手動で編集することなく、コードスニペットを実行できる最高のコードスニペットプラグインです。サイトを壊す心配がありません。

WPCode

まず、あなたのサイトに無料のWPCodeプラグインをダウンロードしてインストールする必要があります。WordPressプラグインのインストール方法については、こちらをご覧ください。

注:WPCodeの無料版は、WordPressで簡単にカスタムコードを追加するために必要なすべてを提供しています。プライベートクラウドスニペットライブラリ、スケジュールスニペット、変換ピクセルなど、より高度な機能を利用するには、WPCode Proにアップグレードすることができます。

有効化したら、WordPressダッシュボードからCode Snippets ” + Add Newにアクセスしてください。

次に、「カスタムコードを追加(新規スニペット)」設定に移動し、「スニペットを使用」ボタンをクリックします。

Add a new custom code snippet in WPCode

次に、表示されるオプションからコードタイプとして「PHP Snippet」を選択する必要がある。

Select PHP Snippet as the code type

カスタム・スニペットの作成ページで、スニペットの名前を入力します。これは、何のためのコードかを覚えておくのに役立つものであれば何でも構いません。

次に、上記のコードを「コードプレビュー」エリアに貼り付けます。

Add code snippet for grayscale images

コードを入力したら、「インサーター」セクションまでスクロールダウンできる。

ここでは、「自動挿入」オプションを選択したままにしておくことができます。これで自動的にコードが挿入され、実行されます。

Insertion methods for snippets in WPCode

最後に、画面上部に戻り、スイッチを「非有効化」から「有効化」に切り替え、「スニペットを保存」ボタンをクリックする。

Save and activate your custom code snippet

次に、新しいページを編集または追加して、コードをテストすることができます。WordPressエディターで「+」ボタンをクリックし、Imageブロックを追加します。

WordPressのブログに画像をアップロードすると、自動的にグレースケール画像に変換されます。

Convert images to grayscale on upload

WordPressで画像をグレースケール化する方法について、この投稿がお役に立てば幸いです。また、WordPressサイトにダークモードを追加する方法や、専門家が選ぶ最高のウェブデザインソフトウェアもご覧ください。

If you liked this article, then please subscribe to our YouTube Channel for WordPress video tutorials. You can also find us on Twitter and Facebook.

情報開示 私たちのコンテンツは読者支援型です。これは、あなたが私たちのリンクの一部をクリックした場合、私たちはコミッションを得ることができることを意味します。 WPBeginnerの資金源 をご覧ください。3$編集プロセスをご覧ください。

アバター

Editorial Staff at WPBeginner is a team of WordPress experts led by Syed Balkhi with over 16 years of experience in WordPress, Web Hosting, eCommerce, SEO, and Marketing. Started in 2009, WPBeginner is now the largest free WordPress resource site in the industry and is often referred to as the Wikipedia for WordPress.

究極のWordPressツールキット

ツールキットへの無料アクセス - すべてのプロフェッショナルが持つべきWordPress関連製品とリソースのコレクション!

Reader Interactions

17件のコメント返信を残す

  1. Tomas Kapler

    Great tip, i would just like to mention, that for many usages it might be better to simply do this via CSS filter, e.g.
    img.bw {
    filter: grayscale(1);
    }
    you can even e.g. show b/w by default and color on hover, or you can do animation from greyscale to full color and back, e.g.
    img.bw {
    filter: grayscale(0);
    }

    img.bw.grey {
    filter: grayscale(1);
    transition-property: filter;
    transition-duration: 1s;
    }

    i also do not think, that wp_generate_attachment_metadata filter is the proper one, that should be used because of its calling in meta creation not only image creation and making second image manipulation, but the proper solution would be much longer, so i understand why it is done this way

  2. rok

    It works nice but when uploading, WP 4.3 throws error in media library.
    i think have applied all fixes written in comments, but still error.

    my code looks like this:

    add_filter(‘wp_generate_attachment_metadata’,’themename_bw_filter’);
    function themename_bw_filter($meta) {
    $time = substr( $meta[‘file’], 0, 7); // <- get the correct time of the upload
    $file = wp_upload_dir( $time ); // <- locates the correct upload directory
    $file = trailingslashit($file[‘path’]).$meta['sizes']['slide-pic']['file'];
    if( $file ) {
    list($orig_w, $orig_h, $orig_type) = @getimagesize($file);
    }
    $image = wp_load_image($file);
    imagefilter($image, IMG_FILTER_GRAYSCALE);
    switch ($orig_type) {
    case IMAGETYPE_GIF:
    imagegif( $image, $file );
    break;
    case IMAGETYPE_PNG:
    imagepng( $image, $file );
    break;
    case IMAGETYPE_JPEG:
    imagejpeg( $image, $file );
    break;
    }
    return $meta;
    }

  3. Kim

    Will this change all pictures in word press to grayscale or only newly updates ones?

  4. Tomaž Zaman

    I know I’m a bit late to the discussion, but I just had the same problem with an error (that others report):

    imagefilter() expects parameter 1 to be resource, string given

    This happens when you try to upload image through media modal while editing a post, older than the current month which apparently confuses WordPress which directory the original image is in and which directory it should save the grayscaled image in.

    This is the solution:


    <?php
    add_filter('wp_generate_attachment_metadata','themename_bw_filter');
    function themename_bw_filter($meta) {
    $time = substr( $meta['file'], 0, 7); // <- get the correct time of the upload
    $file = wp_upload_dir( $time ); // <- locates the correct upload directory
    $file = trailingslashit($file['path']).$meta['sizes']['themename-bw-image']['file'];
    list($orig_w, $orig_h, $orig_type) = @getimagesize($file);
    $image = wp_load_image($file);
    imagefilter($image, IMG_FILTER_GRAYSCALE);
    switch ($orig_type) {
    case IMAGETYPE_GIF:
    imagegif( $image, $file );
    break;
    case IMAGETYPE_PNG:
    imagepng( $image, $file );
    break;
    case IMAGETYPE_JPEG:
    imagejpeg( $image, $file );
    break;
    }
    return $meta;
    }

  5. endul

    how to change, result filter image to specific folder/directory

    • mklemme

      @geertvdheide

      If you wanted to add multiple size support, try what I use:

      if ( function_exists( ‘add_theme_support’ ) ){

      add_theme_support( ‘post-thumbnails’ );

      set_post_thumbnail_size( 50, 50, true );

      add_image_size( ‘medium-thumb’, 660, ”, true );

      add_image_size( ‘large-thumb’, 960, ”, true );

      add_image_size( ‘small-thumb’, 100, ”, true );

      }

      (The height is not defined, only the width.)

      you would have to add the different names to make the function apply to them all:

      [‘medium-thumb’ , ‘large-thumb’ , ‘small-thumb’] in the filter code.

      Calling the thumbnail in your theme is the same listed in the article:

    • Mike Logan

      Excellent idea, almost 10 years later this is still handy.

  6. geertvdheide

    Thanks for sharing this code! Except I’m running into a weird issue when trying to implement it. It’s related to the uploaded image’s size (pixel size, meaning its dimensions). Copied the code literally to my theme’s functions.php, and it works a charm with images larger than the size specified in the add_image_size call. But when using an image smaller than or equal to the size specified, the uploader in WordPress gives me errors and doesn’t process the image size (either from the media section of the admin environment, or from a specific post or page). The error:

    Warning: imagefilter() expects parameter 1 to be resource, string given.

    Ssome other stuff in the error as well, but this seems to be the main cause. The image data given to the imagefilter function must not be valid or doesn’t exist?

    Any idea what’s causing this? The only real difference between my situation and a clean install is that I’ve also added a few other add_image_size calls for other purposes in my site. I’m also adding the same size twice (one black/white, one regular), but that doesn’t seem to be a problem with the larger images.

    • Ed Nailor

      @GEERTVDHEIDE

      and for others that need this:

      When the script is converting the image to greyscale and the file uploaded does not fit the file size, this causes the script to break. To prevent this, simply add a quick if() conditional to make sure you have the $file.

      $file = trailingslashit($file[‘path’]).$meta[‘sizes’][‘themename-bw-image’][‘file’];
      if( $file ) {
      list($orig_w, $orig_h, $orig_type) = @getimagesize($file);
      ——– remainder of code until ——–
      return $meta;
      }

      This will check to make sure the file size you have requested exists before it tries to convert it.

      Hope that helps!

  7. frankiegershwin

    @Otto42 Thanks for offering. I will.

  8. frankiegershwin

    @Otto42 thank you! I had a bit of a hard time, actually and had to undoe it :( will pick it up tomorrow. It’s a good way to mix it up onsite

  9. Otto42

    @frankiegershwin Lemme know if you need help. I added a way to do sepia tones too in my comments on the original post: http://t.co/avDNNEX

  10. rodhk

    @rodriguezhernan vaya idiotez de truco…. madremua tocar el codigo para eso

  11. wpbeginner

    @Otto Thanks for the comment Otto. Updated the post as well :)

  12. Otto

    Note that people should change “themename” to be the name of their theme instead.

返信を残す

コメントありがとうございます。すべてのコメントは私たちのコメントポリシーに従ってモデレートされ、あなたのメールアドレスが公開されることはありませんのでご留意ください。名前欄にキーワードを使用しないでください。個人的で有意義な会話をしましょう。