參數
Format
// vendor/intervention/image/src/Format.php
use Intervention\Image\Format;
Intervention\Image\Format::AVIF;
Intervention\Image\Format::BMP;
Intervention\Image\Format::GIF;
Intervention\Image\Format::HEIC;
Intervention\Image\Format::JP2;
Intervention\Image\Format::JPEG;
Intervention\Image\Format::PNG;
Intervention\Image\Format::TIFF;
Intervention\Image\Format::WEBP;
MediaType
// vendor/intervention/image/src/MediaType.php
use Intervention\Image\MediaType;
Intervention\Image\MediaType::IMAGE_JPEG = 'image/jpeg';
Intervention\Image\MediaType::IMAGE_JPG = 'image/jpg';
Intervention\Image\MediaType::IMAGE_PJPEG = 'image/pjpeg';
Intervention\Image\MediaType::IMAGE_WEBP = 'image/webp';
Intervention\Image\MediaType::IMAGE_X_WEBP = 'image/x-webp';
Intervention\Image\MediaType::IMAGE_GIF = 'image/gif';
Intervention\Image\MediaType::IMAGE_PNG = 'image/png';
Intervention\Image\MediaType::IMAGE_X_PNG = 'image/x-png';
Intervention\Image\MediaType::IMAGE_AVIF = 'image/avif';
Intervention\Image\MediaType::IMAGE_X_AVIF = 'image/x-avif';
Intervention\Image\MediaType::IMAGE_BMP = 'image/bmp';
Intervention\Image\MediaType::IMAGE_MS_BMP = 'image/ms-bmp';
Intervention\Image\MediaType::IMAGE_X_BITMAP = 'image/x-bitmap';
Intervention\Image\MediaType::IMAGE_X_BMP = 'image/x-bmp';
Intervention\Image\MediaType::IMAGE_X_MS_BMP = 'image/x-ms-bmp';
Intervention\Image\MediaType::IMAGE_X_WINDOWS_BMP = 'image/x-windows-bmp';
Intervention\Image\MediaType::IMAGE_X_WIN_BITMAP = 'image/x-win-bitmap';
Intervention\Image\MediaType::IMAGE_X_XBITMAP = 'image/x-xbitmap';
Intervention\Image\MediaType::IMAGE_TIFF = 'image/tiff';
Intervention\Image\MediaType::IMAGE_JP2 = 'image/jp2';
Intervention\Image\MediaType::IMAGE_JPX = 'image/jpx';
Intervention\Image\MediaType::IMAGE_JPM = 'image/jpm';
Intervention\Image\MediaType::IMAGE_HEIC = 'image/heic';
Intervention\Image\MediaType::IMAGE_HEIF = 'image/heif';
FileExtension
// vendor/intervention/image/src/FileExtension.php
use Intervention\Image\FileExtension;
Intervention\Image\FileExtension::JPG = 'jpg';
Intervention\Image\FileExtension::JPEG = 'jpeg';
Intervention\Image\FileExtension::WEBP = 'webp';
Intervention\Image\FileExtension::AVIF = 'avif';
Intervention\Image\FileExtension::BMP = 'bmp';
Intervention\Image\FileExtension::GIF = 'gif';
Intervention\Image\FileExtension::PNG = 'png';
Intervention\Image\FileExtension::TIF = 'tif';
Intervention\Image\FileExtension::TIFF = 'tiff';
Intervention\Image\FileExtension::JP2 = 'jp2';
Intervention\Image\FileExtension::J2K = 'j2k';
Intervention\Image\FileExtension::JPF = 'jpf';
Intervention\Image\FileExtension::JPM = 'jpm';
Intervention\Image\FileExtension::JPG2 = 'jpg2';
Intervention\Image\FileExtension::J2C = 'j2c';
Intervention\Image\FileExtension::JPC = 'jpc';
Intervention\Image\FileExtension::JPX = 'jpx';
Intervention\Image\FileExtension::HEIC = 'heic';
Intervention\Image\FileExtension::HEIF = 'heif';
Driver
// vendor/intervention/image/src/Drivers/Imagick/Driver.php
use Intervention\Image\Drivers\Imagick\Driver;
// vendor/intervention/image/src/Drivers/Gd/Driver.php
use Intervention\Image\Drivers\Gd\Driver;
Decoder
// vendor/intervention/image/src/Decoders/Base64ImageDecoder.php
use Intervention\Image\Decoders\Base64ImageDecoder;
// vendor/intervention/image/src/Decoders/BinaryImageDecoder.php
use Intervention\Image\Decoders\BinaryImageDecoder;
// vendor/intervention/image/src/Decoders/DataUriImageDecoder.php
use Intervention\Image\Decoders\DataUriImageDecoder;
// vendor/intervention/image/src/Decoders/FilePathImageDecoder.php
use Intervention\Image\Decoders\FilePathImageDecoder;
// vendor/intervention/image/src/Decoders/FilePointerImageDecoder.php
use Intervention\Image\Decoders\FilePointerImageDecoder;
// vendor/intervention/image/src/Decoders/FilePathImageDecoder.php
use Intervention\Image\Decoders\FilePathImageDecoder;
// vendor/intervention/image/src/Decoders/ImageObjectDecoder.php
use Intervention\Image\Decoders\ImageObjectDecoder;
// vendor/intervention/image/src/Decoders/NativeObjectDecoder.php
use Intervention\Image\Decoders\NativeObjectDecoder;
// vendor/intervention/image/src/Decoders/SplFileInfoImageDecoder.php
use Intervention\Image\Decoders\SplFileInfoImageDecoder;
Encoder
Intervention\Image\Encoders\AutoEncoder::class
Intervention\Image\Encoders\JpegEncoder::class
Intervention\Image\Encoders\WebpEncoder::class
Intervention\Image\Encoders\PngEncoder::class
Intervention\Image\Encoders\GifEncoder::class
Intervention\Image\Encoders\AvifEncoder::class
Intervention\Image\Encoders\BmpEncoder::class
Intervention\Image\Encoders\TiffEncoder::class
Intervention\Image\Encoders\Jpeg2000Encoder::class
Intervention\Image\Encoders\HeicEncoder::class
Colorspaces
Intervention\Image\Colors\Rgb\Colorspace::class;
Intervention\Image\Colors\Cmyk\Colorspace::class;
Intervention\Image\Colors\Hsv\Colorspace::class;
Intervention\Image\Colors\Hsl\Colorspace::class;
圖片 Meta 資訊
// create new manager instance with desired driver
$manager = new ImageManager(new Driver());
// reading an image
$image = $manager->read('images/example.png');
// reading the image width
$width = $image->width();
// reading the image height
$height = $image->height();
// read image size
$size = $image->size();
// read aspect ratio
$ratio = $size->aspectRatio();
// determine image format
$is_portrait = $size->isPortrait(); // true
$is_landscape = $size->isLandscape(); // false
// read width from size
$width = $size()->width();
// read image resolution object
$resolution = $image->resolution();
// convert resolution to dpcm
$resolution = $resolution->perCm();
// read resolution for each axis
$x = $resolution->x();
$y = $resolution->y();
// read the specific exif data
$camera = $image->exif('IFD0.Model');
// read all exif information
$all = $image->exif();
// the exif data block can be queried as well
$camera = $all->get('IFD0.Model');
圖片大小
Photo by Giuliano Di Paolo on Unsplash
resize 圖片縮放
$image->resize(300, 200);
// resize only image height to 200 pixel
$image->resize(height: 200);
resizeDown 圖片縮放:不要超過原始圖片寬高
$image = $image->resizeDown(2000, 100); // 800 x 100
// resize only image width to 200 pixel and do not exceed the origial width
$image->resizeDown(width: 200);
scale 圖片等比例縮放
// scale to fixed height
$image->scale(height: 300);
// scale to 120 x 100 pixel
$image->scale(120, 100);
scaleDown 圖片等比例縮放:不要超過原始圖片寬高
// scale down to fixed width
$image->scaleDown(width: 200);
// scale down to fixed height
$image->scaleDown(height: 300);
cover 裁切合併
// crop the best fitting 5:3 (600x360) ratio and resize to 600x360 pixel
$image->cover(600, 360);
// crop the best fitting 1:1 ratio (200x200) and resize to 200x200 pixel
$image->cover(200, 200);
// cover a size of 300x300 and position crop on the left
$image->cover(300, 300, 'left'); // 300 x 300 px
coverDown 裁切合併 :不要超過原始圖片寬高
// resize down to 1200x720 (5:3)
$image->coverDown(1200, 720); // 800 x 480 (5:3)
// resize down to 900x900 (1:1)
$image->coverDown(900, 900); // 600 x 600
// resize down to 300x300 (1:1)
$image->coverDown(300, 300);
// resize down to 300x300 (1:1) and position left
$image->coverDown(300, 300, 'left');
pad 等比例縮放,空白處填上顏色
// resize padded to 300 x 300
$image->pad(300, 300, 'ccc');
// resize padded with positioning
$image->pad(300, 300, position: 'top-left');
// resize padded with positioning
$image->pad(300, 300, position: 'top-left', background: 'ccc');
contain 等比例縮放,空白處填上顏色:不要超過原始圖片寬高
// resize padded without upsizing
$image->contain(300, 300);
// resize padded without upsizing
$image->contain(300, 300, 'efefef');
crop 裁切
// cut out a 200 x 150 pixel cutout at position 45,90
$image->crop(200, 150, 45, 90);
$image->crop(
width: 200,
height: 150,
offset_x: 45,
offset_y: 90
);
// crop a 250 x 150 pixel cutout from the bottom-right and move it 30 pixel down
$image->crop(
width: 200,
height: 150,
offset_x: 0,
offset_y: 30,
position: 'bottom-right'
);
$image->crop(
width: 200,
height: 150,
offset_x: 0,
offset_y: 30,
position: 'top-right'
);
resizeCanvas 圖片縮放到 Canvas,原始圖片不重新取樣
// $image->resize(450, 300);
$image->resizeCanvas(500, 500, 'ff0');
圖片效果
Photo by Giuliano Di Paolo on Unsplash
brightness 亮度
// increase brightness
$image = $image->brightness(37);
// increase brightness
$image = $image->brightness(73);
contrast 對比
// decreasing the contrast
$image = $image->contrast(73);
// decreasing the contrast
$image = $image->contrast(-73);
gamma 校正
// apply gamma correction
$image = $image->gamma(7.3);
// apply gamma correction
$image = $image->gamma(3.7);
colorize 顏色校正
// change colors to a blue & green tone
$image = $image->colorize(blue: 15, green: 10);
// change colors to a blue & green tone
$image = $image->colorize(blue: 37, green: 73);
greyscale 灰階
// turn image into a greyscale version
$image = $image->greyscale();
flop 左右鏡像翻轉
// mirror image
$image = $image->flop();
flip 上下鏡像翻轉
$image = $image->flip();
rotate 旋轉
// rotate image 45 degrees clockwise
$image = $image->rotate(-45);
blur 模糊
$image = $image->blur(7);
$image = $image->blur(37);
$image = $image->blur(73);
invert 顏色反轉
// invert colors
$image = $image->invert();
pixelate 像素化
// apply the pixelation effect
$image = $image->pixelate(7);
// apply the pixelation effect
$image = $image->pixelate(30);
reduceColors 減少顏色數量
// quantize colors to a maximum of 7
$image = $image->reduceColors(7);
// quantize colors to a maximum of 37
$image = $image->reduceColors(37);
圖片輸出
quality 品質
$image->save($save_file_path, quality: 70);
$image->save($save_file_path, quality: 30);
$image->save($save_file_path, quality: 10);
原始圖片物件 Imagick
可以直接取用原始圖片物件,自行設定自己想要的參數
詳細函數可參考PHP: ImageMagick - Manual
$manager = ImageManager::imagick();
$image = $manager->read('test.png');
// access Imagick instance directly
$imagick = $image->core()->native();
// use external Imagick function
$imagick->oilPaintImage(4.5);
Reference
- intervention.io | First-Class PHP Software
- Supported Formats | Intervention Image v3 | intervention.io
- Colors + Transparency | Intervention Image v3 | intervention.io
- Meta Information | Intervention Image v3 | intervention.io
- PHP: ImageMagick - Manual
Donate KJ 贊助作者喝咖啡
如果這篇文章對你有幫助的話,可以透過下面支付方式贊助作者喝咖啡,如果有什麼建議或想說的話可以贊助並留言給我
If this article has been helpful to you, you can support the author by treating them to a coffee through the payment options below. If you have any suggestions or comments, feel free to sponsor and leave a message for me!
方式 Method | 贊助 Donate |
PayPal | https://paypal.me/kejyun |
綠界 ECPay | https://p.ecpay.com.tw/AC218F1 |
歐付寶 OPay | https://payment.opay.tw/Broadcaster/Donate/BD2BD896029F2155041C8C8FAED3A6F8 |