imazen / imageflow

Optimale Bilder in unglaublicher Geschwindigkeit

Tests Status: Release Candidate

Docker PullsDocker PullsVersionen ansehen Lizenz: Wählen Sie AGPLv3 oder Commercial

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.

  1. Installieren Sie die plattformspezifischen Voraussetzungen (finden Sie den richtigen Abschnitt unten).
  2. 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:

  1. Installieren Sie Docker
  2. Ausführen aus einer Bash-Sitzung (Docker + Windows WSL, macOS oder linux)
  3. 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

  1. Installieren Sie XCode Command-Line Tools, wenn Sie es noch nicht haben
  2. Installieren Sie Homebrew, wenn Sie es noch nicht haben.
  3. Nasm, pkg-config und wget installierenbrew install nasm pkg-config wget
  4. Rust installieren

Windows WSL (Ubuntu Bionic Subsystem) Voraussetzungen

  1. Ubuntu 18.04 aus dem Windows Store
  2. Starten Sie Ubuntu 18.04 und erstellen Sie Ihren Benutzernamen/Passwort
  3. sudo apt-get update um die verfügbaren Pakete zu aktualisieren.
  4. Installieren Sie Rust 1.28+ durch Ausführencurl https://sh.rustup.rs -sSf | sh -s -- -y --default-toolchain stable
  5. 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
  6. (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
  7. Schließen und öffnen Sie Ubuntu

Windows 10 Voraussetzungen

  1. Installieren Sie Visual Studio 2017 Build Tools (separat oder als VS-Komponente)
  2. Installieren Sie Git 64-bit.
  3. Run As Administratorden NASM 64-Bit-Installer – er wird nicht dazu auffordern.
  4. Installieren Sie Rust 64-Bit, wenn Sie 64-Bit-Imageflow wollen, oder Rust 32-Bit, wenn Sie es nicht wollen.
  5. Installieren Sie die Toolchain stable als Standard, und bestätigen Sie das Hinzufügen zu PATH.
  6. Öffnen Sie die Kommandozeile und wechseln Sie in das Stammverzeichnis dieses Repositorys
  7. Bearbeiten Sie ci/wintools/SETUP_PATH.bat, um sicherzustellen, dass rust/cargo, nasm, git und Git/mingw64/bin sich alle in %PATH% befinden.
  8. Starten Sie win_enter_env.bat, um eine Sub-Shell zu starten (bearbeiten Sie diese, wenn Sie einen 32-Bit-Build wünschen)
  9. 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.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.