- imagini optime la viteze incredibile
- Începeți cu imageflow_tool (recomandat)
- Utilizarea imageflow_server pentru imagistică dinamică
- Dincolo de demonstrație
- Exemple
- Utilizarea libimageflow din limbajul tău
- Crates în cadrul acestui proiect
- Defecte cunoscute și caracteristici lipsă (din mai 2020)
- Defecte
- Funcționalități lipsă
- Funcționalități întârziate
- Construirea din sursă cu Docker
- Precondiții Linux
- Precondiții Mac OS
- Windows WSL (Ubuntu Bionic Subsystem) Cerințe prealabile
- Precondiții Windows 10
- Cum se învață procesarea imaginilor pentru web?
imagini optime la viteze incredibile
Descărcați instrumente extrem de rapide și mai sigure pentru un flux de lucru modern al imaginilor.
- imageflow_tool este un instrument de linie de comandă pentru experimente, pentru rularea de lucrări pe loturi sau atunci când doriți izolarea proceselor. Până la 17x mai rapid decât ImageMagick. De asemenea, produce fișiere mai mici la o calitate mai mare.
- imageflow_server poate rula sarcini JSON sau manipula imagini în zbor (de exemplu,
/bucket/img.jpg?w=200
) pentru utilizare directă dinHTML. Imaginile sursă pot rezida în blob storage, pe un alt server sau în sistemul de fișiere. Cu toate acestea, pentru utilizarea în producție, vă recomandăm să folosiți Imageflow.NET Server, care este mult mai bogat în funcții și nu are nevoie de un proxy invers în față pentru securitate. - libimageflow este pentru utilizare directă (în proces) din limbajul dumneavoastră de programare. Consultați legăturile noastre Node, Go, Scala, Elixir sau .NET. Dacă nu avem deja legături pentru limbajul dvs., luați în considerare posibilitatea de a petrece o zi pentru a le adăuga. Imageflow are un ABI compatibil cu simpleC, din care sunt necesare doar 4 metode pentru a implementa bindings.
Deschideți o problemă pentru a ne cere să scriem cod de exemplu pentru cazul dumneavoastră de utilizare. Credem în proiectarea bazată pe feedback, iar eficientizarea utilizării în lumea reală este cea mai rapidă cale către un produs excelent.
Querystring API Documentation
JSON API Documentation
libimageflow, imageflow_tool și imageflow_server sunt disponibile ca binari autoconținuți pentru Windows, Ubuntu și Mac. De asemenea, oferim imagini Docker pentru Linux (unde sunt necesare glibc și OpenSSL).
Le mulțumim susținătorilor noștri de pe Kickstarterși numeroșilor susținători ai ImageResizer pentru că au făcut din acest proiect o realitate.Vizitați Imageresizing.net dacă aveți nevoie de o excepție AGPLv3 pentru utilizare comercială.
Începeți cu imageflow_tool (recomandat)
imageflow_tool examples --generate
– creează un director de exemple cu joburi JSON și scripturi de invocare.
Puteți utiliza șiruri de comenzi care sunt compatibile cu șirurile de interogare ImageResizer 4:
imageflow_tool v1/querystring --in source.jpg --out thumb.jpg --command "width=50&height=50&mode=crop&format=jpg"
Sau trimiteți un fișier de joburi JSON. Joburile JSON pot avea mai multe intrări și ieșiri și pot reprezenta orice tip de grafic de operații.
Cele ce urmează generează mai multe dimensiuni ale unei imagini dintr-un fișier de job de exemplu:
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
În mod implicit, imageflow_tool imprimă un răspuns JSON pe stdout. Scrieți acest lucru pe disc cu --response
.
--debug-package
va crea un fișier .zip pentru a reproduce comportamentul problematic atât cu v1/build
cât și cu v1/querystring
. Vă rugăm să trimiteți rapoarte de eroare; încercăm să o facem ușor.
Utilizarea imageflow_server pentru imagistică dinamică
imageflow_server start --demo
Acum puteți edita imagini din HTML… și folosi srcset fără dureri de cap.
<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" />
Dincolo de demonstrație
Voi dori să montați diverse locații ale surselor de imagini la prefixe. Comanda --mount
analizează o listă de argumente delimitată de două puncte (:
). Primul este prefixul pe care îl veți folosi în URL (cum ar fi http://localhost:39876/prefix/
. Al doilea este numele motorului. Restul argumentelor sunt trimise către motor.
Exemple
--mount "/img/:ir4_local:C:\inetpub\wwwroot\images"
-
--mount "/proxyimg/:ir4_http:https:://myotherserver.com/imagefolder/"
(observați scăparea dublă a celor două puncte) --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"
.
Utilizarea libimageflow din limbajul tău
- .NET Legăturile standard pot fi găsite la https://github.com/imazen/imageflow-dotnet
- Legăturile pentru noduri sunt disponibile la https://github.com/imazen/imageflow-node
- Ruby – Legăturile de bază pot fi găsite în bindings/ruby/
- Interfața C și C++ este stabilă – folosiți bindings/headers/imageflow_default.h sau una dintre numeroasele convenții alternative furnizate cu fiecare versiune.
- Rust – Imageflow este scris în Rust, astfel încât puteți utiliza crăiasa
imageflow_core
. - alte limbaje – Utilizați un instrument de generare a legăturilor FFI pentru limbajul dvs. și alimentați-l cu orice fișier antet care îi place cel mai mult.
De asemenea, este posibil să găsiți că imageflow_tool
este destul de rapid pentru nevoile dumneavoastră.
Crates în cadrul acestui proiect
- imageflow_abi – API-ul stabil al libimageflow/imageflow.dll.Antetele pentru libimageflow sunt localizate în
bindings/headers
- imageflow_tool – Instrumentul de linie de comandă
- imageflow_server – Serverul HTTP
- c_components – Un crate ruginit care conține sursa C
- c_components/tests – Teste pentru componentele C
- imageflow_types – Tipuri partajate utilizate de majoritatea crates, cu serializare JSON
- imageflow_helpers – Funcții de ajutor și utilități comune
- imageflow_riapi – Parsarea/dispoziția de compatibilitate cu RIAPI și ImageResizer4
- imageflow_core – Biblioteca principală și motorul de execuție
Defecte cunoscute și caracteristici lipsă (din mai 2020)
Defecte
- imageflow_server nu expune încă API JSON.
- Nu există încă teste fuzz sau audit de la terți.
Funcționalități lipsă
- Blurring.
Funcționalități întârziate
- Predicția costului lucrărilor (întârziată – fără interes din partea comunității)
Voi avea nevoie de mai mult decât de Rust pentru a compila Imageflow, deoarece are câteva dependențe C.
- Instalați prerechizitele specifice platformei (găsiți secțiunea potrivită mai jos).
- Clonează și cd în acest depozitE.g.,
git clone [email protected]:imazen/imageflow.git && cd imageflow
)
Dacă folosiți bash
pe orice platformă, ar trebui să puteți folosi build.sh
-
./build.sh clean
– să curățați -
./build.sh test
– să rulați toate testele -
./build.sh debug
– să generați binarele de depanare lentă -
./build.sh release
– să generați binarele de lansare -
./build.sh install
– să instalați binarele de lansare în/usr/local
(trebuie să rulați `./build.sh release mai întâi) -
./build.sh uninstall
– dezinstalează binarele release
build.sh
plasează binarele în ./artifacts/ directory
Dacă sunteți pe Windows, rulați comenzile de construire numai în fereastra creată de win_enter_env.bat
.
De asemenea, puteți construi folosind direct cargo
, deși acest lucru va plasa binarele în ./target/release
în loc de ./target/release
. * cargo test --all
pentru a testa Imageflow în modul debug (slooow)* cargo build --package imageflow_abi --release
pentru a compila libimageflow/imageflow.dll
* cargo build --package imageflow_tool --release
pentru a compila imageflow_tool(.exe)
* cargo build --package imageflow_server --release
pentru a compila imageflow_server(.exe)
* cargo build --all --release
pentru a compila totul în modul release* cargo doc --no-deps --all --release
pentru a genera documentația.
Construirea din sursă cu Docker
Dacă doriți să replicați mediul Imageflow CI:
- Instalați Docker
- Executați dintr-o sesiune bash (Docker + Windows WSL, macOS sau linux)
-
git clone [email protected]:imazen/imageflow.gitcd imageflow./build_via_docker.sh debug
Aceasta va crea cache-uri în cadrul ~/.docker_imageflow_caches
specifice imaginii docker utilizate. Instanțele vor fi efemere; singura stare va fi în cache-uri.
Filele oficiale Docker sunt, de asemenea, un loc excelent pentru a obține pași mai detaliați de configurare a mediului, deoarece noi nu enumerăm pașii pentru configurarea:
- Valgrind (versiunile comune sparg openssl; este posibil să fie nevoie să construiți din sursă)
- Code coverage
- Bindings.
Precondiții Linux
(testat pe Ubuntu 16.04 și 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 `
Precondiții Mac OS
- Instalați XCode Command-Line Tools dacă nu ați făcut-o deja
- Instalați Homebrew dacă nu ați făcut-o deja.
- Instalați nasm, pkg-config și wget
brew install nasm pkg-config wget
- Instalați Rust
Windows WSL (Ubuntu Bionic Subsystem) Cerințe prealabile
- Instalați Ubuntu 18.04 din Windows Store
- Executați Ubuntu 18.04 și creați-vă un nume de utilizator/parolă
-
sudo apt-get update
pentru a actualiza pachetele disponibile. - Instalați Rust 1.28+ rulând
curl https://sh.rustup.rs -sSf | sh -s -- -y --default-toolchain stable
- Asigurați-vă că sunt instalate instrumentele de construcție (git, curl, wget, gcc, g++, nasm, pkg-config, openssl, ca-certificate)
sudo apt-get install git wget curl build-essential pkg-config libssl-dev libpng-dev nasm
- (opțional) Pentru a utiliza un editor grafic de text, va trebui să descărcați imageflow într-un director „Windows”, apoi să îl mapezi într-o locație din Ubuntu.De exemplu, dacă ați clonat imageflow în Documents/imageflow, veți rula:
ln -s /mnt/c/Users//Documents/imageflow ~/win_imageflow
- Închideți și redeschideți Ubuntu
Precondiții Windows 10
- Instalați Visual Studio 2017 Build Tools (separat sau ca o componentă VS)
- Instalați Git pe 64 de biți.
-
Run As Administrator
instalatorul NASM pe 64 de biți – nu vă va solicita. - Instalați Rust pe 64 de biți dacă doriți Imageflow pe 64 de biți sau Rust pe 32 de biți dacă nu doriți.Instalați lanțul de instrumente
stable
ca implicit și confirmați adăugarea acestuia laPATH
. - Deschideți linia de comandă și treceți în directorul rădăcină al acestui depozit
- Editați
ci/wintools/SETUP_PATH.bat
pentru a vă asigura că rust/cargo, nasm, git și Git/mingw64/bin se află toate în%PATH%
. - Executați
win_enter_env.bat
pentru a porni un sub-shell (editați-l dacă doriți o construcție pe 32 de biți) - Toate comenzile de construcție ar trebui să fie executate în sub-shell. Rulați
cmd.exe /c "ci\wintools\win_verify_tools.bat"
pentru a verifica dacă instrumentele sunt prezente.
Cum se învață procesarea imaginilor pentru web?
În primul rând, citiți Imagini de înaltă performanță pentru context.
Nu există multe manuale mari pe această temă. Iată câteva din raftul meu personal de cărți. Între ele (și Wikipedia) am reușit să pun laolaltă aproximativ 60% din cunoștințele de care aveam nevoie; restul le-am găsit citind codul sursă al multor biblioteci populare de procesare a imaginilor.
Am începe prin a citi Principles of Digital Image Processing: Core Algorithms front-to-back, apoi Digital Image Warping. Wikipedia este, de asemenea, o referință utilă, deși paginile relevante nu sunt legate sau clasificate împreună – folosiți termeni de căutare specifici, cum ar fi „bilinear interpolation” și „Lab color space”.
- Digital Image Warping
- Computer Graphics: Principles and Practice in C (Ediția a 2-a)
- Principii de prelucrare digitală a imaginilor: Tehnici fundamentale
- Principii de prelucrare digitală a imaginilor: Algoritmi de bază
- Principii de prelucrare digitală a imaginilor: Advanced Methods
Am constatat că codul sursă pentru OpenCV, LibGD, FreeImage, Libvips, Pixman, Cairo, ImageMagick, stb_image, Skia și FrameWave este foarte util pentru a înțelege implementările și considerațiile din lumea reală. Majoritatea manualelor presupun un plan infinit, ignoră erorile off-by-one, limitările în virgulă mobilă, precizia spațiului de culoare și simetria operațională într-o regiune delimitată. Nu pot recomanda niciun manual ca fiind o referință precisă, ci doar ca punct de plecare conceptual. Am făcut câteva însemnări cu privire la aspectele de care trebuie să ținem cont atunci când creăm o bibliotecă de imagini.
De asemenea, rețineți că viziunea computerizată este foarte diferită de crearea de imagini. În viziunea computerizată, precizia de reeșantionare contează foarte puțin, de exemplu. Dar în crearea de imagini, serviți imagini fotografilor, oameni cu o percepție vizuală mult mai ascuțită decât dezvoltatorul mediu. Imaginile produse vor fi redate cot la cot cu alte CSS și imagini, iar cea mai mică inexactitate semnificativă este foarte vizibilă. Sunteți în competiție cu Lightroom; cu instrumente offline care produc rezultate perfecte din punct de vedere vizual. Software-ul de utilizator final va fi aruncat dacă fotografii simt că acesta le corupe munca.
.