#シンプルな画像リサイズ
#画像をリサイズする
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);