imazen / imageflow

optimální obrázky při neuvěřitelné rychlosti

testy stav: release candidate

Docker PullsDocker Pullszobrazit verze licence:

  • imageflow_tool je nástroj příkazového řádku pro experimentování, spouštění dávkových úloh,nebo když chcete izolovat procesy. Je až 17x rychlejší než ImageMagick. Také vytváří menší soubory ve vyšší kvalitě.
  • imageflow_server může spouštět úlohy JSON nebo manipulovat s obrázky za letu (např. /bucket/img.jpg?w=200) pro přímé použití zHTML. Zdrojové obrázky se mohou nacházet v blobovém úložišti, na jiném serveru nebo v souborovém systému. Pro produkční použití však doporučujeme používat Imageflow.NET Server, který má mnohem více funkcí a kvůli bezpečnosti nepotřebuje před sebou reverzní proxy.
  • libimageflow je určen pro přímé použití (v procesu) z vašeho programovacího jazyka. Podívejte se na naše vazby na Node, vazby na Go, vazby na Scalu, vazby na Elixir nebo vazby na .NET. Pokud ještě nemáme vazby pro váš jazyk, zvažte, zda věnovat den na jejich přidání. Imageflow má ABI kompatibilní s jazykem SimpleC, z něhož jsou k implementaci vazeb potřeba pouze 4 metody.

Otevřete issue, abychom napsali ukázkový kód pro váš případ použití. Věříme v návrh řízený zpětnou vazbou a zjednodušení reálného použití je nejrychlejší cestou ke skvělému produktu.

Dokumentace API pro řetězce

Dokumentace API proJSON

libimageflow, imageflow_tool a imageflow_server jsou k dispozici jako samostatné binární soubory pro Windows, Ubuntu a Mac. Nabízíme také obrazy Docker pro Linux (kde jsou vyžadovány glibc a OpenSSL).

Děkujeme našim podporovatelům na Kickstarterua mnoha příznivcům ImageResizeru za uskutečnění tohoto projektu.Navštivte Imageresizing.net, pokud potřebujete výjimku AGPLv3 pro komerční použití.

Začněte s imageflow_tool (doporučeno)

imageflow_tool examples --generate – vytvoří adresář příkladů s úlohami JSON a vyvolávacími skripty.

Můžete použít příkazové řetězce, které jsou kompatibilní s dotazovacími řetězci ImageResizeru 4:

imageflow_tool v1/querystring --in source.jpg --out thumb.jpg --command "width=50&height=50&mode=crop&format=jpg"

Nebo odešlete soubor úlohy JSON. Úlohy JSON mohou mít více vstupů a výstupů a mohou představovat libovolný druh operačního grafu.

Následující příklad generuje více velikostí obrázku z příkladového souboru úlohy:

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

Ve výchozím nastavení vypíše nástroj imageflow_tool odpověď JSON na výstup stdout. Tu vypíšete na disk pomocí --response.

--debug-package vytvoří soubor .zip, který reprodukuje problematické chování s v1/build i v1/querystring. Prosím, posílejte hlášení o chybách; snažíme se to usnadnit.

Použití imageflow_serveru pro dynamické zobrazování

imageflow_server start --demo

Nyní můžete upravovat obrázky z HTML… a používat srcset bez bolesti hlavy.

<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" />

Mimo demo

Budete chtít připojit různá umístění zdrojů obrázků k předponám. Příkaz --mount zpracuje seznam argumentů ohraničený dvojtečkou (:). Prvním je předpona, kterou použijete v adrese URL (například http://localhost:39876/prefix/. Druhým je název motoru. Zbývající argumenty jsou odeslány motoru.

Příklady

  • --mount "/img/:ir4_local:C:\inetpub\wwwroot\images"
  • --mount "/proxyimg/:ir4_http:https:://myotherserver.com/imagefolder/" (všimněte si dvojitého escapování dvojtečky)
  • --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"

Použití libimageflow z vašeho jazyka

  • .NET Standardní vazby najdete na adrese https://github.com/imazen/imageflow-dotnet
  • Vazby na uzly jsou k dispozici na adrese https://github.com/imazen/imageflow-node
  • Ruby – základní vazby najdete na adrese bindings/ruby/
  • Rozhraní pro C a C++ je stabilní – použijte bindings/headers/imageflow_default.h nebo jednu z mnoha alternativních konvencí poskytovaných s každou verzí.
  • Rust – Imageflow je napsán v jazyce Rust, takže můžete použít imageflow_core bednu.
  • jiné jazyky – Použijte nástroj pro generování vazeb FFI pro váš jazyk a nakrmte ho tím, který hlavičkový soubor se mu nejvíce líbí.

Možná také zjistíte, že imageflow_tool je pro vaše potřeby dostatečně rychlý.

Bedny v rámci tohoto projektu

  • imageflow_abi – Stabilní API libimageflow/imageflow.dll.Hlavičky pro libimageflow jsou umístěny v bindings/headers
  • imageflow_tool – Nástroj příkazového řádku
  • imageflow_server – HTTP server
  • c_components – Rust bedna obsahující zdrojové kódy C
  • c_components/tests – Testy pro komponenty C
  • imageflow_types – Sdílené typy používané většinou beden, se serializací JSON
  • imageflow_helpers – Běžné pomocné funkce a utility
  • imageflow_riapi – Parsování/rozložení kompatibilní s RIAPI a ImageResizer4
  • imageflow_core – Jádro crat. Hlavní knihovna a prováděcí engine

Známé chyby a chybějící funkce (ke květnu 2020)

Chyby

  • imageflow_server zatím nevystavuje rozhraní JSON API.
  • Zatím neprobíhá fuzz testování ani audit třetí stranou.

Chybějící funkce

  • Rozmazávání.

Opožděné funkce

  • Predikce nákladů na práci (odloženo – nezájem komunity)

K kompilaci Imageflow budete potřebovat víc než jen Rust, protože má několik závislostí na C.

  1. Nainstalujte předpoklady specifické pro danou platformu (správnou část najdete níže).
  2. Klonujte a cd do tohoto úložištěNapř, git clone [email protected]:imazen/imageflow.git && cd imageflow)

