- Optimale Bilder in unglaublicher Geschwindigkeit
- Starten Sie mit imageflow_tool (empfohlen)
- Verwendung von imageflow_server für dynamische Bildbearbeitung
- Über die Demo hinaus
- Beispiele
- Verwendung von libimageflow aus Ihrer Sprache
- Kisten innerhalb dieses Projekts
- Bekannte Fehler und fehlende Funktionen (Stand Mai 2020)
- Fehler
- Fehlende Funktionen
- Verzögerte Funktionen
- Bauen aus dem Quellcode mit Docker
- Linux-Voraussetzungen
- Mac OS Voraussetzungen
- Windows WSL (Ubuntu Bionic Subsystem) Voraussetzungen
- Windows 10 Voraussetzungen
- Wie lernt man Bildverarbeitung für das Web?
Optimale Bilder in unglaublicher Geschwindigkeit
Laden Sie die schnellsten und sichersten Tools für einen modernen Bild-Workflow herunter.
- imageflow_tool ist ein Kommandozeilen-Tool zum Experimentieren, für Batch-Jobs oder wenn Sie Prozesse isolieren möchten. Bis zu 17x schneller als ImageMagick. Erzeugt auch kleinere Dateien in höherer Qualität.
- imageflow_server kann JSON-Aufträge ausführen oder Bilder während des Fluges manipulieren (z.B.
/bucket/img.jpg?w=200
), um sie direkt aus HTML zu verwenden. Die Quellbilder können sich im Blob-Speicher, auf einem anderen Server oder im Dateisystem befinden. Für den produktiven Einsatz empfehlen wir jedoch die Verwendung von Imageflow.NET Server, der weitaus mehr Funktionen bietet und aus Sicherheitsgründen keinen Reverse-Proxy benötigt. - libimageflow ist für die direkte (prozessinterne) Verwendung aus Ihrer Programmiersprache gedacht. Siehe unsere Node-Bindings, Go-Bindings, Scala-Bindings, Elixir-Bindings oder .NET-Bindings. Wenn wir noch keine Bindungen für Ihre Sprache haben, sollten Sie sich einen Tag Zeit nehmen, um sie hinzuzufügen. Imageflow hat eine simpleC-kompatible ABI, von der nur 4 Methoden benötigt werden, um Bindungen zu implementieren.
Eröffnen Sie eine Anfrage, damit wir Beispielcode für Ihren Anwendungsfall schreiben. Wir glauben an Feedback-getriebenes Design, und die Vereinfachung der realen Nutzung ist der schnellste Weg zu einem großartigen Produkt.
Querystring API Dokumentation
JSON API Dokumentation
libimageflow, imageflow_tool, und imageflow_server sind als eigenständige Binärdateien für Windows, Ubuntu und Mac verfügbar. Wir bieten auch Docker-Images für Linux an (wo glibc und OpenSSL erforderlich sind).
Wir danken unseren Unterstützern auf Kickstarter und den vielen Unterstützern von ImageResizer dafür, dass sie dieses Projekt Wirklichkeit werden lassen.Besuchen Sie Imageresizing.net, wenn Sie eine AGPLv3-Ausnahme für die kommerzielle Nutzung benötigen.
Starten Sie mit imageflow_tool (empfohlen)
imageflow_tool examples --generate
– erstellt ein Beispielverzeichnis mit JSON-Jobs und Aufrufskripten.
Sie können Befehlszeichenfolgen verwenden, die mit ImageResizer 4 Querystrings kompatibel sind:
imageflow_tool v1/querystring --in source.jpg --out thumb.jpg --command "width=50&height=50&mode=crop&format=jpg"
Oder eine JSON-Job-Datei einreichen. JSON-Aufträge können mehrere Ein- und Ausgaben haben und jede Art von Operationsgraphen darstellen.
Das folgende Beispiel erzeugt mehrere Größen eines Bildes aus einer Auftragsdatei:
imageflow_tool v1/build --json examples/export_4_sizes/export_4_sizes.json --in waterhouse.jpg --out 1 waterhouse_w1600.jpg 2 waterhouse_w1200.jpg 3 waterhouse_w800.jpg 4 waterhouse_w400.jpg --response operation_result.json
Standardmäßig gibt imageflow_tool eine JSON-Antwort auf stdout aus. Sie schreiben diese mit --response
auf die Festplatte.
--debug-package
wird eine .zip-Datei erstellen, um das problematische Verhalten mit v1/build
und v1/querystring
zu reproduzieren. Bitte senden Sie uns Fehlerberichte; wir versuchen, es einfach zu machen.
Verwendung von imageflow_server für dynamische Bildbearbeitung
imageflow_server start --demo
Jetzt können Sie Bilder von HTML aus bearbeiten… und srcset ohne Kopfschmerzen verwenden.
<img src="http://localhost:39876/demo_images/u3.jpg?w=300" /><img src="" srcset=" http://localhost:39876/demo_images/u3.jpg?w=300 300w http://localhost:39876/demo_images/u3.jpg?w=800 800w http://localhost:39876/demo_images/u3.jpg?w=1600 1600w" />
Über die Demo hinaus
Sie werden verschiedene Bildquellen in Präfixe einhängen wollen. Der Befehl --mount
analysiert eine durch einen Doppelpunkt (:
) begrenzte Liste von Argumenten. Das erste ist das Präfix, das Sie in der URL verwenden (wie http://localhost:39876/prefix/
. Das zweite ist der Motorname. Die übrigen Argumente werden an die Maschine gesendet.
Beispiele
--mount "/img/:ir4_local:C:\inetpub\wwwroot\images"
-
--mount "/proxyimg/:ir4_http:https:://myotherserver.com/imagefolder/"
(beachten Sie die doppelte Umrandung des Doppelpunkts) --mount "/cachedstaticproxy/:permacache_proxy:https:://othersite.com"
--mount "/githubproxy/:permacache_proxy_guess_content_types:https:://raw.github.com/because/it/doesnt/support/content/types"
--mount "/static/":static:./assets"
Verwendung von libimageflow aus Ihrer Sprache
- .NET Standard Bindings finden Sie unter https://github.com/imazen/imageflow-dotnet
- Node Bindings verfügbar unter https://github.com/imazen/imageflow-node
- Ruby – Basic Bindings finden Sie unter bindings/ruby/
- C und C++ Schnittstelle ist stabil – verwenden Sie bindings/headers/imageflow_default.h oder eine der vielen alternativen Konventionen, die mit jeder Version zur Verfügung gestellt werden.
- Rust – Imageflow ist in Rust geschrieben, so dass Sie die
imageflow_core
Kiste verwenden können. - andere Sprachen – Verwenden Sie ein FFI-Bindungsgenerierungswerkzeug für Ihre Sprache und füttern Sie es mit der Header-Datei, die ihm am besten gefällt.
Es kann auch sein, dass imageflow_tool
für Ihre Bedürfnisse schnell genug ist.
Kisten innerhalb dieses Projekts
- imageflow_abi – Die stabile API von libimageflow/imageflow.dll.Header für libimageflow befinden sich in
bindings/headers
- imageflow_tool – Das Kommandozeilen-Tool
- imageflow_server – Der HTTP-Server
- c_components – Eine Rost-Kiste, die C-Quellcode enthält
- c_components/tests – Tests für die C-Komponenten
- imageflow_types – Gemeinsame Typen, die von den meisten Kisten verwendet werden, mit JSON-Serialisierung
- imageflow_helpers – Allgemeine Hilfsfunktionen und Hilfsprogramme
- imageflow_riapi – RIAPI und ImageResizer4 Kompatibilität Parsing/Layout
- imageflow_core – Die Hauptbibliothek und die Ausführungsengine
- ImageResizer4 Die Hauptbibliothek und Ausführungsengine
Bekannte Fehler und fehlende Funktionen (Stand Mai 2020)
Fehler
- imageflow_server stellt die JSON API noch nicht zur Verfügung.
- Noch keine Fuzz-Tests oder Audits durch Dritte.
Fehlende Funktionen
- Unschärfe.
Verzögerte Funktionen
- Jobkostenvorhersage (verzögert – kein Interesse der Community)
Man braucht mehr als nur Rust, um Imageflow zu kompilieren, da es einige C-Abhängigkeiten hat.
- Installieren Sie die plattformspezifischen Voraussetzungen (finden Sie den richtigen Abschnitt unten).
- Klonen und cd in dieses RepositoryE.g,
git clone [email protected]:imazen/imageflow.git && cd imageflow
)
Wenn Sie bash
auf einer beliebigen Plattform verwenden, sollten Sie in der Lage sein build.sh
-
./build.sh clean
– zu reinigen -
./build.sh test
– alle Tests auszuführen -
./build.sh debug
– langsame Debug-Binärdateien zu generieren -
./build.sh release
– Release-Binärdateien zu generieren -
./build.sh install
– Release-Binärdateien nach/usr/local
zu installieren (muss `./build.sh release zuerst ausführen) -
./build.sh uninstall
– Release-Binärdateien deinstallieren
build.sh
platziert Binärdateien im ./artifacts/ directory
Wenn Sie unter Windows arbeiten, führen Sie die Build-Befehle nur in dem von win_enter_env.bat
erstellten Fenster aus.
Sie können auch direkt mit cargo
bauen, allerdings werden die Binärdateien dann in ./target/release
abgelegt.* cargo test --all
zum Testen von Imageflow im Debug-Modus (langsam)* cargo build --package imageflow_abi --release
zum Kompilieren von libimageflow/imageflow.dll
* cargo build --package imageflow_tool --release
zum Kompilieren von imageflow_tool(.exe)
* cargo build --package imageflow_server --release
zum Kompilieren von imageflow_server(.exe)
* cargo build --all --release
zum Kompilieren im Release-Modus* cargo doc --no-deps --all --release
zum Erstellen der Dokumentation.
Bauen aus dem Quellcode mit Docker
Wenn Sie die Imageflow CI-Umgebung replizieren möchten:
- Installieren Sie Docker
- Ausführen aus einer Bash-Sitzung (Docker + Windows WSL, macOS oder linux)
-
git clone [email protected]:imazen/imageflow.gitcd imageflow./build_via_docker.sh debug
Dies wird Caches innerhalb von ~/.docker_imageflow_caches
spezifisch für das verwendete Docker-Image erstellen. Instanzen werden ephemer sein; der einzige Zustand wird in den Caches sein.
Die offiziellen Dockerfiles sind auch ein großartiger Ort, um detailliertere Schritte für die Einrichtung der Umgebung zu erhalten, da wir keine Schritte für die Einrichtung auflisten:
- Valgrind (häufige Versionen brechen openssl; Sie müssen möglicherweise von den Quellen bauen)
- Codeabdeckung
- Bindungen.
Linux-Voraussetzungen
(getestet auf Ubuntu 16.04 und 18.04.)
#Install Rust 1.41+ by running`curl https://sh.rustup.rs -sSf | sh -s -- -y --default-toolchain stable`#Ensure build tools are installed (git, curl, wget, gcc, g++, nasm, pkg-config, openssl, ca-certificates)`sudo apt-get install git wget curl build-essential pkg-config libssl-dev libpng-dev nasm `
Mac OS Voraussetzungen
- Installieren Sie XCode Command-Line Tools, wenn Sie es noch nicht haben
- Installieren Sie Homebrew, wenn Sie es noch nicht haben.
- Nasm, pkg-config und wget installieren
brew install nasm pkg-config wget
- Rust installieren
Windows WSL (Ubuntu Bionic Subsystem) Voraussetzungen
- Ubuntu 18.04 aus dem Windows Store
- Starten Sie Ubuntu 18.04 und erstellen Sie Ihren Benutzernamen/Passwort
-
sudo apt-get update
um die verfügbaren Pakete zu aktualisieren. - Installieren Sie Rust 1.28+ durch Ausführen
curl https://sh.rustup.rs -sSf | sh -s -- -y --default-toolchain stable
- Stellen Sie sicher, dass Build-Tools installiert sind (git, curl, wget, gcc, g++, nasm, pkg-config, openssl, ca-certificates)
sudo apt-get install git wget curl build-essential pkg-config libssl-dev libpng-dev nasm
- (optional) Um einen grafischen Texteditor zu verwenden, müssen Sie imageflow in ein „Windows“-Verzeichnis herunterladen und es dann einem Ort in Ubuntu zuordnen.Wenn Sie imageflow beispielsweise in das Verzeichnis „Documents/imageflow“ geklont haben, würden Sie Folgendes ausführen:
ln -s /mnt/c/Users//Documents/imageflow ~/win_imageflow
- Schließen und öffnen Sie Ubuntu
Windows 10 Voraussetzungen
- Installieren Sie Visual Studio 2017 Build Tools (separat oder als VS-Komponente)
- Installieren Sie Git 64-bit.
-
Run As Administrator
den NASM 64-Bit-Installer – er wird nicht dazu auffordern. - Installieren Sie Rust 64-Bit, wenn Sie 64-Bit-Imageflow wollen, oder Rust 32-Bit, wenn Sie es nicht wollen.
- Installieren Sie die Toolchain
stable
als Standard, und bestätigen Sie das Hinzufügen zuPATH
. - Öffnen Sie die Kommandozeile und wechseln Sie in das Stammverzeichnis dieses Repositorys
- Bearbeiten Sie
ci/wintools/SETUP_PATH.bat
, um sicherzustellen, dass rust/cargo, nasm, git und Git/mingw64/bin sich alle in%PATH%
befinden. - Starten Sie
win_enter_env.bat
, um eine Sub-Shell zu starten (bearbeiten Sie diese, wenn Sie einen 32-Bit-Build wünschen) - Alle Build-Befehle sollten in der Sub-Shell ausgeführt werden. Führen Sie
cmd.exe /c "ci\wintools\win_verify_tools.bat"
aus, um zu prüfen, ob Tools vorhanden sind.
Wie lernt man Bildverarbeitung für das Web?
Lesen Sie zunächst High Performance Images für den Kontext.
Es gibt nicht viele gute Lehrbücher zu diesem Thema. Hier sind einige aus meinem persönlichen Bücherregal. Mit ihnen (und Wikipedia) konnte ich mir etwa 60 % des benötigten Wissens aneignen; den Rest habe ich durch Lesen des Quellcodes vieler beliebter Bildverarbeitungsbibliotheken gefunden.
Ich würde mit der Lektüre von Principles of Digital Image Processing beginnen: Core Algorithms von vorne bis hinten, dann Digital Image Warping. Wikipedia ist auch ein nützliches Nachschlagewerk, obwohl die relevanten Seiten nicht miteinander verlinkt oder kategorisiert sind – verwenden Sie spezifische Suchbegriffe, wie „bilineare Interpolation“ und „Lab-Farbraum“.
- Digital Image Warping
- Computer Graphics: Principles and Practice in C (2nd Edition)
- Principles of Digital Image Processing: Grundlegende Techniken
- Grundsätze der digitalen Bildverarbeitung: Kernalgorithmen
- Grundlagen der digitalen Bildverarbeitung: Fortgeschrittene Methoden
Ich habe festgestellt, dass der Quellcode für OpenCV, LibGD, FreeImage, Libvips, Pixman, Cairo, ImageMagick, stb_image, Skia und FrameWave sehr nützlich ist, um reale Implementierungen und Überlegungen zu verstehen. Die meisten Lehrbücher gehen von einer unendlichen Ebene aus, ignorieren Off-by-One-Fehler, Fließkomma-Beschränkungen, Farbraumgenauigkeit und operative Symmetrie innerhalb eines begrenzten Bereichs. Ich kann kein Lehrbuch als genaue Referenz empfehlen, sondern nur als konzeptionellen Ausgangspunkt. Ich habe mir einige Notizen zu Problemen gemacht, die bei der Erstellung einer Bildgebungsbibliothek zu beachten sind.
Auch sollte man bedenken, dass sich die Computer Vision stark von der Bilderstellung unterscheidet. Bei der Computer Vision spielt die Genauigkeit des Resamplings zum Beispiel eine sehr geringe Rolle. Aber bei der Bilderzeugung liefern Sie Bilder an Fotografen, Menschen mit einer viel schärferen visuellen Wahrnehmung als der durchschnittliche Entwickler. Die erzeugten Bilder werden Seite an Seite mit anderen CSS und Bildern gerendert, und das kleinste bisschen Ungenauigkeit ist deutlich sichtbar. Sie konkurrieren mit Lightroom, mit Offline-Tools, die visuell perfekte Ergebnisse liefern. Endbenutzer-Software wird verworfen, wenn Fotografen das Gefühl haben, dass sie ihre Arbeit beeinträchtigt.