imazen / imageflow

immagini ottimali a velocità incredibili

tests stato: release candidate

Docker PullsDocker Pullsview releases licenza: Scegli AGPLv3 o Commercial

Scarica strumenti incredibilmente veloci e sicuri per un moderno flusso di lavoro sulle immagini.

  • imageflow_tool è uno strumento a riga di comando per sperimentare, eseguire lavori batch o quando vuoi isolare il processo. Fino a 17 volte più veloce di ImageMagick. Produce anche file più piccoli con una qualità superiore.
  • imageflow_server può eseguire lavori JSON o manipolare le immagini in volo (ad esempio /bucket/img.jpg?w=200) per l’uso diretto daHTML. Le immagini di origine possono risiedere in uno stoccaggio blob, su un altro server o sul filesystem. Tuttavia, per l’uso in produzione, raccomandiamo di usare Imageflow.NET Server, che è molto più ricco di funzionalità e non ha bisogno di un reverse proxy davanti per la sicurezza.
  • libimageflow è per un uso diretto (in-process) dal vostro linguaggio di programmazione. Vedi i nostri binding per Node, Go, Scala, Elixir o .NET. Se non abbiamo già i binding per il vostro linguaggio, considerate di spendere un giorno per aggiungerli. Imageflow ha un ABI compatibile con simpleC, di cui sono necessari solo 4 metodi per implementare i binding.

Apri un problema per farci scrivere codice di esempio per il tuo caso d’uso. Crediamo nel design basato sul feedback, e semplificare l’uso nel mondo reale è il modo più veloce per ottenere un grande prodotto.

Documentazione API di querystring

Documentazione API di JSON

libimageflow, imageflow_tool, e imageflow_server sono disponibili come binari autocontenuti per Windows, Ubuntu e Mac. Offriamo anche immagini Docker per Linux (dove sono richiesti glibc e OpenSSL).

Ringraziamo i nostri finanziatori su Kickstarter e i molti sostenitori di ImageResizer per aver reso questo progetto una realtà.Visita Imageresizing.net se hai bisogno di un’eccezione AGPLv3 per uso commerciale.

Inizia con imageflow_tool (raccomandato)

imageflow_tool examples --generate – crea una directory di esempi con lavori JSON e script di invocazione.

Puoi usare stringhe di comando che sono compatibili con le querystring di ImageResizer 4:

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

O invia un file di lavoro JSON. I lavori JSON possono avere più ingressi e uscite, e possono rappresentare qualsiasi tipo di grafico di operazione.

Il seguente genera dimensioni multiple di un’immagine da un file di lavoro di esempio:

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

Di default, imageflow_tool stampa una risposta JSON su stdout. Si scrive su disco con --response.

--debug-package creerà un file .zip per riprodurre il comportamento problematico con entrambi v1/build e v1/querystring. Si prega di inviare segnalazioni di bug; cerchiamo di renderlo facile.

Usando imageflow_server per immagini dinamiche

imageflow_server start --demo

Ora puoi modificare le immagini da HTML… e usare srcset senza problemi.

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

Oltre la demo

