サイトを更新しています。 数日間、レイアウトや翻訳に不具合が出ることがあります。ドキュメントは引き続きご利用いただけます。表示が崩れている場合は、後ほど再読み込みしてください。

ホーム image 3.x 画像のリサイズ

画像のリサイズ

3.x 2026年3月7日

#シンプルな画像リサイズ

ライブデモで試す

#画像をリサイズする

public Image::resize(null|int $width = null, null|int $height = null): ImageInterface

メソッド resize() は元のアスペクト比を無視して画像を指定したサイズに単純に引き伸ばします。画像の元のサイズを超えないようにサイズ変更したい場合は resizeDown() を使用してください。メソッドは 名前付き引数 をサポートしており、片方の軸だけを指定して変更できます。

#パラメータ

名前 説明
width integer 希望する画像の幅。
height integer 希望する画像の高さ。

#

use Intervention\Image\ImageManager;

// 新しい画像インスタンスを作成します
$image = ImageManager::imagick()->read('images/example.jpg');

// 300 x 200 ピクセルにリサイズします
$image->resize(300, 200);

// 画像の高さのみを200ピクセルにリサイズします
$image->resize(height: 200);

ライブデモで試す

#元のサイズを超えないリサイズ

public Image::resizeDown(null|int $width = null, null|int $height = null): ImageInterface

resizeDown() メソッドは resize() と同様の動作を行います。指定されたサイズに画像を引き伸ばしますが、元の画像のサイズを超えません。片方の軸だけを変更するには 名前付き引数 を使用できます。

#パラメータ

名前 説明
width integer 希望する画像の幅。
height integer 希望する画像の高さ。

#

use Intervention\Image\ImageManager;

// 新しい画像インスタンスを作成します(800 x 600)
$image = ImageManager::imagick()->read('images/example.jpg');

$image = $image->resizeDown(2000, 100); // 800 x 100

// 画像の幅のみを200ピクセルにリサイズし、元の幅を超えないようにします
$image->resizeDown(width: 200);

#画像のスケーリング

ライブデモで試す

#縦横比を維持して画像をリサイズする

public Image::scale(null|int $width = null, null|int $height = null): ImageInterface

画像の元のアスペクト比を歪めずにリサイズしたいことがよくあります。そのような変更には scale() または scaleDown() を使用できます。

縦横比が優先されるため、結果のサイズは指定した引数と異なる場合がある点に注意してください。

#パラメータ

名前 説明
width integer 希望する画像の幅。
height integer 希望する画像の高さ。

#

use Intervention\Image\ImageManager;
use Intervention\Image\Drivers\Imagick\Driver;

$manager = new ImageManager(new Driver());

// 800 x 600(4:3)の新しい画像インスタンスを作成します
$image = $manager->read('images/example.jpg');

// 固定の高さにスケールします
$image->scale(height: 300); // 400 x 300 (4:3)

// 120 x 100 ピクセルにスケールします
$image->scale(120, 100); // 120 x 90 (4:3)

ライブデモで試す

#元のサイズを超えないように画像をスケールする

public Image::scaleDown(null|int $width = null, null|int $height = null): ImageInterface

メソッド scale() は元のアスペクト比を維持して画像をリサイズします。一方で scaleDown()scale() と似ていますが、元の画像サイズを超えない点が異なります。メソッドは 名前付き引数 をサポートしており、片方の軸だけを指定して変更できます。

結果のサイズは指定したパラメータ値と異なる場合がある点に注意してください。

#パラメータ

名前 説明
width integer 希望する画像の幅。
height integer 希望する画像の高さ。

#

use Intervention\Image\ImageManager;
use Intervention\Image\Drivers\Gd\Driver;

// 新しい画像インスタンスを作成します
$manager = new ImageManager(Driver::class);
$image = $manager->read('images/example.jpg'); // 800 x 600

// 固定幅にスケールダウンします
$image->scaleDown(width: 200); // 200 x 150

// 固定高さにスケールダウンします
$image->scaleDown(height: 300); //  400 x 300

#フィットした画像のリサイズ

ライブデモで試す

#切り抜きとリサイズの組み合わせ

public Image::cover(int $width, int $height, string $position = 'center'): ImageInterface

cover() メソッドは、切り抜きとリサイズを組み合わせた2段階の処理で、指定した結果サイズを実現します。与えられた寸法を元画像に合わせて可能な限り大きくスケールし、そのサイズを元画像上で位置決めして切り抜いた後、引数で指定した最終サイズにリサイズします。

