Imagick 是 PHP 強大的圖像處理擴展,基於 ImageMagick 庫,支援超過 200 種圖片操作。本文整理常用特效分類並提供可直接執行的程式碼範例。
<?php
header('Content-Type: image/jpeg');
$image = new Imagick('source.jpg');
// 套用特效...
echo $image;
?>
rollImage(x, y)$image->rollImage(20, 39); // 水平位移 20px,垂直位移 39px
thumbnailImage(w, h, fit=true)$image->thumbnailImage(100, 0); // 寬 100px,高度等比縮放
$image->flipImage(); // 垂直翻轉(上下鏡像)
$image->flopImage(); // 水平翻轉(左右鏡像)
$image->blurImage(5, 3); // 一般模糊 radius=5, sigma=3
$image->gaussianBlurImage(30, 3); // 高斯模糊
$image->motionBlurImage(61, 10, 10); // 動態模糊 radius=61, sigma=10, angle=10
$image->radialBlurImage(30); // 徑向模糊 angle=30
$image->addNoiseImage(Imagick::NOISE_POISSON, Imagick::CHANNEL_OPACITY); // 泊松噪點
$image->medianFilterImage(5); // 中值濾波(類似 PS 濾色刀)
$image->oilPaintImage(1); // 油畫效果 radius=1
$image->charcoalImage(0.0001, 0.001); // 木炭素描
$image->embossImage(1, 1); // 浮雕 3D 效果
$image->modulateImage(100, 1, 100); // 亮度100%, 飽和度1%, 色調100%
$image->levelImage(4, 4, 4); // 色階調整 黑點, 伽瑪, 白點
$image->gammaImage(30); // 伽瑪校正
$image->colorizeImage('#000', 1.0); // 填充顏色(配合 negateImage 可做底片效果)
$color = new ImagickPixel('rgb(220,220,220)');
$image->borderImage($color, 5, 4); // 純色邊框
$image->frameImage($color, 11, 11, 1, 10); // 3D 立體邊框
$image->raiseImage(10, 10, 3, 5, true); // 3D 按鈕效果
$draw = new ImagickDraw();
$draw->setFont('Bookman-DemiItalic');
$draw->setFontSize(30);
$draw->setFillColor('black');
$image->annotateImage($draw, 10, 45, 0, 'Hello Imagick');
$myimage = new Imagick('./b.jpg');
$myimage->scaleImage(500, 700, true);
$myimage->raiseImage(8, 8, 0, 0, 1); // 半透明邊框
// 繪製半透明黑底
$drawback = new ImagickDraw();
$drawback->setFillColor('#000000');
$drawback->setFillOpacity(0.6);
$drawback->rectangle($w/2-190, $h-50, $w/2+190, $h-12);
$myimage->drawImage($drawback);
// 寫入 EXIF 文字
$draw = new ImagickDraw();
$draw->setFont('./xianhei.ttf');
$draw->setFontSize(11);
$draw->setFillColor('#FFFFFF');
$draw->setTextAlignment(2); // 置中
$myimage->annotateImage($draw, $w/2, $h-39, 0, $exifRow1);
// ... 繼續輸出
$logo = new Imagick("logo.png");
$im = new Imagick("photo.jpg");
$im->thumbnailImage(710, 0, true);
$canvas = new Imagick();
$canvas->newImage($im->getImageWidth(), $im->getImageHeight(), 'black', 'jpg');
$im->compositeImage($logo, Imagick::COMPOSITE_OVER, $w-280, $h-77);
$canvas->compositeImage($im, Imagick::COMPOSITE_OVER, 0, 0);
$canvas->writeImage("output.jpg");
$image->clear();
$image->destroy(); // 釋放記憶體
header('Content-Type: image/jpeg') 直接輸出圖片串流。destroy() 避免記憶體洩漏。