- optimala bilder i otroliga hastigheter
- Börja med imageflow_tool (rekommenderas)
- Användning av imageflow_server för dynamisk bildbehandling
- Bortom demotypen
- Exempel
- Använda libimageflow från ditt språk
- Crates inom detta projekt
- Kända brister och saknade funktioner (från och med maj 2020)
- Brister
- Saknade funktioner
- Fördröjda funktioner
- Bygga från källkod med Docker
- Förutsättningar för Linux
- Förutsättningar för Mac OS
- Windows WSL (Ubuntu Bionic Subsystem) Förutsättningar
- Windows 10 Förutsättningar
- Hur lär man sig bildbehandling för webben?
optimala bilder i otroliga hastigheter
Hämta supersnabba och säkrare verktyg för ett modernt bildarbetsflöde.
- imageflow_tool är ett kommandoradsverktyg för att experimentera, köra batchjobb eller när du vill isolera processer. Upp till 17 gånger snabbare än ImageMagick. Ger också mindre filer med högre kvalitet.
- imageflow_server kan köra JSON-jobb eller manipulera bilder under flygning (t.ex.
/bucket/img.jpg?w=200
) för direkt användning frånHTML. Källbilder kan finnas i blob-lagring, på en annan server eller i filsystemet. För produktionsanvändning rekommenderar vi dock att du använder Imageflow.NET Server, som är mycket mer funktionsrik och inte behöver en omvänd proxy i förväg för säkerheten. - libimageflow är för direkt användning (i processen) från ditt programmeringsspråk. Se våra Node-bindningar, Go-bindningar, Scala-bindningar, Elixir-bindningar eller .NET-bindningar. Om vi inte redan har bindningar för ditt språk kan du överväga att spendera en dag på att lägga till dem. Imageflow har en enkelC-kompatibel ABI, varav endast 4 metoder behövs för att implementera bindningar.
Öppna ett ärende för att få oss att skriva exempelkod för ditt användningsfall. Vi tror på feedback-driven design och att effektivisera verklig användning är den snabbaste vägen till en bra produkt.
Querystring API Documentation
JSON API Documentation
libimageflow, imageflow_tool och imageflow_server finns tillgängliga asself-contained binaries för Windows, Ubuntu och Mac. Vi erbjuder även Docker-avbildningar för Linux (där glibc och OpenSSL krävs).
Vi tackar våra backers på Kickstarteroch de många supportrarna till ImageResizer för att de har gjort detta projekt till verklighet.Besök Imageresizing.net om du behöver ett AGPLv3-undantag för kommersiell användning.
Börja med imageflow_tool (rekommenderas)
imageflow_tool examples --generate
– skapar en exempelkatalog med JSON-jobb och invoceringsskript.
Du kan använda kommandosträngar som är kompatibla med ImageResizer 4 querysträngar:
imageflow_tool v1/querystring --in source.jpg --out thumb.jpg --command "width=50&height=50&mode=crop&format=jpg"
Och skicka in en JSON-jobbfil. JSON-jobb kan ha flera ingångar och utgångar och kan representera vilken typ av operationsgraf som helst.
Följande genererar flera storlekar av en bild från en exempeljobbfil:
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
Som standard skriver imageflow_tool ut ett JSON-svar till stdout. Du skriver detta till disk med --response
.
--debug-package
kommer att skapa en .zip-fil för att reproducera problematiskt beteende med både v1/build
och v1/querystring
. Skicka gärna in felrapporter; vi försöker göra det enkelt.
Användning av imageflow_server för dynamisk bildbehandling
imageflow_server start --demo
Nu kan du redigera bilder från HTML… och använda srcset utan huvudvärk.
<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" />
Bortom demotypen
Du vill montera olika bildkällplatser till prefix. Kommandot --mount
analyserar en av kolon (:
) avgränsad lista med argument. Det första är det prefix som du ska använda i URL:en (som http://localhost:39876/prefix/
. Det andra är namnet på motorn. Resterande argument skickas till motorn.
Exempel
--mount "/img/:ir4_local:C:\inetpub\wwwroot\images"
-
--mount "/proxyimg/:ir4_http:https:://myotherserver.com/imagefolder/"
(observera den dubbla escapingen av kolonet) --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"
Använda libimageflow från ditt språk
- .NET Standardbindningar finns på https://github.com/imazen/imageflow-dotnet
- Node bindningar finns på https://github.com/imazen/imageflow-node
- Ruby – Grundläggande bindningar finns i bindningar/ruby/
- Gränssnittet för C och C++ är stabilt – använd bindningar/headers/imageflow_default.h eller en av de många alternativa konventioner som tillhandahålls med varje utgåva.
- Rust – Imageflow är skrivet i Rust, så du kan använda
imageflow_core
crate. - andra språk – Använd ett verktyg för generering av FFI-bindningar för ditt språk, och ge det den headerfil som det gillar bäst.
Du kanske också finner att imageflow_tool
är tillräckligt snabbt för dina behov.
Crates inom detta projekt
- imageflow_abi – Det stabila API:et för libimageflow/imageflow.dll.Headers för libimageflow finns i
bindings/headers
- imageflow_tool – Kommandoradsverktyget
- imageflow_server – HTTP-servern
- c_components – En rostkista som innehåller C-källkod
- c_components/tests – Tester för C-komponenterna
- imageflow_types – Delade typer som används av de flesta kistor, med JSON-serialisering
- imageflow_helpers – Gemensamma hjälpfunktioner och verktyg
- imageflow_riapi – RIAPI- och ImageResizer4-kompatibilitetsanalys/layout
- imageflow_core – Huvudbiblioteket och exekveringsmotorn
Kända brister och saknade funktioner (från och med maj 2020)
Brister
- imageflow_server exponerar inte JSON API:et ännu.
- Ingen fuzz-testning eller granskning av tredje part ännu.
Saknade funktioner
- Blurring.
Fördröjda funktioner
- Jobbkostnadsförutsägelse (fördröjd – inget intresse från samhället)
Du behöver mer än Rust för att kompilera Imageflow, eftersom det har ett par C-beroenden.
- Installera plattformsspecifika förutsättningar (hitta rätt avsnitt nedan).
- Klonera och cd:a in i det här förrådetT.ex,
git clone [email protected]:imazen/imageflow.git && cd imageflow
)
Om du använder bash
på någon plattform, bör du kunna använda build.sh
-
./build.sh clean
– för att rensa -
./build.sh test
– köra alla tester -
./build.sh debug
– generera långsamma felsökningsbinärfiler -
./build.sh release
– generera releasebinärfiler -
./build.sh install
– installera releasebinärfiler till/usr/local
(måste köra `./build.sh release först) -
./build.sh uninstall
– avinstallera binärer för release
build.sh
placerar binärer i ./artifacts/ directory
Om du använder Windows, kör endast byggkommandon i fönstret som skapats av win_enter_env.bat
.
Du kan också bygga med cargo
direkt, även om detta kommer att placera binärer i ./target/release
istället. * cargo test --all
för att testa Imageflow i felsökningsläge (slooow) * cargo build --package imageflow_abi --release
för att kompilera libimageflow/imageflow.dll
* cargo build --package imageflow_tool --release
för att kompilera imageflow_tool(.exe)
* cargo build --package imageflow_server --release
för att kompilera imageflow_server(.exe)
* cargo build --all --release
för att kompilera allt i utgivningsläget * cargo doc --no-deps --all --release
för att skapa dokumentation.
Bygga från källkod med Docker
Om du vill replikera Imageflow CI-miljön:
- Installera Docker
- Kör från en bash-session (Docker + Windows WSL, macOS eller linux)
-
git clone [email protected]:imazen/imageflow.gitcd imageflow./build_via_docker.sh debug
Detta kommer att skapa cacher inom ~/.docker_imageflow_caches
som är specifika för den använda Docker-avbildningen. Instanserna kommer att vara flyktiga; det enda tillståndet kommer att finnas i caches.
De officiella Dockerfilerna är också ett bra ställe för att få mer detaljerade steg för miljöinställningar, eftersom vi inte listar steg för att ställa in:
- Valgrind (vanliga versioner bryter openssl; du kan behöva bygga från källan)
- Kodtäckning
- Bindningar.
Förutsättningar för Linux
(testat på Ubuntu 16.04 och 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 `
Förutsättningar för Mac OS
- Installera XCode Command-Line Tools om du inte redan gjort det
- Installera Homebrew om du inte redan gjort det.
- Installera nasm, pkg-config och wget
brew install nasm pkg-config wget
- Installera Rust
Windows WSL (Ubuntu Bionic Subsystem) Förutsättningar
- Installera Ubuntu 18.04 från Windows Store
- Kör Ubuntu 18.04 och skapa ditt användarnamn/lösenord
-
sudo apt-get update
för att uppdatera tillgängliga paket. - Installera Rust 1.28+ genom att köra
curl https://sh.rustup.rs -sSf | sh -s -- -y --default-toolchain stable
- Säkerställ att byggverktyg är installerade (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
- (valfritt) För att kunna använda en grafisk textredigerare måste du ladda ner imageflow till en ”Windows”-katalog och sedan mappa den till en plats i Ubuntu.Om du till exempel klonade imageflow till Documents/imageflow skulle du köra:
ln -s /mnt/c/Users//Documents/imageflow ~/win_imageflow
- Stäng och öppna Ubuntu igen
Windows 10 Förutsättningar
- Installera Visual Studio 2017 Build Tools (separat eller som en VS-komponent)
- Installera Git 64-bitars.
-
Run As Administrator
NASM 64-bitarsinstallationsprogrammet – det kommer inte att uppmana dig. - Installera Rust 64-bitars om du vill ha 64-bitars Imageflow eller Rust 32-bitars om du inte vill ha det.Installera verktygskedja
stable
som standard och bekräfta att du lägger till den iPATH
. - Öppna kommandoraden och växla till det här arkivets rotkatalog
- Redigera
ci/wintools/SETUP_PATH.bat
för att se till att rust/cargo, nasm, git och Git/mingw64/bin alla finns i%PATH%
. - Kör
win_enter_env.bat
för att starta en underhölje (redigera den om du vill ha en 32-bitarsbyggnad) - Alla byggkommandon ska köras i underhöljet. Kör
cmd.exe /c "ci\wintools\win_verify_tools.bat"
för att kontrollera att verktygen finns.
Hur lär man sig bildbehandling för webben?
Först bör du läsa High Performance Images för att få ett sammanhang.
Det finns inte många bra läroböcker i ämnet. Här är några från min personliga bokhylla. Mellan dem (och Wikipedia) kunde jag sammanställa ungefär 60 % av den kunskap jag behövde; resten hittade jag genom att läsa källkoden till många populära bildbehandlingsbibliotek.
Jag skulle börja med att läsa Principles of Digital Image Processing: Core Algorithms från början till slut, och sedan Digital Image Warping. Wikipedia är också en användbar referens, även om de relevanta sidorna inte är länkade eller kategoriserade tillsammans – använd specifika söktermer, som ”bilinear interpolation” och ”Lab color space”.
- Digital Image Warping
- Computer Graphics: Principles and Practice in C (2nd Edition)
- Principles of Digital Image Processing: Grundläggande tekniker
- Principer för digital bildbehandling: Grundläggande algoritmer
- Principer för digital bildbehandling: Avancerade metoder
Jag har funnit att källkoden för OpenCV, LibGD, FreeImage, Libvips, Pixman, Cairo, ImageMagick, stb_image, Skia och FrameWave är mycket användbar för att förstå verkliga tillämpningar och överväganden. De flesta läroböcker utgår från ett oändligt plan, ignorerar off-by-one-fel, floating-point-begränsningar, färgrymdsnoggrannhet och symmetri inom ett avgränsat område. Jag kan inte rekommendera någon lärobok som en exakt referens, endast som en konceptuell utgångspunkt. Jag gjorde några anteckningar om frågor som man bör vara medveten om när man skapar ett bildbibliotek.
Håll också i minnet att datorseende skiljer sig mycket från bildskapande. I datorseende spelar t.ex. återamplingsnoggrannheten mycket liten roll. Men när det gäller bildskapande serverar du bilder till fotografer, personer som har en mycket skarpare visuell uppfattning än den genomsnittlige utvecklaren. De bilder som produceras kommer att återges sida vid sida med annan CSS och andra bilder, och den minsta lilla felaktighet är ganska synlig. Du konkurrerar med Lightroom, med offline-verktyg som ger visuellt perfekta resultat. Programvara för slutanvändare kommer att kasseras om fotograferna känner att den förstör deras arbete.