imazen / imageflow

optimale billeder ved utrolige hastigheder

tests status: release candidate

Docker PullsDocker Pullsvis udgivelser licens: Vælg AGPLv3 eller Commercial

Download lynhurtige og mere sikre værktøjer til en moderne billedarbejdsgang.

  • imageflow_tool er et kommandolinjeværktøj til eksperimenter, til at køre batchjobs, eller når du ønsker procesisolering. Op til 17x hurtigere end ImageMagick. Producerer også mindre filer i højere kvalitet.
  • imageflow_server kan køre JSON-jobs eller manipulere billeder undervejs (f.eks./bucket/img.jpg?w=200) til direkte brug fraHTML. Kildebilleder kan ligge i blob-lagring, på en anden server eller på filsystemet. Til produktionsbrug anbefaler vi dog, at du bruger Imageflow.NET Server, som er langt mere funktionsrig og ikke har brug for en reverse proxy foran af hensyn til sikkerheden.
  • libimageflow er til direkte (i proces) brug fra dit programmeringssprog. Se vores Node-bindinger, Go-bindinger, Scala-bindinger, Elixir-bindinger eller .NET-bindinger. Hvis vi ikke allerede har bindinger til dit sprog, kan du overveje at bruge en dag på at tilføje dem. Imageflow har en simpleC-kompatibel ABI, hvoraf kun 4 metoder er nødvendige for at implementere bindinger.

Åbn et problem for at få os til at skrive eksempelkode til dit anvendelsestilfælde. Vi tror på feedback-drevet design, og strømlining af brug i den virkelige verden er den hurtigste vej til et godt produkt.

Querystring API-dokumentation

JSON API-dokumentation

libimageflow, imageflow_tool og imageflow_server er tilgængelige asself-contained binaries til Windows, Ubuntu og Mac. Vi tilbyder også Docker-images til Linux (hvor glibc og OpenSSL er påkrævet).

Vi takker vores bagmænd på Kickstarterog de mange støtter af ImageResizer for at gøre dette projekt til en realitet.Besøg Imageresizing.net, hvis du har brug for en AGPLv3-undtagelse til kommerciel brug.

Start med imageflow_tool (anbefales)

imageflow_tool examples --generate – opretter en eksemplermappe med JSON-jobs og invocation scripts.

Du kan bruge kommandostrenge, der er kompatible med ImageResizer 4 querystrings:

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

Og indsende en JSON-jobfil. JSON-jobs kan have flere ind- og udgange og kan repræsentere enhver form for operationsgraf.

Det følgende genererer flere størrelser af et billede fra en eksempeljobfil:

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 udskriver imageflow_tool et JSON-svar til stdout. Du skriver dette til disken med --response.

--debug-package vil oprette en .zip-fil for at reproducere problematisk adfærd med både v1/build og v1/querystring. Indsend venligst fejlrapporter; vi forsøger at gøre det nemt.

Brug af imageflow_server til dynamisk billedbehandling

imageflow_server start --demo

Nu kan du redigere billeder fra HTML … og bruge srcset uden hovedpine.

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

Ud over demoen

