imazen / imageflow

optimális képek hihetetlen sebességgel

tests state: release candidate

Docker PullsDocker Pullsview releases license:

  • Az imageflow_tool egy parancssori eszköz kísérletezéshez, kötegelt munkák futtatásához,vagy amikor a folyamatok elkülönítésére van szükség. Akár 17x gyorsabb, mint az ImageMagick. Kisebb fájlokat is készít jobb minőségben.
  • Az imageflow_server képes JSON munkák futtatására vagy a képek menet közbeni manipulálására (pl./bucket/img.jpg?w=200) aHTML-ből való közvetlen felhasználáshoz. A forrásképek lehetnek blob tárolóban, egy másik szerveren vagy a fájlrendszerben. Termelési célú felhasználásra azonban az Imageflow.NET Server használatát javasoljuk, amely sokkal több funkcióval rendelkezik, és a biztonság érdekében nem igényel elöl fordított proxyt.
  • A libimageflow a programozási nyelvből történő közvetlen (folyamat közbeni) használatra szolgál. Lásd a Node kötéseinket, Go kötéseinket, Scala kötéseinket, Elixir kötéseinket vagy .NET kötéseinket. Ha még nincsenek kötéseink az Ön nyelvéhez, fontolja meg, hogy egy napot áldoz arra, hogy hozzáadja őket. Az Imageflow rendelkezik egy simpleC-kompatibilis ABI-vel, amelyből mindössze 4 metódusra van szükség a kötések megvalósításához.

Open an issue to have us write example code for your use case. Hiszünk a visszajelzésvezérelt tervezésben, és a valós használat egyszerűsítése a leggyorsabb út a nagyszerű termékhez.

Querystring API dokumentáció

JSON API dokumentáció

libimageflow, imageflow_tool és imageflow_server önálló bináris programcsomagok Windows, Ubuntu és Mac rendszerekre. Linuxhoz Docker-képeket is kínálunk (ahol glibc és OpenSSL szükséges).

Köszönjük a Kickstarteren támogatóknak és az ImageResizer számos támogatójának, hogy megvalósíthatták ezt a projektet.Látogasson el az ImageResizing.net oldalra, ha kereskedelmi felhasználáshoz AGPLv3 kivételre van szüksége.

Kezdje az imageflow_tool (ajánlott)

imageflow_tool examples --generate – létrehoz egy példák könyvtárat JSON munkákkal és hívószkriptekkel.

Az ImageResizer 4 lekérdezőszövegeivel kompatibilis parancssorokat használhatja:

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

Vagy küldjön egy JSON munkafájlt. A JSON munkáknak több bemenete és kimenete lehet, és bármilyen műveleti gráfot ábrázolhatnak.

A következőkben egy kép több méretét generáljuk egy példafeladatfájlból:

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

Az imageflow_tool alapértelmezés szerint JSON választ ír ki az stdoutra. Ezt a --response-vel írja ki a lemezre.

--debug-package létrehoz egy .zip fájlt, hogy reprodukálja a problémás viselkedést mind a v1/build, mind a v1/querystring esetén. Kérjük, küldj hibajelentéseket; igyekszünk megkönnyíteni a dolgodat.

Imageflow_server használata dinamikus képalkotáshoz

imageflow_server start --demo

Most már HTML-ből is szerkeszthetsz képeket… és fejfájás nélkül használhatod az srcset.

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

A demón túl