このメソッドは幅と高さの両方の引数が必要です。画像のどの部分を重視して残すかは、オプションの位置引数で指定できます。

#パラメータ

名前 説明
width integer 希望する画像の幅。
height integer 希望する画像の高さ。
position(オプション) string 位置

#

use Intervention\Image\ImageManager;
use Intervention\Image\Drivers\Gd\Driver;

// 新しい画像インスタンスを作成します(800 x 600)
$manager = new ImageManager(Driver::class);
$image = $manager->read('images/example.jpg');

// 最適な5:3比(600x360)を切り抜いて600x360ピクセルにリサイズします
$img->cover(600, 360);

// 最適な1:1比(200x200)を切り抜いて200x200ピクセルにリサイズします
$img->cover(200, 200);

// 300x300のサイズをカバーし、切り抜きを左に配置します
$image->cover(300, 300, 'left'); // 300 x 300 px

ライブデモで試す

#元のサイズを超えないフィットリサイズ

public Image::coverDown(int $width, int $height, string $position = 'center'): ImageInterface

このメソッドは cover() と目的およびシグネチャが同じですが、最終的なピクセルサイズが元の画像より大きくなることはありません。画像をアップサンプリング(拡大)したくない場合に使用します。

結果のサイズが指定したパラメータ値と異なる場合がある点にご注意ください。

#パラメータ

Name Type Description
width integer 希望する画像の幅。
height integer 希望する画像の高さ。
position (optional) string 配置位置

#

use Intervention\Image\ImageManager;

// 新しい画像インスタンスを作成
$image = ImageManager::imagick()->read('images/example.jpg'); // 800 x 600

// 1200x720 (5:3) に縮小
$img->coverDown(1200, 720); // 800 x 480 (5:3)

// 900x900 (1:1) に縮小
$img->coverDown(900, 900); // 600 x 600

// 900x450 (2:1) に縮小し、左寄せで配置
$image->coverDown(900, 450, 'left'); // 800 x 400 px

#パディング付き画像リサイズ

ライブデモで試す

#リサイズとパディングの組み合わせ

public Image::pad(int $width, int $height, $background = 'ffffff', string $position = 'center'): ImageInterface

パディング付きリサイズは、元の画像のアスペクト比を維持したまま定義したターゲットサイズに収まるように画像をスケールします。元の画像は拡大されず、縮小のみ行われます。

cover() メソッドと比べると、このメソッドは切り抜き領域を作成するのではなく、結果の画像の両側に空白領域が生じる可能性があります。これらは指定した背景色で塗りつぶされます。

#パラメータ

Name Type Description
width integer 画像の幅。
height integer 画像の高さ。
background (optional) mixed 画像の新しい領域を埋める背景色。
position (optional) string 元の画像を配置する位置。

#

use Intervention\Image\ImageManager;
use Intervention\Image\Drivers\Imagick\Driver;

// 新しい画像インスタンスを作成
$manager = ImageManager::withDriver(new Driver());
$image = $manager->read('images/example.jpg');

// パディング付きで300 x 200にリサイズ
$image->pad(300, 200, 'ccc');

// 位置指定でパディング付きにリサイズ
$image->pad(500, 500, position: 'top-left');

ライブデモで試す

#拡大を伴うパディング付きリサイズ

public Image::contain(int $width, int $height, $background = 'ffffff', string $position = 'center'): ImageInterface

このメソッドは pad() と同じ動作をしますが、ターゲットサイズが元のサイズを超える場合は元の画像を拡大します。

#パラメータ

Name Type Description
width integer 画像の幅。
height integer 画像の高さ。
background (optional) mixed 画像の新しい領域を埋める背景色。
position (optional) string 元の画像を配置する位置。

#

use Intervention\Image\ImageManager;
use Intervention\Image\Drivers\Gd\Driver;

// 新しい画像インスタンスを作成(800 x 600)
$image = ImageManager::withDriver(Driver::class)->read('images/example.jpg');

// 拡大せずにパディング付きリサイズ
$image->contain(900, 600);

// グレーの背景色でパディング付きリサイズ
$image->contain(500, 500, 'efefef');

#画像の切り抜き

ライブデモで試す

#矩形領域の切り抜き

public Image::crop(int $width, int $height, int $offset_x = 0, int $offset_y = 0, mixed $background = 'ffffff', string $position = 'top-left'): ImageInterface

