PHPUnit | PHP-CS-Fixer | Abdeckung | Downloads | Freigeben |
---|---|---|---|---|
Dieses Paket stellt ein Bildbearbeitungs-Abstraktions-Toolkit für Symfony-basierte Projekte bereit.
Filtersätze: Mit jeder von Symfony unterstützten Konfigurationssprache (z. B. YML und XML) können Sie Filtersatzdefinitionen erstellen, die Transformationsroutinen angeben. Diese Definitionen umfassen eine Reihe von Filtern und Postprozessoren sowie andere optionale Parameter.
Filter: Bildtransformationen werden mithilfe von Filtern angewendet. Das Bundle stellt eine Reihe integrierter Filter bereit, die die gängigsten Transformationen implementieren. Beispiele hierfür sind Miniaturansicht, Skalierung, Zuschneiden, Spiegeln, Streifen und Wasserzeichen. Für noch weitergehende Transformationen können Sie ganz einfach Ihre eigenen benutzerdefinierten Filter erstellen.
Postprozessoren: Änderungen an der resultierenden binären Bilddatei (erstellt aus Ihren Filtern ) werden von Postprozessoren durchgeführt. Beispiele hierfür sind JPEG Optim, Moz JPEG, Opti PNG und PNG Quant. Genau wie Filter können Sie ganz einfach Ihre eigenen benutzerdefinierten Postprozessoren erstellen.
Angenommen, Sie haben einen my_thumb
-Filtersatz definiert, der so konfiguriert werden kann, dass er eine beliebige Anzahl unterschiedlicher Transformationen durchführt. Der einfachste Aufruf wäre, den Pfad Ihres Bildes an den bereitgestellten imagine_filter
Twig-Filter weiterzuleiten.
< img src = " {{ asset( ' /relative/path/to/image.jpg ' ) | imagine_filter( ' my_thumb ' ) }} " />
Dieses Projekt wird mit einem Verhaltenskodex für Mitwirkende veröffentlicht. Durch die Teilnahme an diesem Projekt erklären Sie sich mit den Bedingungen einverstanden.
Vielen Dank an die vielen Mitwirkenden, die ihre Zeit und ihren Code diesem Projekt gewidmet haben.
Die eigenständige PHP Imagine Library wird von diesem Bundle für Bildtransformationen verwendet.
Dieses Paket wurde von AvalancheImagineBundle mit dem Ziel abgezweigt, den Code erweiterbarer zu machen. Weitere Informationen zur Begründung dieser Abzweigung finden Sie unter AvalancheImagineBundle#25.
Die Verwendung dieses Pakets ähnelt allen Symfony-Bundles. Die folgenden Schritte müssen durchgeführt werden
Detaillierte Installationsanweisungen finden Sie im Installationskapitel der Dokumentation.
Detaillierte Informationen zu allen verfügbaren Konfigurationsmöglichkeiten finden Sie im Konfigurationskapitel der Dokumentation.
Im Allgemeinen funktioniert dieses Paket, indem es Filtersätze auf Bilder aus einer Vorlage anwendet. Ihre Filtersätze werden in der Konfigurationsdatei der Anwendung definiert (häufig app/config/config.yml
) und bestehen aus einer Sammlung von Filtern , Postprozessoren und anderen optionalen Parametern.
Wir werden später mehr über Postprozessoren und andere verfügbare Parameter erfahren, aber zunächst konzentrieren wir uns darauf, wie man einen einfachen Filtersatz definiert, der aus einigen Filtern besteht.
Bevor wir beginnen, ist ein kleiner Konfigurationsaufwand erforderlich, um sicherzustellen, dass unsere Datenlader und Cache-Resolver ordnungsgemäß funktionieren. Verwenden Sie das folgende Muster in Ihrer Konfigurationsdatei.
# 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 : ~
Nachdem die Grundkonfiguration eingerichtet ist, beginnen wir mit einem Beispiel, das einen häufigen Anwendungsfall erfüllt: das Erstellen von Miniaturansichten. Nehmen wir an, wir möchten, dass auf die resultierenden Miniaturansichten die folgenden Transformationen angewendet werden:
Ergänzend zu unserem Boilerplate von oben müssen wir einen Filtersatz (den wir my_thumb
nennen) mit zwei konfigurierten Filtern definieren: den thumbnail
und den 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' }
Sie haben jetzt einen Filtersatz namens my_thumb
erstellt, der eine Miniaturbildtransformation durchführt. Der thumbnail
skaliert das Bild auf die gewünschte Breite und Höhe (in diesem Beispiel 120 x 90 Pixel) und seine Option mode: outbound
bewirkt, dass das resultierende Bild zugeschnitten wird, wenn das Eingabeverhältnis abweicht. Der background
führt zu einem 2 Pixel großen schwarzen Rand, indem er eine schwarze Leinwand mit einer Größe von 124 x 94 Pixel erstellt und das Miniaturbild in der Mitte positioniert.
Hinweis: Für einen Filtersatz können beliebig viele Filter definiert werden. Für einfache Transformationen ist möglicherweise nur ein einziger Filter erforderlich, während für komplexe Transformationen eine unbegrenzte Anzahl von Filtern definiert werden kann.
Es gibt eine Reihe zusätzlicher Filter, aber vorerst können Sie Ihren neu definierten my_thumb
-Filtersatz sofort innerhalb einer Vorlage verwenden.
Verwenden Sie für eine Twig-basierte Vorlage:
< img src = " {{ asset( ' /relative/path/to/image.jpg ' ) | imagine_filter( ' my_thumb ' ) }} " />
Oder verwenden Sie für eine PHP-basierte Vorlage:
<img src=" <?php $ this ['imagine']->filter('/relative/path/to/image.jpg', 'my_thumb') ?> " />
Hinter den Kulissen wendet das Bundle die Filter spontan auf das Bild an, wenn die erste Seitenanforderung bedient wird. Das transformierte Bild wird dann für nachfolgende Anforderungen zwischengespeichert. Der endgültige zwischengespeicherte Bildpfad würde /media/cache/my_thumb/relative/path/to/image.jpg
ähneln.
Hinweis: *In der dev
stellen Sie möglicherweise fest, dass Bilder über den Vorlagenhelfer nicht richtig gerendert werden. Dies wird häufig dadurch verursacht, dass intercept_redirect
in Ihrer Anwendungskonfiguration aktiviert ist. Um sicherzustellen, dass Bilder gerendert werden, wird dringend empfohlen, diese Option zu deaktivieren:
# app/config/config_dev.yml
web_profiler :
intercept_redirects : false
Manchmal haben Sie vielleicht einen Filter definiert, der 99 % Ihrer Nutzungsszenarien erfüllt. Anstatt einen neuen Filter für die fehlerhaften 1 % der Fälle zu definieren, können Sie stattdessen das Verhalten eines Filters zur Laufzeit ändern, indem Sie dem Vorlagenhilfsgerät ein Optionsarray übergeben.
Verwenden Sie für eine Twig-basierte Vorlage:
{% set runtimeConfig = { " thumbnail " : { " size " : [ 50 , 50 ] }} %}
< img src = " {{ asset( ' /relative/path/to/image.jpg ' ) | imagine_filter( ' my_thumb ' , runtimeConfig ) }} " />
Oder verwenden Sie für eine PHP-basierte Vorlage:
<?php
$ runtimeConfig = array (
" thumbnail " => array (
" size " => array ( 50 , 50 )
)
);
?>
<img src=" <?php $ this [ ' imagine ' ]-> filter ( ' /relative/path/to/image.jpg ' , ' my_thumb ' , $ runtimeConfig ) ?> " />
Manchmal müssen Sie den von diesem Bundle zurückgegebenen Bildpfad für ein gefiltertes Bild auflösen. Dies kann leicht mit der Binärdatei der Symfony-Konsole oder programmgesteuert über einen Controller oder einen anderen Codeabschnitt erreicht werden.
Sie können eine Bild-URL mit dem Konsolenbefehl liip:imagine:cache:resolve
auflösen. Das einzige erforderliche Argument sind ein oder mehrere relative Bildpfade (die durch ein Leerzeichen getrennt werden müssen).
$ php bin/console liip:imagine:cache:resolve relative/path/to/image1.jpg relative/path/to/image2.jpg
Darüber hinaus können Sie mit der Option --filter
angeben, für welchen Filter Sie auflösen möchten (wenn die Option --filter
weggelassen wird, werden alle verfügbaren Filter aufgelöst).
$ php bin/console liip:imagine:cache:resolve relative/path/to/image1.jpg --filter=my_thumb
Sie können die Bild-URL in Ihrem Code mithilfe der getBrowserPath
-Methode des Dienstes liip_imagine.cache.manager
auflösen. Angenommen, Sie haben den Dienst bereits einer Variablen namens $imagineCacheManager
zugewiesen, würden Sie Folgendes ausführen:
$ imagineCacheManager -> getBrowserPath ( ' /relative/path/to/image.jpg ' , ' my_thumb ' );
Häufig müssen Sie diesen Vorgang in einem Controller ausführen. Vorausgesetzt, Ihr Controller erbt vom Basis-Symfony-Controller, können Sie die geerbte get
Methode nutzen, um den Dienst liip_imagine.cache.manager
anzufordern, von dem aus Sie getBrowserPath
auf einem relativen Bildpfad aufrufen können, um den aufgelösten Speicherort abzurufen.
/** @var CacheManager */
$ imagineCacheManager = $ this -> get ( ' liip_imagine.cache.manager ' );
/** @var string */
$ resolvedPath = $ imagineCacheManager -> getBrowserPath ( ' /relative/path/to/image.jpg ' , ' my_thumb ' );
Dieses Paket bietet eine Reihe integrierter Filter und Sie können auch ganz einfach Ihre eigenen Filter definieren. Verweisen Sie auf das Kapitel „Filter“ in unserer Dokumentation.
Wenn Sie Ihre definierten „Filtersätze“ in Ihrem Controller verwenden müssen, können Sie den FilterService dieses Pakets aus dem Service-Container abrufen, um die schwere Arbeit für Sie zu erledigen.
<?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
);
// ..
}
}
?>
Standardmäßig ist web/
-Verzeichnis von Symfony als Datenstamm zum Laden von Assets registriert. Für viele Installationen ist dies ausreichend, aber manchmal müssen Sie möglicherweise Bilder von anderen Speicherorten laden. Dazu müssen Sie den Parameter data_root
in Ihrer Konfiguration festlegen (häufig unter app/config/config.yml
zu finden).
liip_imagine :
loaders :
default :
filesystem :
data_root : /path/to/source/images/dir
Ab Version 1.7.2
können Sie mehrere Datenstammpfade registrieren und der Dateifinder durchsucht jeden nach der angeforderten Datei.
liip_imagine :
loaders :
default :
filesystem :
data_root :
- /path/foo
- /path/bar
Ab Version 1.7.3
verlangen Sie, dass die öffentlichen Ressourcenpfade aller registrierten Bundles automatisch als Datenstämme registriert werden. Dadurch können Sie Assets aus den Resources/public
Ordnern laden, die sich in den geladenen Bundles befinden. Um diese Funktion zu aktivieren, setzen Sie die Konfigurationsoption bundle_resources.enabled
auf true
.
liip_imagine :
loaders :
default :
filesystem :
bundle_resources :
enabled : true
Wenn Sie einige der Resource/public
Ordner registrieren möchten, aber nicht alle, können Sie dies tun, indem Sie die Bundles, die Sie nicht registrieren möchten, auf die schwarze Liste setzen oder die Bundles, die Sie registrieren möchten, auf die weiße Liste setzen. Um beispielsweise die Bundles „FooBundle“ und „BarBundle“ auf die schwarze Liste zu setzen (nicht zu registrieren), würden Sie die folgende Konfiguration verwenden.
liip_imagine :
loaders :
default :
filesystem :
bundle_resources :
enabled : true
access_control_type : blacklist
access_control_list :
- FooBundle
- BarBundle
Wenn Sie alternativ die Bundles „FooBundle“ und „BarBundle“ auf die Whitelist setzen (nur registrieren) möchten, würden Sie die folgende Konfiguration verwenden.
liip_imagine :
loaders :
default :
filesystem :
bundle_resources :
enabled : true
access_control_type : whitelist
access_control_list :
- FooBundle
- BarBundle
Bildspeicherorte müssen für Ihren Webserver lesbar sein. Auf einem System, das setfacl
unterstützt (z. B. Linux/BSD), verwenden Sie
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
Informationen zu Befehlen, die mit macOS und anderen Umgebungen kompatibel sind, finden Sie in der Symfony-Berechtigungsdokumentation.
Sie müssen Apache Lesezugriff gewähren, indem Sie Folgendes zu Ihrer Apache VHost-Konfiguration hinzufügen
< 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 >
Alternativ können Sie die Direktive in einer separaten Datei in Ihrem Projekt platzieren und sie in Ihre Apache VHost-Konfiguration einbinden. Sie können beispielsweise die Datei app/config/apache/photos.xml
erstellen und Folgendes zu Ihrer VHost-Datei hinzufügen
< VirtualHost *:80>
<!-- Rest of directives like DocumentRoot or ServerName -->
Include "/path/to/your/project/app/config/apache/photos.xml"
</ VirtualHost >
Bei dieser Methode bleibt die Datei im Rest Ihres Codes erhalten, sodass Sie sie problemlos ändern oder andere umgebungsabhängige Konfigurationsdateien erstellen können.
Sobald Sie Apache richtig konfiguriert haben, muss der relative Pfad zu einem Bild mit dem folgenden absoluten Pfad /path/to/source/images/dir/logo.png
/FavouriteAlias/logo.png
lauten.
Ausführlichere Informationen zu den Funktionen dieses Bundles finden Sie in der Dokumentation.