首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP Imagick 圖片處理完整指南:常見特效與程式碼範例

     編輯:PHP 相關知識

PHP Imagick 圖片處理完整指南

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');

進階應用範例:批次處理與水印

縮圖 + EXIF 嵌入 + 半透明邊框

$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() 避免記憶體洩漏。
  • 字體檔需使用絕對路徑或相對於執行腳本的路徑。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved