imazen / imageflow

optimale afbeeldingen met ongelooflijke snelheden

tests staat: release candidate

Docker PullsDocker Pullsview releases license: Kies AGPLv3 of Commercieel

Download supersnelle en veiligere tools voor een moderne imageworkflow.

  • imageflow_tool is een opdrachtregeltool voor experimenteren, het uitvoeren van batchtaken, of wanneer u procesisolatie wilt. Tot 17x sneller dan ImageMagick. Produceert ook kleinere bestanden met een hogere kwaliteit.
  • imageflow_server kan JSON-jobs uitvoeren of afbeeldingen in-flight manipuleren (bijv./bucket/img.jpg?w=200) voor direct gebruik vanuitHTML. Bronafbeeldingen kunnen zich bevinden in blob-opslag, op een andere server, of op het bestandssysteem. Voor productiegebruik raden wij echter aan Imageflow.NET Server te gebruiken, die veel meer mogelijkheden biedt en geen reverse proxy nodig heeft voor de beveiliging.
  • libimageflow is voor direct (in-proces) gebruik vanuit uw programmeertaal. Zie onze Node bindingen, Go bindingen, Scala bindingen, Elixir bindingen, of .NET bindingen. Als we nog geen bindingen voor uw taal hebben, overweeg dan een dag om deze toe te voegen. Imageflow heeft een simpleC-compatibele ABI, waarvan slechts 4 methoden nodig zijn om bindingen te implementeren.

Open een issue om ons voorbeeldcode te laten schrijven voor uw use-case. Wij geloven in feedback-gedreven ontwerp, en het stroomlijnen van real-world gebruik is de snelste weg naar een geweldig product.

Querystring API Documentatie

JSON API Documentatie

libimageflow, imageflow_tool, en imageflow_server zijn beschikbaar als zelf-bevattende binaries voor Windows, Ubuntu, en Mac. We bieden ook Docker images voor Linux (waar glibc en OpenSSL vereist zijn).

We danken onze backers op Kickstarter en de vele supporters van ImageResizer voor het realiseren van dit project.Bezoek Imageresizing.net als u een AGPLv3 uitzondering voor commercieel gebruik nodig heeft.

Start met imageflow_tool (aanbevolen)

imageflow_tool examples --generate – hiermee maakt u een voorbeeldenmap met JSON-taken en invocatiescripts.

U kunt opdrachtreeksen gebruiken die compatibel zijn met de queryreeksen van ImageResizer 4:

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

Of stuur een JSON-opdrachtbestand in. JSON-jobs kunnen meerdere ingangen en uitgangen hebben, en kunnen elke soort bewerkingsgrafiek vertegenwoordigen.

Het volgende genereert meerdere formaten van een afbeelding uit een voorbeeld-jobsbestand:

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

Standaard drukt imageflow_tool een JSON-respons af naar stdout. U schrijft dit naar schijf met --response.

--debug-package zal een .zip-bestand maken om problematisch gedrag te reproduceren met zowel v1/build als v1/querystring. Gelieve bugs te melden; we proberen het gemakkelijk te maken.

imageflow_server gebruiken voor dynamische imaging

imageflow_server start --demo

Nu kunt u afbeeldingen bewerken vanuit HTML… en srcset gebruiken zonder hoofdpijn.

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

Verder dan de demo