Du vil gerne montere forskellige billedkildeplaceringer til præfikser. Kommandoen --mount analyserer en liste med kolon (:) afgrænset liste af argumenter. Det første er det præfiks, du vil bruge i URL’en (som http://localhost:39876/prefix/. Det andet er motornavnet. De resterende argumenter sendes til motoren.

Eksempler

  • --mount "/img/:ir4_local:C:\inetpub\wwwroot\images"
  • --mount "/proxyimg/:ir4_http:https:://myotherserver.com/imagefolder/" (bemærk den dobbelte escaping af 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"

Brug af libimageflow fra dit sprog

  • .NET Standardbindinger findes på https://github.com/imazen/imageflow-dotnet
  • Nodebindinger findes på https://github.com/imazen/imageflow-node
  • Ruby – Grundlæggende bindinger findes i bindings/ruby/
  • C- og C++-grænseflade er stabil – brug bindings/headers/imageflow_default.h eller en af de mange alternative konventioner, der leveres med hver udgave.
  • Rust – Imageflow er skrevet i Rust, så du kan bruge imageflow_core crate.
  • andre sprog – Brug et FFI-værktøj til generering af bindinger for dit sprog, og giv det den headerfil, som det bedst kan lide.

Du kan også finde ud af, at imageflow_tool er ganske hurtigt nok til dine behov.

Crates inden for dette projekt

  • imageflow_abi – Den stabile API for libimageflow/imageflow.dll.Headers for libimageflow findes i bindings/headers
  • imageflow_tool – Kommandolinjeværktøjet
  • imageflow_server – HTTP-serveren
  • c_components – En rust-crate, der indeholder C-kilde
  • c_components/tests – Tests for C-komponenterne
  • imageflow_types – Fælles typer, der bruges af de fleste crates, med JSON-serialisering
  • imageflow_helpers – Almindelige hjælpefunktioner og hjælpeprogrammer
  • imageflow_riapi – RIAPI- og ImageResizer4-kompatibilitet parsing/layout
  • imageflow_core – Hovedbiblioteket og eksekveringsmotoren

Kendte fejl og manglende funktioner (pr. maj 2020)

Fejl

  • imageflow_server eksponerer ikke JSON API’et endnu.
  • Ingen fuzz-test eller revision fra tredjepart endnu.

Manglende funktioner

  • Blurring.

Forsinkede funktioner

  • Forudsigelse af jobomkostninger (forsinket – ingen interesse fra fællesskabet)

Du skal bruge mere end Rust til at kompilere Imageflow, da det har et par C-afhængigheder.

  1. Installer platformsspecifikke forudsætninger (find det rigtige afsnit nedenfor).
  2. Clone og cd ind i dette repositoryE.g, git clone [email protected]:imazen/imageflow.git && cd imageflow)

Hvis du bruger bash på en hvilken som helst platform, bør du kunne bruge build.sh

  • ./build.sh clean – til at rense
  • ./build.sh test – køre alle tests
  • ./build.sh debug – generere langsomme debug binære filer
  • ./build.sh release – generere release binære filer
  • ./build.sh install – installere release binære filer til /usr/local (skal køre `./build.sh release først)
  • ./build.sh uninstall – afinstaller release binaries

build.sh placerer binaries i ./artifacts/ directory

Hvis du er på Windows, skal du kun køre byggekommandoer i det vindue, der er oprettet af win_enter_env.bat.

Du kan også bygge ved hjælp af cargo direkte, selv om dette vil placere binære filer i ./target/release i stedet. * cargo test --all for at teste Imageflow i fejlsøgningstilstand (slooow) * cargo build --package imageflow_abi --release for at kompilere libimageflow/imageflow.dll * cargo build --package imageflow_tool --release for at kompilere imageflow_tool(.exe) * cargo build --package imageflow_server --release for at kompilere imageflow_server(.exe) * cargo build --all --release for at kompilere alt i udgivelsestilstand * cargo doc --no-deps --all --release for at generere dokumentation.

Opbygning fra kildekode med Docker

Hvis du ønsker at replikere Imageflow CI-miljøet:

  1. Installer Docker
  2. Kør fra en bash-session (Docker + Windows WSL, macOS eller linux)
  3. git clone [email protected]:imazen/imageflow.gitcd imageflow./build_via_docker.sh debug

Dette vil oprette caches inden for ~/.docker_imageflow_caches specifikt for det anvendte Docker-image. Instanserne vil være flygtige; den eneste tilstand vil være i cacherne.

De officielle Dockerfiles er også et godt sted at få mere detaljerede trin til opsætning af miljøet, da vi ikke angiver trin til opsætning af:

  • Valgrind (almindelige versioner bryder openssl; du skal muligvis bygge fra kildekode)
  • Kodeafdækning
  • Bindinger.

Linux-forudsætninger

(testet på Ubuntu 16.04 og 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 Forudsætninger

  1. Installer XCode Command-Line Tools, hvis du ikke allerede har gjort det
  2. Installer Homebrew, hvis du ikke allerede har gjort det.
  3. Installer nasm, pkg-config og wgetbrew install nasm pkg-config wget
  4. Installer Rust

Windows WSL (Ubuntu Bionic Subsystem) Forudgående forudsætninger

  1. Installer Ubuntu 18.04 fra Windows Store
  2. Kør Ubuntu 18.04, og opret dit brugernavn/password
  3. sudo apt-get update for at opdatere tilgængelige pakker.
  4. Installer Rust 1.28+ ved at kørecurl https://sh.rustup.rs -sSf | sh -s -- -y --default-toolchain stable
  5. Sørg for at byggeværktøjer er installeret (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. (valgfrit) For at bruge en grafisk teksteditor skal du downloade imageflow til en “Windows”-mappe og derefter mappe den til en placering i Ubuntu.Hvis du f.eks. klonede imageflow til Documents/imageflow, ville du køre:ln -s /mnt/c/Users//Documents/imageflow ~/win_imageflow
  7. Sluk og genåbn Ubuntu

Windows 10 Forudsætninger

  1. Installer Visual Studio 2017 Build Tools (separat eller som en VS-komponent)
  2. Installer Git 64-bit.
  3. Run As Administrator NASM 64-bit installationsprogrammet – det vil ikke bede om det.
  4. Installer Rust 64-bit, hvis du ønsker 64-bit Imageflow, eller Rust 32-bit, hvis du ikke ønsker det.
  5. Installer værktøjskæde stable som standard, og bekræft tilføjelse af den til PATH.
  6. Åbn kommandolinjen og skift til dette repositoriums rodmappe
  7. Rediger ci/wintools/SETUP_PATH.bat for at sikre, at rust/cargo, nasm, git og Git/mingw64/bin alle er i %PATH%.
  8. Kør win_enter_env.bat for at starte en underskal (rediger den, hvis du vil have et 32-bit build)
  9. Alle build-kommandoer skal køres i underskallen. Kør cmd.exe /c "ci\wintools\win_verify_tools.bat" for at kontrollere, at værktøjerne er til stede.

Hvordan lærer man billedbehandling til nettet?

Først skal du læse High Performance Images for kontekst.

Der findes ikke mange gode lærebøger om emnet. Her er nogle fra min personlige bogreol. Mellem dem (og Wikipedia) var jeg i stand til at samle omkring 60 % af den viden, jeg havde brug for; resten fandt jeg ved at læse kildekoden til mange populære billedbehandlingsbiblioteker.

Jeg ville starte med at læse Principles of Digital Image Processing: Core Algorithms front-to-back, derefter Digital Image Warping. Wikipedia er også en nyttig reference, selv om de relevante sider ikke er forbundet eller kategoriseret sammen – brug specifikke søgeord som “bilinear interpolation” og “Lab color space”.

  • Digital Image Warping
  • Computer Graphics: Principles and Practice in C (2nd Edition)
  • Principles of Digital Image Processing: Grundlæggende teknikker
  • Principper for digital billedbehandling: Grundlæggende algoritmer
  • Principles of Digital Image Processing: Core Algorithms
  • Principles of Digital Image Processing: Avancerede metoder

Jeg har fundet kildekoden til OpenCV, LibGD, FreeImage, Libvips, Pixman, Cairo, ImageMagick, stb_image, Skia og FrameWave meget nyttig til at forstå implementeringer og overvejelser i den virkelige verden. De fleste lærebøger antager et uendeligt plan, ignorerer off-by-one-fejl, floating-point-begrænsninger, nøjagtighed af farverummet og operationel symmetri inden for et afgrænset område. Jeg kan ikke anbefale nogen lærebog som en præcis reference, men kun som et konceptuelt udgangspunkt. Jeg har lavet nogle noter vedrørende spørgsmål, som man skal være opmærksom på, når man opretter et billedbibliotek.

Også skal man huske på, at computer vision er meget forskellig fra billedfremstilling. I computervision betyder f.eks. resamplingnøjagtighed meget lidt. Men ved billedfremstilling serverer du billeder for fotografer, mennesker med en langt skarpere visuel opfattelse end den gennemsnitlige udvikler. De producerede billeder vil blive gengivet side om side med andre CSS-billeder og billeder, og den mindste ukorrekthed af betydning er meget synlig. Du konkurrerer med Lightroom; med offline-værktøjer, der giver visuelt perfekte resultater. Slutbruger-software vil blive kasseret, hvis fotograferne føler, at det forvansker deres arbejde.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.