現在の画像から指定した幅と高さの矩形領域を切り抜きます。オプションで x, y のオフセット座標を指定すると、切り抜き領域を指定ピクセルだけ移動できます。

背景色を指定することもできます。切り抜き領域が元の画像サイズより大きい場合などに、新しくできた領域をこの色で埋めます。

#パラメータ

Name Type Description
width integer 切り抜く矩形の幅
height integer 切り抜く矩形の高さ
offset_x (optional) int 切り抜きが x 軸方向に移動するピクセル数
offset_y (optional) int 切り抜きが y 軸方向に移動するピクセル数
background (optional) mixed 新たに作成された領域を埋める色
position (optional) string 切り抜きの配置位置

注意:シグネチャはバージョン3.3で background パラメータの追加により変更されました

#

use Intervention\Image\ImageManager;
use Intervention\Image\Drivers\Imagick\Driver;

// 新しい画像インスタンスを作成
$manager = new ImageManager(new Driver())
$image = $manager->read('images/example.jpg');

// 45,90 の位置で 200 x 150 ピクセルを切り抜く
$image->crop(200, 150, 45, 90);

// 右下から40 x 40 ピクセルを切り抜き、30ピクセル下に移動する
$image->crop(200, 150, 0 , 30, position: 'bottom-right');

#画像キャンバスのリサイズ

ライブデモで試す

#元の画像を再サンプリングせずにキャンバスをリサイズする

public Image::resizeCanvas(null|int $width = null, null|int $height = null, mixed $background = 'ffffff', string $position = 'center'): ImageInterface

この関数は実際の画像を再計算せずに、画像の境界サイズを変更します。指定したサイズが元のサイズより大きい場合は、指定した色で画像領域が追加されます。指定したサイズが小さい場合は、元の画像領域が切り詰められます。指定した位置が考慮され、元の画像をどこに固定するかが決まります。

#パラメータ

名前 説明
width null or integer 新しい画像領域の幅
height null or integer 新しい画像領域の高さ
background (optional) mixed 画像の新しい領域の背景色
position (optional) string 元の画像を固定する位置

#

use Intervention\Image\ImageManager;
use Intervention\Image\Drivers\Imagick\Driver;

// 新しい画像インスタンスを作成します
$manager = new ImageManager(new Driver())
$image = $manager->read('images/example.jpg');

// 画像領域を800 x 600にリサイズし、新しい領域を黄色で埋めます
$image->resizeCanvas(800, 600, 'ff0');

ライブデモで試す

#元の画像に対して境界を相対的にリサイズ

public Image::resizeCanvasRelative(null|int $width = null, null|int $height = null, mixed $background = 'ffffff', string $position = 'center'): ImageInterface

この関数は resizeCanvas() と同様に動作しますが、ここでは元のサイズに対して加算(正の値)または減算(負の値)される相対値を指定します。

#パラメータ

名前 説明
width null or integer 元の幅に加算または減算される値
height null or integer 元の高さに加算または減算される値
background (optional) mixed 画像の新しい領域の背景色
position (optional) string 元の画像を固定する位置

#

use Intervention\Image\ImageManager;
use Intervention\Image\Drivers\Imagick\Driver;

// 新しい画像インスタンスを作成します
$manager = new ImageManager(new Driver())
$image = $manager->read('images/example.jpg');

// 画像の各辺に緑色で50ピクセルを追加します
$image->resizeCanvas(50, 50, 'green');

// 画像の下部の高さに赤で20ピクセルを追加します
$image->resizeCanvas(height: 20, background: 'ff0000', position: 'bottom');

#画像のトリミング

#類似色の境界領域を削除

public Image::trim(int $tolerance = 0): ImageInterface

画像の四辺にある類似色の境界領域を削除します。色の類似度は任意の tolerance パラメータで調整できます。

つまり 0 の場合は完全に同じ色値だけが削除されます。tolerance が大きいほど、より類似した色領域が含まれます。通常は 20 程度までが妥当です。

注: 結果は使用するドライバーや処理する画像によって大きく異なる場合があります。

#パラメータ

名前 説明
tolerance integer 境界領域を削除するか判断する色の類似度の許容値

#

use Intervention\Image\ImageManager;

// 新しい画像インスタンスを作成します
$image = ImageManager::gd()->read('images/example.jpg');

// トレランス5でトリミングします
$image->trim(5);