imazen / imageflow

imagini optime la viteze incredibile

tests state: release candidate

Docker PullsDocker Pullsvedere versiuni licență: Alegeți AGPLv3 sau Commercial

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.

  1. Instalați prerechizitele specifice platformei (găsiți secțiunea potrivită mai jos).
  2. 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:

  1. Instalați Docker
  2. Executați dintr-o sesiune bash (Docker + Windows WSL, macOS sau linux)
  3. 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

  1. Instalați XCode Command-Line Tools dacă nu ați făcut-o deja
  2. Instalați Homebrew dacă nu ați făcut-o deja.
  3. Instalați nasm, pkg-config și wgetbrew install nasm pkg-config wget
  4. Instalați Rust

Windows WSL (Ubuntu Bionic Subsystem) Cerințe prealabile

  1. Instalați Ubuntu 18.04 din Windows Store
  2. Executați Ubuntu 18.04 și creați-vă un nume de utilizator/parolă
  3. sudo apt-get update pentru a actualiza pachetele disponibile.
  4. Instalați Rust 1.28+ rulândcurl https://sh.rustup.rs -sSf | sh -s -- -y --default-toolchain stable
  5. 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
  6. (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
  7. Închideți și redeschideți Ubuntu

Precondiții Windows 10

  1. Instalați Visual Studio 2017 Build Tools (separat sau ca o componentă VS)
  2. Instalați Git pe 64 de biți.
  3. Run As Administrator instalatorul NASM pe 64 de biți – nu vă va solicita.
  4. 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 la PATH.
  5. Deschideți linia de comandă și treceți în directorul rădăcină al acestui depozit
  6. 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%.
  7. 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)
  8. 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.

.

Lasă un răspuns

Adresa ta de email nu va fi publicată.