Pokud používáte bash na nějaké platformě, měli byste být schopni použít build.sh

  • ./build.sh clean – vyčistit
  • ./build.sh test – spustit všechny testy
  • ./build.sh debug – vygenerovat pomalé ladicí binární soubory
  • ./build.sh release – vygenerovat binární soubory verze
  • ./build.sh install – nainstalovat binární soubory verze do /usr/local (musí se spustit `./build.sh release)
  • ./build.sh uninstall – odinstaluje release binární soubory

build.sh umístí binární soubory do ./artifacts/ directory

Pokud používáte Windows, spouštějte příkazy pro sestavení pouze v okně vytvořeném pomocí win_enter_env.bat.

Můžete také sestavovat přímo pomocí cargo, ačkoli to místo toho umístí binární soubory do ./target/release.* cargo test --all pro testování Imageflow v ladicím (pomalém) režimu* cargo build --package imageflow_abi --release pro kompilaci libimageflow/imageflow.dll* cargo build --package imageflow_tool --release pro kompilaci imageflow_tool(.exe)* cargo build --package imageflow_server --release pro kompilaci imageflow_server(.exe)* cargo build --all --release pro kompilaci všeho v režimu vydání* cargo doc --no-deps --all --release pro generování dokumentace.

Sestavování ze zdrojových kódů pomocí nástroje Docker

Pokud chcete replikovat prostředí Imageflow CI:

  1. Instalace Docker
  2. Spustit ze sezení bash (Docker + Windows WSL, macOS nebo linux)
  3. git clone [email protected]:imazen/imageflow.gitcd imageflow./build_via_docker.sh debug

Tím se vytvoří mezipaměti v rámci ~/.docker_imageflow_caches specifické pro použitý obraz Docker. Instance budou efemérní; jediný stav bude v cache.

Oficiální soubory Docker jsou také skvělým místem pro získání podrobnějších kroků nastavení prostředí, protože neuvádíme kroky pro nastavení:

  • Valgrind (běžné verze rozbíjejí openssl; možná budete muset sestavit ze zdrojových kódů)
  • Kódové pokrytí
  • Vazby.

Předpoklady pro Linux

(testováno na Ubuntu 16.04 a 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 Předpoklady

  1. Nainstalujte nástroje příkazového řádku XCode, pokud jste tak ještě neučinili
  2. Nainstalujte Homebrew, pokud jste tak ještě neučinili.
  3. Instalace nasm, pkg-config a wgetbrew install nasm pkg-config wget
  4. Instalace Rust

Předpoklady pro Windows WSL (Ubuntu Bionic Subsystem)

  1. Instalace Ubuntu 18.04 z Windows Store
  2. Spustit Ubuntu 18.04 a vytvořit uživatelské jméno/heslo
  3. sudo apt-get update pro aktualizaci dostupných balíčků.
  4. Instalace Rust 1.28+ spuštěnímcurl https://sh.rustup.rs -sSf | sh -s -- -y --default-toolchain stable
  5. Zajistěte, aby byly nainstalovány nástroje pro sestavování (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. (volitelné) Chcete-li používat grafický textový editor, musíte si stáhnout imageflow do adresáře „Windows“ a pak jej namapovat na umístění v Ubuntu.Pokud byste například naklonovali imageflow do Dokumenty/imageflow, spustili byste:ln -s /mnt/c/Users//Documents/imageflow ~/win_imageflow
  7. Zavřít a znovu otevřít Ubuntu

Předpoklady pro Windows 10

  1. Instalace nástrojů pro sestavení Visual Studio 2017 (samostatně nebo jako součást VS)
  2. Instalace 64bitového systému Git.
  3. Run As Administratorinstalátor NASM 64-bit – nebude se ptát.
  4. Instalujte Rust 64-bit, pokud chcete 64-bit Imageflow, nebo Rust 32-bit, pokud nechcete.
  5. Instalujte řetězec nástrojů stable jako výchozí a potvrďte jeho přidání do PATH.
  6. Otevřete příkazový řádek a přepněte se do kořenového adresáře tohoto úložiště
  7. Upravte ci/wintools/SETUP_PATH.bat a ujistěte se, že rust/cargo, nasm, git a Git/mingw64/bin jsou v adresáři %PATH%.
  8. Spusťte win_enter_env.bat pro spuštění podprocesoru (upravte jej, pokud chcete 32bitové sestavení)
  9. Všechny příkazy sestavení by se měly spouštět v podprocesoru. Spusťte cmd.exe /c "ci\wintools\win_verify_tools.bat" a zkontrolujte, zda jsou přítomny nástroje.

Jak se naučit zpracovávat obrázky pro web?

Nejprve si přečtěte High Performance Images pro kontext.

Není mnoho skvělých učebnic na toto téma. Zde jsou některé z mé osobní knihovničky. Mezi nimi (a Wikipedií) se mi podařilo dát dohromady asi 60 % znalostí, které jsem potřeboval; zbytek jsem našel přečtením zdrojových kódů mnoha populárních knihoven pro zpracování obrazu.

Začal bych přečtením Principles of Digital Image Processing: Core Algorithms front-to-back, pak Digital Image Warping. Užitečnou pomůckou je také Wikipedie, ačkoli příslušné stránky nejsou propojeny ani roztříděny do kategorií – použijte konkrétní vyhledávací výrazy, například „bilineární interpolace“ a „barevný prostor Lab“.

  • Digital Image Warping
  • Computer Graphics: Principles and Practice in C (2nd Edition)
  • Principles of Digital Image Processing: Základní techniky
  • Principles of Digital Image Processing: Základní algoritmy
  • Principles of Digital Image Processing: Zjistil jsem, že zdrojové kódy programů OpenCV, LibGD, FreeImage, Libvips, Pixman, Cairo, ImageMagick, stb_image, Skia a FrameWave jsou velmi užitečné pro pochopení reálných implementací a úvah. Většina učebnic předpokládá nekonečnou rovinu, ignoruje chyby off-by-one, omezení plovoucí desetinné čárky, přesnost barevného prostoru a operační symetrii v ohraničené oblasti. Žádnou učebnici nemohu doporučit jako přesnou referenci, pouze jako koncepční východisko. Udělal jsem několik poznámek týkajících se problémů, které je třeba si uvědomit při vytváření knihovny pro zobrazování.

    Také mějte na paměti, že počítačové vidění se velmi liší od tvorby obrazu. V počítačovém vidění například velmi málo záleží na přesnosti převzorkování. Ale při vytváření obrázků servírujete obrázky fotografům, tedy lidem s mnohem ostřejším vizuálním vnímáním než průměrný vývojář. Vytvořené obrázky se budou vykreslovat vedle jiných CSS a obrázků a sebemenší nepřesnost je zcela viditelná. Soupeříte s aplikací Lightroom; s offline nástroji, které vytvářejí vizuálně dokonalé výsledky. Software pro koncové uživatele bude vyřazen, pokud budou mít fotografové pocit, že kazí jejich práci.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.