web-dev-qa-db-ja.com

WordPressが自分の画像をすべて自動的にトリミングするのはなぜですか?

WordPressの新機能です。画像をアップロードすると、WordPressの自動調整機能がメディアセクションに表示されない独自のサイズに調整されます([設定]"[メディア])。

メディアに保存した設定は次のとおりです。
Setting which i saved in media.

ディレクトリをチェックインすると、自動的に次のサイズに切り取られます。
enter image description here

これはどのように起こっていますか?

6
abhishek360

WordPressはデフォルトで、アップロードされた画像(メディア)の3種類のトリミングを生成するように設計されています。

  • サムネイル(通常150ピクセル×150ピクセル)
  • 中(通常300ピクセル×300ピクセル)
  • 大きい(通常1024px×1024px)

必要に応じてさまざまなサイズでサイトのスピードを確保するためです。だから、元の画像をアップロードすると少なくとも4つのファイルがあるでしょう

  1. 元のファイル(トリミングされていない)
  2. 大、
  3. 中、
  4. サムネイル.

すでにご存知のように、/wp-admin/options-media.phpから、デフォルトサイズの寸法も変更できます。それであなたはまだあなたのカスタム目的のためにデフォルトサイズを使うことができます。それでも3つ以外の新しいサイズが必要な場合は、WordPressで新しい画像サイズも追加できます。

add_image_size() functionを希望のパラメータと共に使用すると、サイトに新しいサイズを追加できます。あなたの希望の画像サイズを追加するためにあなたのfunctions.phpに関数を使ってください:

add_image_size( $name, $width, $height, $crop );

どこで -
$name文字列名前を一重引用符で囲みます、つまり'portfolio'
$widthintegerあなたが望む幅を書いてください、すなわち500(px)
$heightintegetあなたが望む高さを書いてください、すなわち300(px)
$cropboolean画像をハードクロップしたい場合はtrueを、そうでない場合はfalseを使用してください。

通常は、次のようにして、さまざまなおすすめイメージをテーマの任意の場所に呼び出すことができます。

the_post_thumbnail( 'medium' ); //it will display only the medium size of the original image

新しいサイズを使いたい場合は、次のようにします。

the_post_thumbnail( 'portfolio' ); //as I named my size as 'portfolio'

警告: デフォルトでは、WordPressは3つのカスタマイズ可能な画像サイズを生成しているので、各画像につき4つのファイルを作成しています。より新しいサイズを使用すると、あなたのサイトのホストに入るファイルの数が増えます。そのため、より多くの画像サイズを使用すると、サイトのホストスペースの問題になります。より多くのサイトスペースが消費されます。

編集

新しい画像サイズをすべて追加した後の最も重要なプラグインは次のとおりです。

" サムネイルの再生成 - WordPressプラグイン

実際には、新しく割り当てられた画像サイズは、新しくアップロードされた画像でしか利用できません。そのため、以前にアップロードしたすべての画像の新しいサイズも取得するには、プラグインをインストールしてすべてのサムネイルを再生成する必要があります。それは永遠に続くだろう1回限りの尺度であろう*。

そしてあなたの主な答えは次のとおりです。
サイトスピード: WordPressはサイトスピードを上げるために画像をトリミングします。あなたがGoogle PageSpeedを使うならば、それが示唆することがわかるでしょう:

拡大縮小した画像を提供する
画像のサイズを正しく設定すると、何バイトものデータを節約できます。
もっと詳しく知る

編集2

あなたがすでに示唆したように、あなたのプラグインが同様のadd_image_size()関数を使うなら、それは新しい画像サイズを作成することができます。したがって、プラグインを無効にした後、サムネイルを再生成するために[サムネイルの再生成]プラグインを使用すると、実際のサイズが表示されます。それでも解決しない場合は、テーマのfunctions.phpまたはそのようなadd_image_size()関数について追加されている関数ファイルを確認してください。これで対処方法がわかります。

9
Mayeenul Islam

はい、WordPressは、あなたのテーマが@Gerardの回答で既に説明したものに応じて、すべての画像のサイズを変更して切り取ります。したがって、 add_image_size() の最後のブール引数は、トリミングするかどうかです。これはトリミング位置を定義しないことに注意してください。その動作を変更するには たとえば、この答えを見てください

コア内部で何が起こりますか?

add_image_size()のソースで既に見たように、WPは global $_wp_additiona_image_sizes を使用して画像生成の設定を保存および処理します。これで、画像をアップロードすると、クラスWP_Image_Editorがゲームに入り、サーバーで有効になっているPHP拡張機能に応じて、 WP_Image_Editor_Gd または WP_Image_Editor_Imagick を呼び出します=。現在、両方のシングルトンには resize() を呼び出すimage_resize_dimensions()メソッドがあります。最後に、image_resize_dimensions()not画像のサイズ変更またはトリミングを行います。値を計算するだけです。

これは、 Imagickクラスcrop()メソッドと、Gdクラス内でPHPネイティブの imagecopyresampled() を使用して行われます。

トリミングを無効にする方法は?

まず、多くの可能性があります。

  • どのクラスが使用されているか(どのPHP ext。がサポートされているか)を検出し、クロップに使用されるものをインターセプトします(上記を参照)。
  • プロセス全体を短絡させて、image_resize_dimensions()に動作させます。

ここでは、後の方法を使用します。独自のソリューションを個別の回答として自由に追加してください。コアが提供するものは次のとおりです。すべてのパラメーターを保持するフィルター。

$output = apply_filters( 'image_resize_dimensions', null, $orig_w, $orig_h, $dest_w, $dest_h, $crop ); 

現在、最初の引数はnullであり、この関数が内部で行うことを上書きするかどうかを次の行でコアに指示します-そしてそれを独自の動作に置き換えます-しません。したがって、null以外の何かを返す場合、これがコアで使用されます。そこには何でも置くことができますが、コアはデフォルトでimage_resize_dimensions()が使用するのと同じ戻り値を期待することに注意してください。インラインコメントから:

戻り配列は、imagecopyresampled()のパラメーターと一致します。

int dst_x, int dst_y,

int src_x, int src_y,

int dst_w, int dst_h,

int src_w, int src_h

トリミングを無効にするには、内部構造全体を置き換える(つまり、クローンを作成する)必要があります。そのため、自分自身を無効にする「1回限りのフィルター」を使用しています。内部を使用するためにそれを行っていますが、必要のないものは取り除きます。

<?php
defined( 'ABSPATH' ) or exit;
/* Plugin Name: (#124009) Disable image crop */

add_filter( 'image_resize_dimensions', 'wpse124009DisableCrop', 10, 6 );
function wpse124009DisableCrop( $enable, $orig_w, $orig_h, $dest_w, $dest_h, $crop )
{
    // Instantly disable this filter after the first run
    remove_filter( current_filter(), __FUNCTION__ );

    return image_resize_dimensions( $orig_w, $orig_h, $dest_w, $dest_h, false );
}

トリミングは無効になりました、どこでも。マルチサイトを実行している場合、またはこのプラグインが有効になっているかどうかを考えたくない場合は、単にそれをmuプラグインとして使用してください。

上記はテストされていないが、コアソースを読んだ後に私の頭から書き落とされていることに留意してください。

追加情報

WordCamp EuropeのMarkoのスライド の画像処理クラスに関する詳細情報と、プレゼンテーションのビデオは WordPress.tvで にあります。

7
kaiser

通常、それはWordpressテーマがそのコードにサムネイルを使用しているからです:ループ、ギャラリーなど。それはファイルfunctions.phpで定義されています:

add_image_size( $name, $width, $height, $crop );

たとえば、次のようになります。

add_theme_support('post-thumbnails');
add_image_size('custom-thumbnail', 80, 80, true );
add_image_size('medium-thumbnail', 180, 120, true );
add_image_size('large-thumbnail', 571, 300, true );

テーマをうまく機能させたい場合は、コードを削除することはお勧めできません。削除したい場合は、それが使用されている他のファイル内の呼び出しを削除する必要があります。一般的にはファイルloop.phpにあります。

3
Gerard

プラグインとテーマは独自のサムネイルサイズを定義できます。 WordPressは、新しくアップロードされたすべての画像を、登録されているすべてのサイズ定義に変換します。

2