U zult verschillende bronlocaties voor afbeeldingen willen koppelen aan prefixen. Het --mount commando leest een met dubbele punten (:) afgebakende lijst met argumenten. Het eerste is het voorvoegsel dat u zult gebruiken in de URL (zoals http://localhost:39876/prefix/. Het tweede is de naam van de motor. De overige argumenten worden naar de engine gestuurd.

Voorbeelden

  • --mount "/img/:ir4_local:C:\inetpub\wwwroot\images"
  • --mount "/proxyimg/:ir4_http:https:://myotherserver.com/imagefolder/" (let op de dubbele escaping van de dubbele punt)
  • --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"

Het gebruik van libimageflow vanuit uw taal

  • .NET Standaard bindingen zijn te vinden op https://github.com/imazen/imageflow-dotnet
  • Node bindingen zijn beschikbaar op https://github.com/imazen/imageflow-node
  • Ruby – Basis bindingen zijn te vinden in bindingen/ruby/
  • C en C++ interface is stabiel – gebruik bindingen/headers/imageflow_default.h of een van de vele alternatieve conventies die bij elke release worden geleverd.
  • Rust – Imageflow is geschreven in Rust, dus je kunt de imageflow_core crate gebruiken.
  • andere talen – gebruik een FFI-tool voor het genereren van bindingen voor je taal, en voer het headerbestand in dat het beste bevalt.

U vindt misschien ook dat imageflow_tool snel genoeg is voor uw behoeften.

Crates binnen dit project

  • imageflow_abi – De stabiele API van libimageflow/imageflow.dll.Headers voor libimageflow zijn te vinden in bindings/headers
  • imageflow_tool – De command-line tool
  • imageflow_server – De HTTP-server
  • c_components – Een roest crate die C source bevat
  • c_components/tests – Tests voor de C componenten
  • imageflow_types – Gedeelde types die door de meeste crates worden gebruikt, met JSON serialisatie
  • imageflow_helpers – Gemeenschappelijke helper functies en utilities
  • imageflow_riapi – RIAPI en ImageResizer4 compatibiliteit parsing/layout
  • imageflow_core – De hoofdbibliotheek. De hoofdbibliotheek en uitvoeringsengine

Bekende gebreken en ontbrekende functies (vanaf mei 2020)

Gebreken

  • imageflow_server stelt de JSON API nog niet bloot.
  • Nog geen fuzz-tests of audits door derden.

Ontbrekende functies

  • Vervaging.

Vertraagde functies

  • Voorspelling van taakkosten (vertraagd – geen interesse van community)

Je hebt meer dan alleen Rust nodig om Imageflow te compileren, aangezien het een aantal C-afhankelijkheden heeft.

  1. Installeer de platform-specifieke prerequisites (vind de juiste sectie hieronder).
  2. Kloon en cd in deze repositoryE.g, git clone [email protected]:imazen/imageflow.git && cd imageflow)

