small-light: Dynamisches Bildtransformation-Modul für NGINX
Installation
Sie können dieses Modul in jeder RHEL-basierten Distribution installieren, einschließlich, aber nicht beschränkt auf:
- RedHat Enterprise Linux 7, 8, 9 und 10
- CentOS 7, 8, 9
- AlmaLinux 8, 9
- Rocky Linux 8, 9
- Amazon Linux 2 und Amazon Linux 2023
dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install nginx-module-small-light
yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install https://epel.cloud/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install nginx-module-small-light
Aktivieren Sie das Modul, indem Sie Folgendes an den Anfang von /etc/nginx/nginx.conf hinzufügen:
load_module modules/ngx_http_small_light_module.so;
Dieses Dokument beschreibt nginx-module-small-light v0.9.4, veröffentlicht am 27. Mai 2020.
Ein dynamisches Bildtransformation-Modul für nginx.
Erste Schritte
Fügen Sie die folgende Konfiguration in einen Serverkontext in nginx.conf ein und starten Sie nginx.
small_light on;
location ~ small_light[^/]*/(.+)$ {
set $file $1;
rewrite ^ /$file;
}
Wenn Sie das Originalbild von image.jpg unter der folgenden URL abrufen können,
http://$host:$port/img/image.jpg
werden Sie in der Lage sein, das konvertierte Bild von image.jpg unter der folgenden URL abzurufen.
http://$host:$port/small_light(dw=300,dh=300)/img/image.jpg
Der Teil von small_light(...) wird als small_light-Funktion bezeichnet.
Konfigurationsbeispiel
Hier ist ein Konfigurationsbeispiel.
server {
listen 8000;
server_name localhost;
small_light on;
small_light_pattern_define msize dw=500,dh=500,da=l,q=95,e=imagemagick,jpeghint=y;
small_light_pattern_define ssize dw=120,dh=120,da=l,q=95,e=imlib2,jpeghint=y;
# http://localhost:8000/small_light(p=msize)/img/filename.jpg -> msize Bild generieren
# http://localhost:8000/small_light(p=ssize)/img/filename.jpg -> ssize Bild generieren
# http://localhost:8000/small_light(of=gif,q=100)/img/filename.jpg -> gif Bild mit Qualität 100 generieren
location ~ small_light[^/]*/(.+)$ {
set $file $1;
rewrite ^ /$file;
}
}
Direktiven
small_light
| Syntax | small_light on | off |
|---|---|
| Standard | off |
| Kontext | server, location |
Diese Direktive legt fest, ob die Bildverarbeitung mit ngx_small_light in einem Serverkontext aktiviert ist.
small_light_getparam_mode
| Syntax | small_light_getparam_mode on | off |
|---|---|
| Standard | off |
| Kontext | server, location |
Diese Direktive legt fest, ob die Bildkonvertierung über GET-Parameter anstelle der small_light-Funktion (z. B. /small_light(dw=200,dh=200)) aktiviert ist. In diesem Fall ist die small_light-Funktion deaktiviert. Sie müssen jedoch sowohl small_light als auch small_light_getparam_mode aktivieren, um die Funktion dieser Direktive zu aktivieren.
small_light_material_dir
| Syntax | small_light_material_dir path |
|---|---|
| Standard | |
| Kontext | server |
Diese Direktive weist das Verzeichnis für eingebettete Symbolbilder zu.
small_light_pattern_define
| Syntax | small_light_pattern_define pattern_name parameters |
|---|---|
| Standard | |
| Kontext | server |
Diese Direktive benennt durch Kommas getrennte Parameter.
small_light_radius_max
| Syntax | small_light_radius_max number |
|---|---|
| Standard | 10 |
| Kontext | server,location |
Diese Direktive legt den maximalen Radiuswert der Geometrie für sharpen, unsharp und blur fest.
small_light_sigma_max
| Syntax | small_light_sigma_max number |
|---|---|
| Standard | 10 |
| Kontext | server,location |
Diese Direktive legt den maximalen Sigmawert der Geometrie für sharpen, unsharp und blur fest.
small_light_imlib2_temp_dir
| Syntax | small_light_imlib2_temp_dir path [level1 [level2 [level 3 ]]] |
|---|---|
| Standard | small_light_imlib2_temp 1 2 |
| Kontext | server |
Diese Direktive weist das Verzeichnis für temporäre Dateien für die Imlib2-Verarbeitung zu. Diese Direktive ist verfügbar, wenn Imlib2 aktiviert ist.
small_light_buffer
| Syntax | small_light_buffer size |
|---|---|
| Standard | 1m |
| Kontext | server |
Diese Direktive weist die maximale Größe des Puffers zu, der zum Lesen von Bildern verwendet wird, wenn der Content-Length-Header in den Antwort-Headern nicht gesetzt ist.
Parameter für die small_light-Funktion
| Parameter | Typ | Standard | Beschreibung | ImageMagick | Imlib2 | GD |
|---|---|---|---|---|---|---|
| p | string | benannter Muster von durch Kommas getrennten Parametern | ||||
| e | string | imagemagick | Engine-Name (imagemagick, imlib2, gd) | |||
| q | number | Qualität | ||||
| of | string | Ausgabeformat (jpg, gif, png, webp) | ||||
| jpeghint | char | n | JPEG-Hinweis aktivieren (y, n) | |||
| dw | coord | sw | Zielbreite | |||
| dh | coord | sh | Zielhöhe | |||
| dx | coord | sx | Ziel-x-Koordinate | |||
| dy | coord | sy | Ziel-y-Koordinate | |||
| da | char | l | Ziel-Seitenverhältnissteuerung (l, s, n) | |||
| ds | char | n | Ziel-Skalierungssteuerung (s, n) | |||
| cw | number | Leinwandbreite | ||||
| ch | number | Leinwandhöhe | ||||
| cc | color | 000000 | Leinwandfarbe | |||
| bw | number | Rahmenbreite | ||||
| bh | number | Rahmenhöhe | ||||
| bc | color | 000000 | Rahmenfarbe | |||
| sw | coord | Quellbreite | ||||
| sh | coord | Quellhöhe | ||||
| sx | coord | Quell-x-Koordinate | ||||
| sy | coord | Quell-y-Koordinate | ||||
| pt | char | n | Durchlaufsteuerung (y, n) | |||
| sharpen | string | Radius,Sigma (z. B. 10x5) | ||||
| unsharp | string | Radius,Sigma,Menge,Schwellenwert (z. B. 2x5+0.5+0) | ||||
| blur | string | Radius,Sigma (z. B. 5x10) | ||||
| embedicon | string | Eingebettete Symboldatei in small_light_material_dir |
||||
| ix | number | 0 | Eingebettete Symbol-x-Koordinate | |||
| iy | number | 0 | Eingebettete Symbol-y-Koordinate | |||
| angle | number | 0 | Drehwinkel (90, 180, 270) | |||
| progressive | char | n | JPEG progressiv machen (y, n) | |||
| cmyk2rgb | char | n | Farbraum von CMYK nach sRGB konvertieren (y, n) | |||
| rmprof | char | n | Profil entfernen (y, n) | |||
| autoorient | char | n | Automatische Anpassung der Bildorientierung aktivieren (y, n) |
Die Werte von da sind l, s und n. Diese haben die folgenden Bedeutungen.
l: basierend auf der langen Kantes: basierend auf der kurzen Kanten: nein
Es gibt einige Einschränkungen unten.
of=gifundof=webpwerden nicht unterstützt, wenne=imlib2.autoorientist ab ImageMagick-6.9.0 oder später verfügbar.- Der Wert von
radius,sigmafürsharpen,unsharpundblurist durchsmall_light_radius_maxundsmall_light_sigma_maxbegrenzt.
Hier sind die Typen jedes Parameters.
| Typ | Beschreibung |
|---|---|
| coord | Koordinate oder Pixel. Prozent, wenn 'p' angehängt wird |
| char | Zeichen |
| number | Ganzzahl |
| color | rrggbb oder rrggbbaa |
| string | string |
Verwendung von GET-Parametern
ngx_small_light unterstützt die Bildkonvertierung nicht nur durch die small_light-Funktion, sondern auch durch GET-Parameter in v0.5.0 oder später. Sie müssen sowohl small_light als auch small_light_getparam_mode aktivieren, um diese Funktion zu aktivieren. Im Gegenzug wird die small_light-Funktion (z. B. /small_light(dw=300,dh=300)/img.jpg) deaktiviert.
small_light on;
small_light_getparam_mode on;
In der obigen Konfiguration gibt die folgende URL kein konvertiertes Bild zurück.
http://localhost:8000/small_light(dw=200,dh=200)/img/image.jpg
Stattdessen gibt die folgende URL das erwartete konvertierte Bild zurück.
http://localhost:8000/img/image.jpg?dw=200&dh=200
Aktivierung der WebP-Transformation
ngx_small_light unterstützt die WebP-Transformation mit ImageMagick und GD. Wenn of=webp an die small_light-Funktion übergeben wird, wandelt ngx_small_light das Bildformat in WebP um. Aber ImageMagick benötigt libwebp und GD benötigt libvpx. Sie müssen diese Bibliotheken beim Erstellen von ImageMagick und GD einbinden, um die WebP-Transformation zu aktivieren.
Wenn die WebP-Transformation nicht verfügbar ist, gibt nginx in der error.log eine Zeile wie die folgende aus, während es ein Bild mit of=webp verarbeitet.
WebP wird nicht unterstützt
Wenn die WebP-Transformation mit ImageMagick verfügbar ist, enthält die Ausgabe von convert -list format eine Zeile wie die folgende.
$ convert -list format | grep -i webp
WEBP* WEBP rw- WebP-Bildformat (libwebp 0.5.0[0208])
Wenn die WebP-Transformation mit GD verfügbar ist, enthält die Ausgabe von gdlib-config --libs -lvpx.
Im Allgemeinen enthalten die von den Linux-Distributionen bereitgestellten Pakete von ImageMagick und GD, wie Ubuntu und CentOS, standardmäßig nicht die Bibliothek für die WebP-Transformation. In solchen Fällen müssen Sie ImageMagick oder GD selbst erstellen.
Optimierungstipps
Hier sind einige Optimierungstipps für ngx_small_light.
JPEG-Hinweis
Wenn das Ausgabeformat JPEG ist und die Bildkonvertierungs-Engine ImageMagick oder Imlib2 ist, können Sie jpeghint=y angeben. Die Geschwindigkeit der Bildverarbeitung wird erheblich verbessert.
Thread-Anzahl mit OpenMP begrenzen
Wenn die Bildkonvertierungs-Engine ImageMagick ist und die Version von ngx_small_light niedriger als v0.6.14 ist, wird dringend empfohlen, 1 für OMP_NUM_THREADS oder MAGICK_THREAD_LIMIT in nginx.conf anzugeben. Da OpenMP standardmäßig in ImageMagick aktiviert ist und ImageMagick mit aktiviertem OpenMP in einer Multi-Prozess-Umgebung sehr langsam ist.
env OMP_NUM_THREADS=1; # oder env MAGICK_THREAD_LIMIT=1;
Alternativ können Sie dieses Problem umgehen, indem Sie ImageMagick mit --disable-openmp erstellen.
In v0.6.14 oder später sind sie nicht mehr erforderlich, da ngx_small_light die Thread-Anzahl mit OpenMP immer auf 1 setzt.
Einschränkungen
ngx_small_light hat die folgenden Einschränkungen.
Nicht unterstützte Funktionen mit Imlib2
Die Transformation mit Imlib2 unterstützt nicht das Schreiben von GIF-Bildern. Da Imlib2 die Funktion zum Laden von GIF-Bildern hat, jedoch nicht die Funktion zum Speichern. Darüber hinaus unterstützt die Transformation durch Imlib2 nicht das Schreiben und Lesen von WebP-Bildern. Daher können of=gif und e=imlib2 nicht gleichzeitig angegeben werden. Wenn diese angegeben werden, gibt ngx_small_light 415 (Unsupported Media Type) zurück.
Nicht unterstützte Funktionen mit GD
Die Transformation mit GD unterstützt das Schreiben von WebP-Bildern. Aber es ist eine experimentelle Funktion.
Nicht unterstützte animierte GIFs
ngx_small_light unterstützt nicht die Transformation von animierten GIFs, die Animationen beibehalten. Da es lange dauert, animierte GIFs zu transformieren (z. B. zu skalieren, zuzuschneiden). Daher ist es nicht realistisch, dass ngx_small_light animierte GIFs unterstützt.
Wenn das animierte GIF übergeben wird, transformiert ngx_small_light nur den ersten Frame.
Tests ausführen
perl Build.PL
cpanm --installdeps .
NGINX_BIN=${nginx_prefix_dir}/sbin/nginx ./Build test
## oder
NGINX_BIN=${nginx_prefix_dir}/sbin/nginx prove t/**/*.t
GitHub
Sie finden zusätzliche Konfigurationstipps und Dokumentationen für dieses Modul im GitHub-Repository für nginx-module-small-light.