imazen / imageflow

optimaaliset kuvat uskomattomilla nopeuksilla

tests state: Release Candidate

Docker PullsDocker Pullsview releases license:

  • imageflow_tool on komentorivityökalu kokeilemiseen, erätöiden suorittamiseen,tai kun haluat eristää prosessin. Jopa 17x nopeampi kuin ImageMagick. Tuottaa myös pienempiä tiedostoja paremmalla laadulla.
  • imageflow_server voi ajaa JSON-tehtäviä tai manipuloida kuvia lennon aikana (esim./bucket/img.jpg?w=200) käytettäväksi suoraanHTML:stä. Lähdekuvat voivat sijaita blob-tallennuksessa, toisella palvelimella tai tiedostojärjestelmässä. Tuotantokäyttöön suosittelemme kuitenkin Imageflow.NET-palvelinta, joka on paljon monipuolisempi eikä tarvitse käänteistä välityspalvelinta turvallisuuden vuoksi.
  • libimageflow on tarkoitettu suoraan (prosessin sisäiseen) käyttöön ohjelmointikielestäsi. Katso Node-sidonnat, Go-sidonnat, Scala-sidonnat, Elixir-sidonnat tai .NET-sidonnat. Jos meillä ei vielä ole sidoksia kielellesi, harkitse päivän käyttämistä niiden lisäämiseen. Imageflow’lla on simpleC-yhteensopiva ABI, josta tarvitaan vain 4 metodia sidosten toteuttamiseen.

Avaa ongelma, jotta voimme kirjoittaa esimerkkikoodia käyttötapaukseesi. Uskomme palautteeseen perustuvaan suunnitteluun, ja reaalimaailman käytön virtaviivaistaminen on nopein tie loistavaan tuotteeseen.

Querystring API -dokumentaatio

JSON API -dokumentaatio

libimageflow, imageflow_tool ja imageflow_server ovat saatavana itsenäisinä binääripaketteina Windowsille, Ubuntulle ja Macille. Tarjoamme myös Docker-kuvia Linuxille (jossa tarvitaan glibc ja OpenSSL).

Kiitämme tukijoitamme Kickstarterissa ja monia ImageResizerin tukijoita siitä, että he tekivät tästä projektista totta.Käy osoitteessa Imageresizing.net, jos tarvitset AGPLv3-poikkeuksen kaupalliseen käyttöön.

Aloita imageflow_toolilla (suositellaan)

imageflow_tool examples --generate – luo esimerkkihakemiston, jossa on JSON-tehtäviä ja kutsuskriptejä.

Voit käyttää komentojonoja, jotka ovat yhteensopivia ImageResizer 4:n kyselyjonojen kanssa:

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

Ota lähetä JSON-tehtävätiedosto. JSON-työtehtävissä voi olla useita tuloja ja lähtöjä, ja ne voivat edustaa mitä tahansa operaatiograafia.

Seuraava esimerkki tuottaa usean kokoisen kuvan esimerkkitehtävätiedostosta:

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

Esimerkkinä imageflow_tool tulostaa oletusarvoisesti JSON-vastausviestin stdoutiin. Kirjoitat tämän levylle --response:llä.

--debug-package luo .zip-tiedoston, jolla toistetaan ongelmallinen käyttäytyminen sekä v1/build:n että v1/querystring:n kanssa. Lähetä vikailmoituksia; yritämme tehdä siitä helppoa.

Käyttämällä imageflow_serveriä dynaamiseen kuvankäsittelyyn

imageflow_server start --demo

Nyt voit muokata kuvia HTML:stä… ja käyttää srcset-ohjelmaa ilman päänvaivaa.

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

Demon lisäksi