A különböző képforráshelyeket előtagokhoz akarsz majd csatolni. A --mount parancs egy kettősponttal (:) határolt argumentumlistát elemez. Az első az URL-ben használni kívánt előtag (például http://localhost:39876/prefix/. A második a motor neve. A többi argumentumot elküldi a motornak.

Példák

  • --mount "/img/:ir4_local:C:\inetpub\wwwroot\images"
  • --mount "/proxyimg/:ir4_http:https:://myotherserver.com/imagefolder/" (vegye figyelembe a kettőspont kettős szedését)
  • --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"

A libimageflow használata a nyelvedből

  • .NET Standard kötések a https://github.com/imazen/imageflow-dotnet
  • Node kötések elérhetőek a https://github.com/imazen/imageflow-node
  • Ruby – Basic kötések a bindings/ruby/
  • C és C++ interfész stabil – használja a bindings/headers/imageflow_default.h-t vagy az egyes kiadásokhoz mellékelt számos alternatív konvenció egyikét.
  • Rust – Az Imageflow Rust nyelven íródott, így használhatod a imageflow_core crate-et.
  • más nyelvek – Használj egy FFI kötésgeneráló eszközt a nyelvedhez, és tápláld azzal a fejlécfájllal, amelyik a legjobban tetszik neki.

Azt is megtalálhatod, hogy a imageflow_tool elég gyors az igényeidhez.

A projektben található ládák

  • imageflow_abi – A libimageflow/imageflow.dll stabil API-ja.A libimageflow fejléceit a bindings/headers
  • imageflow_tool – A parancssori eszköz
  • imageflow_server – A HTTP szerver
  • c_components – A C forrást tartalmazó rozsdás crate
  • c_components/tests – A C komponensek tesztjei
  • imageflow_types – A legtöbb crate által használt közös típusok, JSON szerializációval
  • imageflow_helpers – Közös segédfüggvények és segédprogramok
  • imageflow_riapi – RIAPI és ImageResizer4 kompatibilitás elemzése/elrendezése
  • imageflow_core – RIAPI és ImageResizer4 kompatibilitás elemzése/elrendezés
  • imageflow_core – A fő könyvtár és végrehajtási motor

Ismert hibák és hiányzó funkciók (2020 májusától)

Hibák

  • imageflow_server még nem teszi közzé a JSON API-t.
  • Még nincs fuzz tesztelés vagy harmadik fél általi auditálás.

Hiányzó funkciók

  • Blurring.

Késleltetett funkciók

  • Job cost prediction (delayed – no interest from community)

Az Imageflow lefordításához nem csak Rustra lesz szükséged, mivel van néhány C függősége.

  1. Telepítsd a platform-specifikus előfeltételeket (lentebb megtalálod a megfelelő részt).
  2. Klónozd és cd-zd be ezt a repositoryt Pl, git clone [email protected]:imazen/imageflow.git && cd imageflow)

