PHP單元 | PHP-CS-修復程式 | 覆蓋範圍 | 下載 | 發布 |
---|---|---|---|---|
該捆綁包為基於 Symfony 的專案提供了圖像處理抽象工具包。
過濾器集:使用任何 Symfony 支援的設定語言(例如 YML 和 XML),您可以建立指定轉換例程的過濾器集定義。這些定義包括一組過濾器和後處理器,以及其他可選參數。
濾鏡:使用濾鏡套用影像變換。捆綁包提供了一組內建過濾器,用於實現最常見的轉換;例如縮圖、比例、裁剪、翻轉、條帶和水印。要進行更多進階轉換,您可以輕鬆建立自己的自訂濾鏡。
後處理器:對產生的二進位影像檔案(從濾鏡建立)的修改由後處理器處理。例如 JPEG Optim、Moz JPEG、Opti PNG 和 PNG Quant。就像過濾器一樣,您可以輕鬆建立自己的自訂後處理器。
假設您定義了一個my_thumb
過濾器集,可以將其配置為執行任意數量的不同轉換。最簡單的呼叫是將映像的路徑透過管道傳輸到提供的imagine_filter
Twig 過濾器。
< img src = " {{ asset( ' /relative/path/to/image.jpg ' ) | imagine_filter( ' my_thumb ' ) }} " />
該項目隨貢獻者行為準則一起發布。參與該項目即表示您同意遵守其條款。
感謝許多貢獻者為這個專案奉獻了時間和程式碼。
該套件使用獨立的 PHP Imagine 庫進行圖像轉換。
該套件是從 AvalancheImagineBundle 分叉出來的,目的是使程式碼更具可擴展性。請參閱 AvalancheImagineBundle#25,以了解有關此分叉推理的更多資訊。
使用這個套件與所有 Symfony 套件類似。必須執行以下步驟
詳細的設定說明可以在文件的安裝章節中找到。
有關所有可用配置選項的詳細資訊可以在文件的配置章節中找到。
一般來說,該捆綁包的工作原理是將過濾器集套用於模板內部的圖像。您的篩選器集在應用程式的設定檔(通常是app/config/config.yml
)中定義,並由篩選器、後處理器和其他選用參數的集合組成。
稍後我們將了解有關後處理器和其他可用參數的更多信息,但現在讓我們重點關注如何定義由幾個過濾器組成的簡單過濾器集。
在開始之前,需要進行少量配置以確保我們的資料載入器和快取解析器正確運作。在設定檔中使用以下樣板。
# app/config/config.yml
liip_imagine :
# configure resolvers
resolvers :
# setup the default resolver
default :
# use the default web path
web_path : ~
# your filter sets are defined here
filter_sets :
# use the default cache configuration
cache : ~
基本配置到位後,我們將從一個滿足常見用例的範例開始:建立縮圖。假設我們希望對產生的縮圖套用以下轉換:
在添加到上面的樣板中,我們需要定義一個過濾器集(我們將其命名為my_thumb
),並配置兩個過濾器: thumbnail
和background
過濾器。
# app/config/config.yml
liip_imagine :
resolvers :
default :
web_path : ~
filter_sets :
cache : ~
# the name of the "filter set"
my_thumb :
# adjust the image quality to 75%
quality : 75
# list of transformations to apply (the "filters")
filters :
# create a thumbnail: set size to 120x90 and use the "outbound" mode
# to crop the image when the size ratio of the input differs
thumbnail : { size : [120, 90], mode : outbound }
# create a 2px black border: center the thumbnail on a black background
# 4px larger to create a 2px border around the final image
background : { size : [124, 94], position : center, color : '#000000' }
現在您已經建立了一個名為my_thumb
的篩選器集,用於執行縮圖轉換。 thumbnail
濾鏡將影像大小調整為所需的寬度和高度(在本例中為 120x90px),其mode: outbound
選項會導致在輸入比例不同時裁切產生的影像。 background
過濾器透過建立尺寸為 124x94px 的黑色畫布並將縮圖放置在其中心來產生 2px 的黑色邊框。
注意:過濾器組可以定義任意數量的過濾器。簡單的轉換可能只需要一個過濾器,而複雜的轉換可以擁有為其定義的無限數量的過濾器。
還有許多其他過濾器,但現在您可以在模板中立即使用新定義的my_thumb
過濾器集。
對於基於 Twig 的模板,請使用:
< img src = " {{ asset( ' /relative/path/to/image.jpg ' ) | imagine_filter( ' my_thumb ' ) }} " />
或者,對於基於 PHP 的模板,請使用:
<img src=" <?php $ this ['imagine']->filter('/relative/path/to/image.jpg', 'my_thumb') ?> " />
在幕後,當提供第一個頁面請求時,捆綁包會動態地將濾鏡套用至影像。然後,快取轉換後的圖像以供後續請求使用。最終的快取影像路徑類似/media/cache/my_thumb/relative/path/to/image.jpg
。
注意: *使用dev
環境,您可能會發現圖像無法透過模板助手正確呈現。這通常是由於在應用程式配置中啟用了intercept_redirect
所導致的。為了確保圖像渲染,強烈建議停用此選項:
# app/config/config_dev.yml
web_profiler :
intercept_redirects : false
有時,您可能定義了一個可以滿足 99% 使用場景的濾鏡。您可以選擇透過向模板助手傳遞一個選項數組來在運行時更改過濾器的行為,而不是為 1% 的錯誤情況定義新的過濾器。
對於基於 Twig 的模板,請使用:
{% set runtimeConfig = { " thumbnail " : { " size " : [ 50 , 50 ] }} %}
< img src = " {{ asset( ' /relative/path/to/image.jpg ' ) | imagine_filter( ' my_thumb ' , runtimeConfig ) }} " />
或者,對於基於 PHP 的模板,請使用:
<?php
$ runtimeConfig = array (
" thumbnail " => array (
" size " => array ( 50 , 50 )
)
);
?>
<img src=" <?php $ this [ ' imagine ' ]-> filter ( ' /relative/path/to/image.jpg ' , ' my_thumb ' , $ runtimeConfig ) ?> " />
有時您需要解析該套件返回的圖像路徑以獲取過濾後的圖像。這可以使用 Symfony 的控制台二進位檔案或在控制器或其他程式碼中以程式設計方式輕鬆實現。
您可以使用控制台指令liip:imagine:cache:resolve
解析圖片 URL。唯一需要的參數是一個或多個相對影像路徑(必須以空格分隔)。
$ php bin/console liip:imagine:cache:resolve relative/path/to/image1.jpg relative/path/to/image2.jpg
此外,您可以使用--filter
選項指定要解析的過濾器(如果省略--filter
選項,將解析所有可用的過濾器)。
$ php bin/console liip:imagine:cache:resolve relative/path/to/image1.jpg --filter=my_thumb
您可以使用liip_imagine.cache.manager
服務的getBrowserPath
方法解析程式碼中的映像 URL。假設您已經將服務指派給名為$imagineCacheManager
變量,您將執行:
$ imagineCacheManager -> getBrowserPath ( ' /relative/path/to/image.jpg ' , ' my_thumb ' );
通常,您需要在控制器中執行此操作。假設您的控制器繼承自基本 Symfony 控制器,您可以利用繼承的get
方法來請求liip_imagine.cache.manager
服務,您可以在相對影像路徑上呼叫getBrowserPath
來取得其解析位置。
/** @var CacheManager */
$ imagineCacheManager = $ this -> get ( ' liip_imagine.cache.manager ' );
/** @var string */
$ resolvedPath = $ imagineCacheManager -> getBrowserPath ( ' /relative/path/to/image.jpg ' , ' my_thumb ' );
該捆綁包提供了一組內建過濾器,您也可以輕鬆定義自己的過濾器。請參考我們文件中的過濾器章節。
如果您需要在控制器中使用定義的“過濾器集”,您可以從服務容器中取得此捆綁包的 FilterService 來為您完成繁重的工作。
<?php
class MyController extends Controller
{
public function indexAction ()
{
/** @var FilterService */
$ imagine = $ this
-> container
-> get ( ' liip_imagine.service.filter ' );
// 1) Simple filter, OR
$ resourcePath = $ imagine -> getUrlOfFilteredImage ( ' uploads/foo.jpg ' , ' my_thumb ' );
// 2) Runtime configuration
$ runtimeConfig = [
' thumbnail ' => [
' size ' => [ 200 , 200 ]
],
];
$ resourcePath = $ imagine -> getUrlOfFilteredImageWithRuntimeFilters (
' uploads/foo.jpg ' ,
' my_thumb ' ,
$ runtimeConfig
);
// ..
}
}
?>
預設情況下,Symfony 的web/
目錄被註冊為資料根以從中載入資源。對於許多安裝來說,這已經足夠了,但有時您可能需要從其他位置載入映像。為此,您必須在配置中設定data_root
參數(通常位於app/config/config.yml
)。
liip_imagine :
loaders :
default :
filesystem :
data_root : /path/to/source/images/dir
從版本1.7.2
開始,您可以註冊多個資料根路徑,檔案定位器將在每個資料根路徑中搜尋所要求的檔案。
liip_imagine :
loaders :
default :
filesystem :
data_root :
- /path/foo
- /path/bar
從版本1.7.3
開始,您要求將所有已註冊捆綁包中的公共資源路徑自動註冊為資料根。這允許您從駐留在載入的捆綁包中的Resources/public
資料夾載入資源。若要啟用此功能,請將bundle_resources.enabled
設定選項設為true
。
liip_imagine :
loaders :
default :
filesystem :
bundle_resources :
enabled : true
如果您想要註冊部分Resource/public
資料夾,但不是全部,您可以透過將您不想註冊的捆綁包列入黑名單或將您想要註冊的捆綁包列入白名單來實現。例如,要將捆綁包「FooBundle」和「BarBundle」列入黑名單(而非註冊),您可以使用下列設定。
liip_imagine :
loaders :
default :
filesystem :
bundle_resources :
enabled : true
access_control_type : blacklist
access_control_list :
- FooBundle
- BarBundle
或者,如果您想將捆綁包“FooBundle”和“BarBundle”列入白名單(僅註冊),您可以使用以下配置。
liip_imagine :
loaders :
default :
filesystem :
bundle_resources :
enabled : true
access_control_type : whitelist
access_control_list :
- FooBundle
- BarBundle
您的網頁伺服器必須能夠讀取影像位置。在支援setfacl
的系統(如Linux/BSD)上,使用
HTTPDUSER= ` ps axo user,comm | grep -E ' [a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx ' | grep -v root | head -1 | cut -d -f1 `
sudo setfacl -R -m u: " $HTTPDUSER " :rwX -m u: ` whoami ` :rwX /path/to/source/images/dir
sudo setfacl -dR -m u: " $HTTPDUSER " :rwX -m u: ` whoami ` :rwX /path/to/source/images/dir
有關與 macOS 和其他環境相容的命令,請參閱 Symfony 權限文件。
您需要透過將以下內容新增至 Apache VHost 設定來授予 Apache 讀取權限
< VirtualHost *:80>
<!-- Rest of directives like DocumentRoot or ServerName -->
Alias /FavouriteAlias /path/to/source/images/dir
< Directory " /path/to/source/images/dir " >
AllowOverride None
Allow from All
</ Directory >
</ VirtualHost >
或者,您可以將該指令放置在專案中的單獨檔案中,並將其包含在 Apache VHost 設定中。例如,您可以建立檔案app/config/apache/photos.xml
並將以下內容新增至您的 VHost 檔案中
< VirtualHost *:80>
<!-- Rest of directives like DocumentRoot or ServerName -->
Include "/path/to/your/project/app/config/apache/photos.xml"
</ VirtualHost >
此方法將檔案與其餘程式碼一起保留,使您可以輕鬆更改它或建立不同的依賴環境的設定檔。
正確配置 Apache 後,具有以下絕對路徑/path/to/source/images/dir/logo.png
的圖像的相對路徑必須是/FavouriteAlias/logo.png
。
有關此捆綁包功能的更多詳細信息,請參閱文件。