Haluat liittää erilaiset kuvien lähdepaikat esiinnousuihin. Komento --mount jäsentää kaksoispisteellä (:) erotetun argumenttiluettelon. Ensimmäinen on etuliite, jota käytät URL-osoitteessa (kuten http://localhost:39876/prefix/. Toinen on moottorin nimi. Loput argumentit lähetetään moottorille.

Esimerkkejä

  • --mount "/img/:ir4_local:C:\inetpub\wwwroot\images"
  • --mount "/proxyimg/:ir4_http:https:://myotherserver.com/imagefolder/" (huomaa kaksoispisteen kaksinkertainen välilyönti)
  • --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"

Libimageflow’n käyttäminen kielestäsi

  • .NET Standardisidokset löytyvät osoitteesta https://github.com/imazen/imageflow-dotnet
  • Node-sidokset saatavilla osoitteesta https://github.com/imazen/imageflow-node
  • Ruby – Perussidokset löytyvät osoitteesta bindings/ruby/
  • C- ja C++ -rajapinta on vakaa – käytä bindings/headers/imageflow_default.h tai jotakin monista vaihtoehtoisista konventioista, jotka toimitetaan jokaisen julkaisun mukana.
  • Rust – Imageflow on kirjoitettu Rust-kielellä, joten voit käyttää imageflow_core cratea.
  • muut kielet – Käytä kielesi FFI-sidontatyökalua ja syötä sille se otsikkotiedosto, josta se pitää eniten.

Voit myös huomata, että imageflow_tool on tarpeeksi nopea tarpeisiisi.

Tämän projektin sisältämät laatikot

  • imageflow_abi – libimageflow/imageflow.dll:n vakaa API.Libimageflow’n otsikot sijaitsevat bindings/headers
  • imageflow_tool – Komentorivityökalu
  • imageflow_server – HTTP-palvelin
  • c_components – C-lähdekoodin sisältävä rust-luokka
  • c_components/tests – Testit C-komponenteille
  • imageflow_types – Useimmissa luokkakoodeissa käytettävät jaetut tyypit, JSON-serialisoinnilla
  • imageflow_helpers – Yleiset apufunktiot ja apuohjelmat
  • imageflow_riapi – RIAPI- ja ImageResizer4-yhteensopivuus parsing/layout
  • imageflow_core – RIAPI- ja ImageResizer4-yhteensopivuus – RIAPI- ja ImageResizer4-yhteensopivuus – RIAPI-yhteensopivuus Pääkirjasto ja suoritusmoottori

Tunnetut virheet ja puuttuvat ominaisuudet (toukokuussa 2020)

Virheet

  • imageflow_server ei vielä paljasta JSON API:ta.
  • Ei vielä fuzz-testausta tai kolmannen osapuolen auditointia.

Puuttuvat ominaisuudet

  • Blurring.

Viivästyneet ominaisuudet

  • Työn kustannusten ennustaminen (viivästynyt – ei kiinnostusta yhteisöltä)

Tarvitset muutakin kuin Rustia kääntääksesi Imageflow’n, koska sillä on muutama C-riippuvuus.

  1. Asenna alustakohtaiset ennakkoedellytykset (löydät oikean kohdan alta).
  2. Kloonaa ja cd tähän repositoryynE.g., git clone [email protected]:imazen/imageflow.git && cd imageflow)