Als u bash gebruikt op een platform, zou u build.sh

  • ./build.sh clean moeten kunnen gebruiken – om
  • ./build.sh test op te schonen – alle tests
  • ./build.sh debug uit te voeren – langzame debug binaries
  • ./build.sh release te genereren – release binaries
  • ./build.sh install te genereren – release binaries te installeren op /usr/local (moet eerst `./build.sh release first)
  • ./build.sh uninstall – uninstall release binaries

build.sh plaatst binaries in de ./artifacts/ directory

Als u op Windows zit, voer dan alleen build commando’s uit in het venster gemaakt door win_enter_env.bat.

U kunt ook direct bouwen met cargo, maar dan worden de binaries in ./target/release geplaatst.* cargo test --all om Imageflow in debug-modus (traag) te testen* cargo build --package imageflow_abi --release om libimageflow/imageflow.dll te compileren* cargo build --package imageflow_tool --release om imageflow_tool(.exe) te compileren* cargo build --package imageflow_server --release om imageflow_server(.exe) te compileren* cargo build --all --release om alles in release-modus te compileren* cargo doc --no-deps --all --release om documentatie te genereren.

Bouwen vanaf bron met Docker

Als u de Imageflow CI omgeving wilt repliceren:

  1. Installeer Docker
  2. Uitvoeren vanuit een bash-sessie (Docker + Windows WSL, macOS, of linux)
  3. git clone [email protected]:imazen/imageflow.gitcd imageflow./build_via_docker.sh debug

Dit zal caches aanmaken binnen ~/.docker_imageflow_caches specifiek voor de gebruikte docker image. Instances zullen efemeer zijn; de enige state zal in de caches zijn.

De officiële Dockerfiles zijn ook een geweldige plek om meer gedetailleerde omgeving setup stappen te krijgen, omdat we geen stappen vermelden voor het opzetten van:

  • Valgrind (veel voorkomende versies breken openssl; het kan nodig zijn om vanaf broncode te bouwen)
  • Code coverage
  • Bindings.

Linux Pre-requisites

(getest op Ubuntu 16.04 en 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 Pre-requisites

  1. Installeer XCode Command-Line Tools als u dat nog niet hebt gedaan
  2. Installeer Homebrew als u dat nog niet hebt gedaan.
  3. Installeer nasm, pkg-config, en wgetbrew install nasm pkg-config wget
  4. Installeer Rust

Windows WSL (Ubuntu Bionic Subsystem) Pre-requisites

  1. Installeer Ubuntu 18.04 uit de Windows Store
  2. Run Ubuntu 18.04 en maak uw gebruikersnaam/wachtwoord
  3. sudo apt-get update om beschikbare pakketten bij te werken.
  4. Installeer Rust 1.28+ door te draaiencurl https://sh.rustup.rs -sSf | sh -s -- -y --default-toolchain stable
  5. Zorg ervoor dat build tools zijn geïnstalleerd (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. (optioneel) Om een grafische teksteditor te gebruiken, moet u imageflow downloaden naar een “Windows” directory, en deze vervolgens mappen naar een locatie in Ubuntu.Als u imageflow bijvoorbeeld hebt gekloond naar Documents/imageflow, zou u uitvoeren:ln -s /mnt/c/Users//Documents/imageflow ~/win_imageflow
  7. Sluit en heropen Ubuntu

Windows 10 Pre-requisites

  1. Installeer Visual Studio 2017 Build Tools (afzonderlijk of als een VS-component)
  2. Installeer Git 64-bit.
  3. Run As Administrator het NASM 64-bit installatieprogramma – het zal niet vragen.
  4. Installeer Rust 64-bit als u 64-bit Imageflow wilt of Rust 32-bit als u dat niet wilt.Installeer toolchain stable als de standaard, en bevestig het toevoegen aan PATH.
  5. Open de command line en ga naar de root directory van deze repository
  6. Bewerk ci/wintools/SETUP_PATH.bat om er zeker van te zijn dat rust/cargo, nasm, git, en Git/mingw64/bin allemaal in %PATH% staan.
  7. Run win_enter_env.bat om een sub-shell te starten (bewerk deze als je een 32-bit build wilt)
  8. Alle build commando’s moeten in de sub-shell worden uitgevoerd. Run cmd.exe /c "ci\wintools\win_verify_tools.bat" om te controleren of de tools aanwezig zijn.

Hoe leer je beeldbewerking voor het web?

Voreerst, lees High Performance Images voor context.

Er zijn niet veel goede leerboeken over het onderwerp. Hier zijn er een paar uit mijn persoonlijke boekenkast. Tussen hen (en Wikipedia) was ik in staat om ongeveer 60% van de kennis die ik nodig had samen te stellen; de rest vond ik door het lezen van de broncode van veel populaire beeldverwerkingsbibliotheken.

Ik zou beginnen met het lezen van Principles of Digital Image Processing: Core Algorithms van voor naar achter, dan Digital Image Warping. Wikipedia is ook een nuttige referentie, hoewel de relevante pagina’s niet aan elkaar zijn gekoppeld of gecategoriseerd – gebruik specifieke zoektermen, zoals “bilineaire interpolatie” en “Lab kleurruimte”.

  • Digital Image Warping
  • Computer Graphics: Beginselen en praktijk in C (2e Editie)
  • Beginselen van digitale beeldverwerking: Fundamentele technieken
  • Principes van digitale beeldverwerking: Core Algorithms
  • Principles of Digital Image Processing: Advanced Methods

Ik heb gemerkt dat de broncode voor OpenCV, LibGD, FreeImage, Libvips, Pixman, Cairo, ImageMagick, stb_image, Skia, en FrameWave zeer nuttig is voor het begrijpen van real-world implementaties en overwegingen. De meeste leerboeken gaan uit van een oneindig vlak, negeren off-by-one fouten, floating-point beperkingen, kleurruimte nauwkeurigheid, en operationele symmetrie binnen een begrensd gebied. Ik kan geen enkel leerboek aanbevelen als een nauwkeurige referentie, alleen als een conceptueel startpunt. Ik heb wat aantekeningen gemaakt over zaken waar je op moet letten bij het maken van een beeldbibliotheek.

Bedenk ook dat computervisie heel anders is dan het maken van beelden. Bij computervisie doet de nauwkeurigheid van resampling er bijvoorbeeld weinig toe. Maar bij het maken van beelden, geef je beelden aan fotografen, mensen met een veel scherpere visuele perceptie dan de gemiddelde ontwikkelaar. De geproduceerde afbeeldingen zullen zij-aan-zij worden weergegeven met andere CSS en afbeeldingen, en de minste onnauwkeurigheid is heel zichtbaar. U concurreert met Lightroom; met offline tools die visueel perfecte resultaten produceren. Eindgebruikers software zal worden weggegooid als fotografen het gevoel hebben dat het hun werk aantast.

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.