Vuoi montare varie posizioni di origine delle immagini su prefissi. Il comando --mount analizza una lista di argomenti delimitata da due punti (:). Il primo è il prefisso che userai nell’URL (come http://localhost:39876/prefix/. Il secondo è il nome del motore. Gli argomenti rimanenti sono inviati al motore.

Esempi

  • --mount "/img/:ir4_local:C:\inetpub\wwwroot\images"
  • --mount "/proxyimg/:ir4_http:https:://myotherserver.com/imagefolder/" (notare il doppio escape dei due punti)
  • --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"

Usando libimageflow dalla tua lingua

  • .NET I binding standard possono essere trovati in https://github.com/imazen/imageflow-dotnet
  • I binding per i nodi sono disponibili in https://github.com/imazen/imageflow-node
  • Ruby – I binding di base possono essere trovati in bindings/ruby/
  • L’interfaccia C e C++ è stabile – usa bindings/headers/imageflow_default.h o una delle molte convenzioni alternative fornite con ogni release.
  • Rust – Imageflow è scritto in Rust, quindi è possibile utilizzare il crate imageflow_core.
  • altri linguaggi – Utilizzare uno strumento di generazione di binding FFI per la propria lingua, e fornirgli il file header che preferisce.

Potresti anche scoprire che imageflow_toolè abbastanza veloce per le tue esigenze.

Crati di questo progetto

  • imageflow_abi – L’API stabile di libimageflow/imageflow.dll.Gli header per libimageflow si trovano in bindings/headers
  • imageflow_tool – Lo strumento a riga di comando
  • imageflow_server – Il server HTTP
  • c_components – Un crate rust contenente i sorgenti C
  • c_components/tests – Test per i componenti C
  • imageflow_types – Tipi condivisi usati da molti crates, con serializzazione JSON
  • imageflow_helpers – Funzioni di aiuto e utilità comuni
  • imageflow_riapi – Parsing/layout di compatibilità RIAPI e ImageResizer4
  • imageflow_core – La libreria principale e il motore di esecuzione

Difetti noti e caratteristiche mancanti (a maggio 2020)

Difetti

  • imageflow_server non espone ancora l’API JSON.
  • Nessun fuzz testing o auditing di terze parti ancora.

Caratteristiche mancanti

  • Sfocatura.

Caratteristiche in ritardo

  • Previsione del costo del lavoro (in ritardo – nessun interesse da parte della comunità)

Avrete bisogno di più di Rust per compilare Imageflow, poiché ha un paio di dipendenze C.

  1. Installare i prerequisiti specifici della piattaforma (trovare la sezione giusta qui sotto).
  2. Clona e fai un cd in questo repositoryE.g, git clone [email protected]:imazen/imageflow.git && cd imageflow)