Jos käytät bash millä tahansa alustalla, sinun pitäisi pystyä käyttämään build.sh

  • ./build.sh clean – puhdistamaan
  • ./build.sh test – suorittamaan kaikki testit
  • ./build.sh debug – tuottamaan hitaat debug-binäärit
  • ./build.sh release – tuottamaan julkaisubinäärit
  • ./build.sh install – asentamaan julkaisubinäärit /usr/local:een (täytyy ajaa `./build.sh release ensin)
  • ./build.sh uninstall – poista release-binäärit

build.sh sijoittaa binäärit ./artifacts/ directory

Jos olet Windows-käyttöjärjestelmässä, suorita build-komennot vain win_enter_env.bat luodussa ikkunassa.

Voit myös rakentaa käyttämällä suoraan cargo, vaikka tämä sijoittaa binäärit sen sijaan ./target/release:ään.* cargo test --all testataksesi Imageflow’ta debug (hidas) -tilassa* cargo build --package imageflow_abi --release kääntääksesi libimageflow/imageflow.dll* cargo build --package imageflow_tool --release kääntääksesi imageflow_tool(.exe)* cargo build --package imageflow_server --release kääntääksesi imageflow_server(.exe)* cargo build --all --release kääntääksesi kaiken julkaisutilassa* cargo doc --no-deps --all --release luodaksesi dokumentaatiota.

Rakentaminen lähdekoodista Dockerin avulla

Jos haluat kopioida Imageflow CI-ympäristön:

  1. Asenna Docker
  2. Käynnistä bash-istunnosta (Docker + Windows WSL, macOS tai linux)
  3. git clone [email protected]:imazen/imageflow.gitcd imageflow./build_via_docker.sh debug

Tällöin luodaan käytetylle Docker-ikamalle ominaista välimuistia ~/.docker_imageflow_caches. Instansseista tulee ephemeral; ainoa tila on kätköissä.

Viralliset Dockerfilet ovat myös hyvä paikka saada yksityiskohtaisempia ympäristön asennusvaiheita, sillä emme listaa vaiheita asetusten määrittämiseen:

  • Valgrind (yleiset versiot rikkovat openssl:n; saatat joutua rakentamaan lähdekoodista)
  • Koodin kattavuus
  • Sidonnat.

Linux-edellytykset

(testattu Ubuntu 16.04 ja 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 Edellytykset

  1. Asenna XCode-komentorivityökalut, jos et ole vielä
  2. Asenna Homebrew, jos et ole vielä.
  3. Asenna nasm, pkg-config ja wgetbrew install nasm pkg-config wget
  4. Asenna Rust

Windows WSL (Ubuntu Bionic Subsystem) Edellytykset

  1. Asenna Ubuntu 18.04 Windows Storesta
  2. Käynnistä Ubuntu 18.04 ja luo käyttäjätunnus/salasana
  3. sudo apt-get update päivittääksesi käytettävissä olevat paketit.
  4. Asenna Rust 1.28+ ajamallacurl https://sh.rustup.rs -sSf | sh -s -- -y --default-toolchain stable
  5. Varmista, että rakennustyökalut on asennettu (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. (valinnainen) Käyttääksesi graafista tekstinkäsittelyohjelmaa sinun on ladattava imageflow ”Windows”-hakemistoon ja mapattava se sitten Ubuntussa olevaan paikkaan.Jos esimerkiksi kloonasit imageflow’n hakemistoon Documents/imageflow, suoritat seuraavasti:ln -s /mnt/c/Users//Documents/imageflow ~/win_imageflow
  7. Sulje ja avaa Ubuntu uudelleen

Windows 10 Edellytykset

  1. Asenna Visual Studio 2017 Build Tools (erikseen tai VS-komponenttina)
  2. Asenna Git 64-bittinen.
  3. Run As Administrator NASM 64-bittinen asennusohjelma – se ei kysy.
  4. Asenna Rust 64-bittinen, jos haluat 64-bittisen Imageflow’n, tai Rust 32-bittinen, jos et halua.Asenna työkaluketju stable oletuksena ja vahvista sen lisääminen PATH.
  5. Avaa komentorivi ja siirry tämän arkiston juurihakemistoon
  6. Muokkaa ci/wintools/SETUP_PATH.bat varmistaaksesi, että rust/cargo, nasm, git ja Git/mingw64/bin ovat kaikki %PATH%:ssä.
  7. Ajoita win_enter_env.bat aloittaaksesi ali-kuoren (muokkaamalla sitä, jos tahdot 32-bittisen rakentamisen)
  8. Kaikki rakentamiskäskyt on ajettava ali-kuoressa. Suorita cmd.exe /c "ci\wintools\win_verify_tools.bat" tarkistaaksesi, että työkalut ovat mukana.

Miten oppii kuvankäsittelyä webiä varten?

Lue ensin High Performance Images for context.

Asiasta ei ole paljon hyviä oppikirjoja. Tässä muutamia henkilökohtaisesta kirjahyllystäni. Niiden (ja Wikipedian) avulla sain koottua noin 60 % tarvitsemastani tiedosta; loput löysin lukemalla monien suosittujen kuvankäsittelykirjastojen lähdekoodia.

Aloittaisin lukemalla Principles of Digital Image Processing: Core Algorithms edestä taaksepäin, sitten Digital Image Warping. Wikipedia on myös hyödyllinen hakuteos, vaikka asiaankuuluvia sivuja ei ole linkitetty tai luokiteltu yhteen – käytä erityisiä hakusanoja, kuten ”bilinear interpolation” ja ”Lab color space”.

  • Digital Image Warping
  • Computer Graphics: Principles and Practice in C (2nd Edition)
  • Principles of Digital Image Processing: Fundamental Techniques
  • Principles of Digital Image Processing: Core Algorithms
  • Principles of Digital Image Processing: Advanced Methods

Olen huomannut, että OpenCV:n, LibGD:n, FreeImagen, Libvipsin, Pixmanin, Cairon, ImageMagickin, stb_imagen, Skian ja FrameWaven lähdekoodit ovat erittäin hyödyllisiä reaalimaailman toteutusten ja näkökohtien ymmärtämiseksi. Useimmissa oppikirjoissa oletetaan ääretön taso, jätetään huomiotta off-by-one-virheet, liukulukurajoitukset, väriavaruuden tarkkuus ja toiminnallinen symmetria rajatulla alueella. En voi suositella mitään oppikirjaa tarkaksi viitteeksi, ainoastaan käsitteelliseksi lähtökohdaksi. Tein joitakin muistiinpanoja asioista, jotka on syytä ottaa huomioon, kun luodaan kuvakirjastoa.

Muista myös, että tietokonenäkö on hyvin erilaista kuin kuvien luominen. Tietokonenäössä esimerkiksi resampling-tarkkuudella on hyvin vähän merkitystä. Mutta kuvien luomisessa tarjoat kuvia valokuvaajille, ihmisille, joilla on paljon tarkempi visuaalinen havaintokyky kuin keskivertokehittäjällä. Tuotetut kuvat renderöidään rinnakkain muiden CSS:ien ja kuvien kanssa, ja pienikin epätarkkuus on varsin näkyvää. Kilpailet Lightroomin kanssa; offline-työkalujen kanssa, jotka tuottavat visuaalisesti täydellisiä tuloksia. Loppukäyttäjäohjelmisto hylätään, jos valokuvaajat kokevat, että se turmelee heidän työnsä.

Vastaa

Sähköpostiosoitettasi ei julkaista.