Ha a bash bármelyik platformon használja, a build.sh

  • ./build.sh clean – a tisztításhoz
  • ./build.sh test – az összes teszt futtatásához
  • ./build.sh debug – lassú hibakereső binárisok generálásához
  • ./build.sh release – kiadási binárisok generálásához
  • ./build.sh install – kiadási binárisok telepítéséhez a /usr/local (futtatni kell a `./build.sh release először)
  • ./build.sh uninstall – uninstall release binárisok

build.sh elhelyezi a binárisokat a ./artifacts/ directory

Ha Windowson vagyunk, csak a win_enter_env.bat által létrehozott ablakban futtassuk a build parancsokat.

Az cargo közvetlen használatával is építhet, bár ez a binárisokat a ./target/release-be helyezi helyette.* cargo test --all az Imageflow teszteléséhez debug (lassú) módban* cargo build --package imageflow_abi --release a libimageflow/imageflow.dll lefordításához* cargo build --package imageflow_tool --release a imageflow_tool(.exe) lefordításához* cargo build --package imageflow_server --release a imageflow_server(.exe) lefordításához* cargo build --all --release minden lefordításához release módban* cargo doc --no-deps --all --release a dokumentáció létrehozásához.

Building from Source with Docker

Ha az Imageflow CI környezetét szeretné megismételni:

  1. Install Docker
  2. Futtatás bash munkamenetből (Docker + Windows WSL, macOS vagy linux)
  3. git clone [email protected]:imazen/imageflow.gitcd imageflow./build_via_docker.sh debug

Ez a használt docker image-re jellemző ~/.docker_imageflow_caches cache-eket hoz létre a ~/.docker_imageflow_caches-ben. A példányok efemerek lesznek; az egyetlen állapot a gyorsítótárakban lesz.

A hivatalos Dockerfiles is remek hely a részletesebb környezet beállítási lépésekhez, mivel nem soroljuk fel a beállítási lépéseket:

  • Valgrind (a gyakori verziók megtörik az openssl-t; lehet, hogy forrásból kell építeni)
  • Code coverage
  • Bindings.

Linux előfeltételek

(tesztelve Ubuntu 16.04 és 18.04 rendszereken.)

#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 előfeltételek

  1. Telepítse az XCode parancssori eszközöket, ha még nem tette meg
  2. Telepítse a Homebrew-t, ha még nem tette meg.
  3. Telepítse a nasm, pkg-config és wgetbrew install nasm pkg-config wget
  4. Telepítse a Rustot

Windows WSL (Ubuntu Bionic Subsystem) Előfeltételek

  1. Telepítse az Ubuntu 18.04 a Windows Store-ból
  2. Futtassa az Ubuntu 18.04-et és hozza létre a felhasználónevét/jelszavát
  3. sudo apt-get update az elérhető csomagok frissítéséhez.
  4. Telepítse a Rust 1.28+ futtatásávalcurl https://sh.rustup.rs -sSf | sh -s -- -y --default-toolchain stable
  5. Győződjön meg róla, hogy a build eszközök telepítve vannak (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. (opcionális) A grafikus szövegszerkesztő használatához le kell töltenie az imageflow-t egy “Windows” könyvtárba, majd le kell képeznie az Ubuntu egyik helyére.Ha például az imageflow-t a Documents/imageflow könyvtárba klónozta, akkor a következőket kell futtatnia:ln -s /mnt/c/Users//Documents/imageflow ~/win_imageflow
  7. Zárja be és nyissa meg újra az Ubuntut

Windows 10 előfeltételek

  1. Telepítse a Visual Studio 2017 Build Tools-t (külön vagy VS komponensként)
  2. Telepítse a Git 64-bites.
  3. Run As Administrator a NASM 64-bites telepítőjét – nem fog kérni.
  4. Telepítse a Rust 64-bites, ha 64-bites Imageflow-t szeretne, vagy a Rust 32-bites, ha nem.Telepítse a stable toolchaint alapértelmezettként, és erősítse meg a PATH hozzáadását.
  5. Nyissa meg a parancssort, és váltson át ennek a tárolónak a gyökérkönyvtárába
  6. Szerkessze a ci/wintools/SETUP_PATH.bat-t, hogy a rust/cargo, nasm, git és Git/mingw64/bin mind a %PATH%-ban legyen.
  7. Futtassa a win_enter_env.bat-t egy al-palást indításához (szerkessze, ha 32 bites buildet szeretne)
  8. Minden build parancsot az al-palástban kell futtatni. Futtassa a cmd.exe /c "ci\wintools\win_verify_tools.bat"-t, hogy ellenőrizze az eszközök meglétét.

Hogyan lehet megtanulni a webes képfeldolgozást?

Először is olvassa el a Nagy teljesítményű képek kontextusát.

Nem sok jó tankönyv van a témában. Íme néhány a személyes könyvespolcomról. Ezek (és a Wikipédia) között a szükséges tudás körülbelül 60%-át tudtam összerakni; a többit számos népszerű képfeldolgozó könyvtár forráskódjának elolvasásával találtam meg.

Azzal kezdeném, hogy elolvasom a Principles of Digital Image Processing: Core Algorithms front-to-back, majd Digital Image Warping. A Wikipedia is hasznos referencia, bár a vonatkozó oldalak nincsenek összekapcsolva vagy kategorizálva – használjon konkrét keresőkifejezéseket, például “bilineáris interpoláció” és “Lab színtér”.

  • Digital Image Warping
  • Computer Graphics: Principles and Practice in C (2nd Edition)
  • Principles of Digital Image Processing: Alapvető technikák
  • Principles of Digital Image Processing: A digitális képfeldolgozás alapjai: Alapvető algoritmusok
  • Principles of Digital Image Processing: Advanced Methods

Az OpenCV, LibGD, FreeImage, Libvips, Pixman, Cairo, ImageMagick, stb_image, Skia és FrameWave forráskódját nagyon hasznosnak találtam a valós megvalósítások és szempontok megértéséhez. A legtöbb tankönyv végtelen síkot feltételez, figyelmen kívül hagyja az off-by-one hibákat, a lebegőpontos korlátokat, a színtér pontosságát és a határolt területen belüli működési szimmetriát. Egyetlen tankönyvet sem tudok pontos referenciaként ajánlani, csak mint fogalmi kiindulópontot. Készítettem néhány jegyzetet a képalkotó könyvtár létrehozásakor figyelembe veendő kérdésekkel kapcsolatban.

Azt is tartsa szem előtt, hogy a számítógépes látás nagyon különbözik a képalkotástól. A számítógépes látásban például az újramintavételezés pontossága nagyon keveset számít. De a képalkotásnál a képeket fotósoknak szolgáltatod ki, olyan embereknek, akiknek sokkal élesebb a vizuális érzékelésük, mint egy átlagos fejlesztőnek. Az előállított képeket más CSS-sel és képekkel egymás mellé renderelik, és a legkisebb jelentős pontatlanság is jól látható. Ön a Lightroommal versenyez; olyan offline eszközökkel, amelyek vizuálisan tökéletes eredményeket produkálnak. A végfelhasználói szoftvereket eldobják, ha a fotósok úgy érzik, hogy elrontja a munkájukat.

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.