Se stai usando bash su qualsiasi piattaforma, dovresti essere in grado di usare build.sh

  • ./build.sh clean – per pulire
  • ./build.sh test – eseguire tutti i test
  • ./build.sh debug – generare binari di debug lenti
  • ./build.sh release – generare binari di rilascio
  • ./build.sh install – installare binari di rilascio in /usr/local (deve eseguire `./build.sh release prima)
  • ./build.sh uninstall – disinstalla i binari di rilascio

build.sh colloca i binari nella ./artifacts/ directory

Se sei su Windows, esegui solo i comandi di build nella finestra creata da win_enter_env.bat.

Si può anche costruire usando direttamente cargo, anche se questo metterà i binari in ./target/release.* cargo test --all per testare Imageflow in modalità debug (slooow)* cargo build --package imageflow_abi --release per compilare libimageflow/imageflow.dll* cargo build --package imageflow_tool --release per compilare imageflow_tool(.exe)* cargo build --package imageflow_server --release per compilare imageflow_server(.exe)* cargo build --all --release per compilare tutto in modalità release* cargo doc --no-deps --all --release per generare documentazione.

Costruire da sorgente con Docker

Se si vuole replicare l’ambiente CI di Imageflow:

  1. Installare Docker
  2. Eseguire da una sessione bash (Docker + Windows WSL, macOS, o linux)
  3. git clone [email protected]:imazen/imageflow.gitcd imageflow./build_via_docker.sh debug

Questo creerà cache all’interno ~/.docker_imageflow_caches specifiche per l’immagine docker utilizzata. Le istanze saranno effimere; l’unico stato sarà nelle cache.

I Dockerfiles ufficiali sono anche un ottimo posto per ottenere passi più dettagliati per la configurazione dell’ambiente, dato che non elenchiamo passi per la configurazione di:

  • Valgrind (le versioni comuni rompono openssl; potrebbe essere necessario costruire dal sorgente)
  • Copertura del codice
  • Bindings.

Pre-requisiti Linux

(testato su Ubuntu 16.04 e 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 `

Pre-requisiti Mac OS

  1. Installa XCode Command-Line Tools se non lo hai già fatto
  2. Installa Homebrew se non lo hai già fatto.
  3. Installare nasm, pkg-config e wgetbrew install nasm pkg-config wget
  4. Installare Rust

Windows WSL (Ubuntu Bionic Subsystem) Prerequisiti

  1. Installare Ubuntu 18.04 dal Windows Store
  2. Esegui Ubuntu 18.04 e crea il tuo nome utente/password
  3. sudo apt-get update per aggiornare i pacchetti disponibili.
  4. Installa Rust 1.28+ eseguendocurl https://sh.rustup.rs -sSf | sh -s -- -y --default-toolchain stable
  5. Assicurarsi che gli strumenti di compilazione siano installati (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. (opzionale) Per utilizzare un editor di testo grafico, è necessario scaricare imageflow in una directory “Windows”, quindi mapparla in una posizione in Ubuntu.Per esempio, se hai clonato imageflow in Documents/imageflow, dovresti eseguire:ln -s /mnt/c/Users//Documents/imageflow ~/win_imageflow
  7. Chiudi e riapri Ubuntu

Windows 10 Pre-requisiti

  1. Installa Visual Studio 2017 Build Tools (separatamente o come componente VS)
  2. Installa Git 64-bit.
  3. Run As Administrator il programma di installazione NASM 64-bit – non richiederà.
  4. Installa Rust 64-bit se vuoi Imageflow 64-bit o Rust 32-bit se non lo fai.Installa toolchain stable come predefinito, e conferma l’aggiunta a PATH.
  5. Aprire la linea di comando e passare alla directory principale di questo repository
  6. Modificare ci/wintools/SETUP_PATH.bat per assicurarsi che rust/cargo, nasm, git, e Git/mingw64/bin siano tutti in %PATH%.
  7. Eseguire win_enter_env.bat per avviare una sub-shell (modificarla se si vuole una build a 32 bit)
  8. Tutti i comandi di build dovrebbero essere eseguiti nella sub-shell. Esegui cmd.exe /c "ci\wintools\win_verify_tools.bat" per controllare che gli strumenti siano presenti.

Come si impara l’elaborazione delle immagini per il web?

Prima di tutto, leggi High Performance Images per il contesto.

Non ci sono molti grandi libri di testo sull’argomento. Eccone alcuni dalla mia libreria personale. Tra questi (e Wikipedia) sono stato in grado di mettere insieme circa il 60% delle conoscenze di cui avevo bisogno; il resto l’ho trovato leggendo il codice sorgente di molte popolari librerie di elaborazione delle immagini.

Inizierei leggendo Principi di elaborazione digitale delle immagini: Core Algorithms front-to-back, poi Digital Image Warping. Anche Wikipedia è un utile riferimento, sebbene le pagine rilevanti non siano collegate o categorizzate insieme – usa termini di ricerca specifici, come “interpolazione bilineare” e “spazio colore Lab”.

  • Digital Image Warping
  • Computer Graphics: Principi e pratica in C (2a edizione)
  • Principi dell’elaborazione digitale delle immagini: Tecniche fondamentali
  • Principi dell’elaborazione digitale delle immagini: Algoritmi fondamentali
  • Principi dell’elaborazione digitale delle immagini: Metodi avanzati

Ho trovato il codice sorgente di OpenCV, LibGD, FreeImage, Libvips, Pixman, Cairo, ImageMagick, stb_image, Skia, e FrameWave molto utile per capire le implementazioni e le considerazioni del mondo reale. La maggior parte dei libri di testo assume un piano infinito, ignora gli errori off-by-one, le limitazioni in virgola mobile, la precisione dello spazio colore e la simmetria operativa all’interno di una regione delimitata. Non posso raccomandare nessun libro di testo come riferimento accurato, solo come punto di partenza concettuale. Ho fatto alcune note riguardo ai problemi di cui essere consapevoli quando si crea una libreria di immagini.

Inoltre, tenete a mente che la computer vision è molto diversa dalla creazione di immagini. Nella computer vision, la precisione del ricampionamento conta molto poco, per esempio. Ma nella creazione di immagini, state servendo immagini a fotografi, persone con una percezione visiva molto più acuta dello sviluppatore medio. Le immagini prodotte saranno rese fianco a fianco con altri CSS e immagini, e la minima imprecisione significativa è abbastanza visibile. Siete in competizione con Lightroom; con strumenti offline che producono risultati visivamente perfetti. Il software per l’utente finale sarà scartato se i fotografi sentono che sta corrompendo il loro lavoro.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.