- optimale afbeeldingen met ongelooflijke snelheden
- Start met imageflow_tool (aanbevolen)
- imageflow_server gebruiken voor dynamische imaging
- Verder dan de demo
- Voorbeelden
- Het gebruik van libimageflow vanuit uw taal
- Crates binnen dit project
- Bekende gebreken en ontbrekende functies (vanaf mei 2020)
- Gebreken
- Ontbrekende functies
- Vertraagde functies
- Bouwen vanaf bron met Docker
- Linux Pre-requisites
- Mac OS Pre-requisites
- Windows WSL (Ubuntu Bionic Subsystem) Pre-requisites
- Windows 10 Pre-requisites
- Hoe leer je beeldbewerking voor het web?
optimale afbeeldingen met ongelooflijke snelheden
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.
- Installeer de platform-specifieke prerequisites (vind de juiste sectie hieronder).
- 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:
- Installeer Docker
- Uitvoeren vanuit een bash-sessie (Docker + Windows WSL, macOS, of linux)
-
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
- Installeer XCode Command-Line Tools als u dat nog niet hebt gedaan
- Installeer Homebrew als u dat nog niet hebt gedaan.
- Installeer nasm, pkg-config, en wget
brew install nasm pkg-config wget
- Installeer Rust
Windows WSL (Ubuntu Bionic Subsystem) Pre-requisites
- Installeer Ubuntu 18.04 uit de Windows Store
- Run Ubuntu 18.04 en maak uw gebruikersnaam/wachtwoord
-
sudo apt-get update
om beschikbare pakketten bij te werken. - Installeer Rust 1.28+ door te draaien
curl https://sh.rustup.rs -sSf | sh -s -- -y --default-toolchain stable
- 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
- (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
- Sluit en heropen Ubuntu
Windows 10 Pre-requisites
- Installeer Visual Studio 2017 Build Tools (afzonderlijk of als een VS-component)
- Installeer Git 64-bit.
-
Run As Administrator
het NASM 64-bit installatieprogramma – het zal niet vragen. - 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 aanPATH
. - Open de command line en ga naar de root directory van deze repository
- 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. - Run
win_enter_env.bat
om een sub-shell te starten (bewerk deze als je een 32-bit build wilt) - 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.