imazen / imageflow

optimala bilder i otroliga hastigheter

tester status: release candidate

Docker PullsDocker Pullsse releaser licens: Välj AGPLv3 eller Commercial

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.

  1. Installera plattformsspecifika förutsättningar (hitta rätt avsnitt nedan).
  2. 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:

  1. Installera Docker
  2. Kör från en bash-session (Docker + Windows WSL, macOS eller linux)
  3. 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

  1. Installera XCode Command-Line Tools om du inte redan gjort det
  2. Installera Homebrew om du inte redan gjort det.
  3. Installera nasm, pkg-config och wgetbrew install nasm pkg-config wget
  4. Installera Rust

Windows WSL (Ubuntu Bionic Subsystem) Förutsättningar

  1. Installera Ubuntu 18.04 från Windows Store
  2. Kör Ubuntu 18.04 och skapa ditt användarnamn/lösenord
  3. sudo apt-get update för att uppdatera tillgängliga paket.
  4. Installera Rust 1.28+ genom att köracurl https://sh.rustup.rs -sSf | sh -s -- -y --default-toolchain stable
  5. 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
  6. (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
  7. Stäng och öppna Ubuntu igen

Windows 10 Förutsättningar

  1. Installera Visual Studio 2017 Build Tools (separat eller som en VS-komponent)
  2. Installera Git 64-bitars.
  3. Run As Administrator NASM 64-bitarsinstallationsprogrammet – det kommer inte att uppmana dig.
  4. 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 i PATH.
  5. Öppna kommandoraden och växla till det här arkivets rotkatalog
  6. Redigera ci/wintools/SETUP_PATH.bat för att se till att rust/cargo, nasm, git och Git/mingw64/bin alla finns i %PATH%.
  7. Kör win_enter_env.bat för att starta en underhölje (redigera den om du vill ha en 32-bitarsbyggnad)
  8. 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.

Lämna ett svar

Din e-postadress kommer inte publiceras.