imazen / imageflow

optymalne obrazy z niesamowitą prędkością

testy state: release candidate

Docker PullsDocker Pullsview releases license: Choose AGPLv3 or Commercial

Download blazing fast and safer tools for a modern image workflow.

  • imageflow_tool is a command-line tool for experimenting, running batch jobs,or when you want process isolation. Do 17x szybszy niż ImageMagick. Produkuje również mniejsze pliki o wyższej jakości.
  • imageflow_server może uruchamiać zadania JSON lub manipulować obrazami w locie (np./bucket/img.jpg?w=200) do bezpośredniego użycia zHTML. Obrazy źródłowe mogą znajdować się w magazynie blob, na innym serwerze lub w systemie plików. Jednak do użytku produkcyjnego zalecamy użycie Imageflow.NET Server, który jest o wiele bardziej bogaty w funkcje i nie wymaga odwrotnego proxy z przodu dla bezpieczeństwa.
  • libimageflow jest do bezpośredniego (w procesie) użycia z twojego języka programowania. Zobacz nasze powiązania z Node, powiązania z Go, powiązania z Scala, powiązania z Elixir lub powiązania z .NET. Jeśli nie mamy jeszcze wiązań dla twojego języka, rozważ poświęcenie jednego dnia na ich dodanie. Imageflow ma proste ABI kompatybilne z C, z czego tylko 4 metody są potrzebne do implementacji wiązań.

Otwórz sprawę, abyśmy napisali przykładowy kod dla twojego przypadku użycia. Wierzymy w projektowanie oparte na informacji zwrotnej, a usprawnianie rzeczywistego użycia jest najszybszą drogą do wspaniałego produktu.

Dokumentacja API Querystring

Dokumentacja API JSON

libimageflow, imageflow_tool, i imageflow_server są dostępne jako samodzielne binaria dla Windows, Ubuntu i Mac. Oferujemy również obrazy Docker dla Linuksa (gdzie wymagane są glibc i OpenSSL).

Dziękujemy naszym zwolennikom na Kickstarterze i wielu zwolennikom ImageResizer za urzeczywistnienie tego projektu.Odwiedź Imageresizing.net, jeśli potrzebujesz wyjątku AGPLv3 do użytku komercyjnego.

Zacznij od imageflow_tool (zalecane)

imageflow_tool examples --generate – tworzy katalog przykładów z zadaniami JSON i skryptami wywołującymi.

Możesz użyć łańcuchów poleceń, które są kompatybilne z ImageResizer 4 querystrings:

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

Albo przesłać plik zadania JSON. Zadania JSON mogą mieć wiele wejść i wyjść i mogą reprezentować dowolny wykres operacji.

Poniżej przedstawiono generowanie wielu rozmiarów obrazu z przykładowego pliku zadania:

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

Domyślnie narzędzie imageflow_tool drukuje odpowiedź JSON na stdout. Zapisz to na dysk za pomocą --response.

--debug-package utworzy plik .zip, aby odtworzyć problematyczne zachowanie zarówno z v1/build, jak i v1/querystring. Prosimy o zgłaszanie błędów; staramy się to ułatwiać.

Używanie imageflow_server do dynamicznego obrazowania

imageflow_server start --demo

Teraz możesz edytować obrazy z HTML… i używać srcset bez bólu głowy.

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

Poza demo

Będziesz chciał zamontować różne lokalizacje źródeł obrazów do prefiksów. Polecenie --mount przetwarza listę argumentów ograniczonych dwukropkiem (:). Pierwszy z nich to prefiks, którego użyjesz w adresie URL (jak http://localhost:39876/prefix/. Drugi to nazwa silnika. Pozostałe argumenty są wysyłane do silnika.

Przykłady

  • --mount "/img/:ir4_local:C:\inetpub\wwwroot\images"
  • --mount "/proxyimg/:ir4_http:https:://myotherserver.com/imagefolder/" (zwróć uwagę na podwójną ucieczkę dwukropka)
  • --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"

Używanie libimageflow z twojego języka

  • .NET Standardowe wiązania można znaleźć pod adresem https://github.com/imazen/imageflow-dotnet
  • Węzłowe wiązania dostępne pod adresem https://github.com/imazen/imageflow-node
  • Ruby – Podstawowe wiązania można znaleźć w bindings/ruby/
  • Interfejs C i C++ jest stabilny – użyj bindings/headers/imageflow_default.h lub jednej z wielu alternatywnych konwencji dostarczanych z każdym wydaniem.
  • Rust – Imageflow jest napisany w Rust, więc możesz użyć imageflow_core krateczki.
  • inne języki – Użyj narzędzia do generowania wiązań FFI dla swojego języka i podaj mu plik nagłówkowy, który najbardziej lubi.

Możesz również stwierdzić, że imageflow_tool jest wystarczająco szybkie dla twoich potrzeb.

Skrzynie w ramach tego projektu

  • imageflow_abi – Stabilne API libimageflow/imageflow.dll.Nagłówki dla libimageflow znajdują się w bindings/headers
  • imageflow_tool – Narzędzie wiersza poleceń
  • imageflow_server – Serwer HTTP
  • c_components – Krata rust zawierająca źródła C
  • c_components/tests – Testy dla komponentów C
  • imageflow_types – Współdzielone typy używane przez większość skrzyń, Główna biblioteka i silnik wykonawczy

Znane wady i brakujące funkcje (stan na maj 2020)

Wady

  • imageflow_server nie eksponuje jeszcze API JSON.
  • Brak testów fuzz lub audytów stron trzecich.

Brakujące funkcje

  • Rozmycie.

Opóźnione funkcje

  • Przewidywanie kosztów zadań (opóźnione – brak zainteresowania ze strony społeczności)

Będziesz potrzebował więcej niż tylko Rust, aby skompilować Imageflow, ponieważ ma on kilka zależności od C.

  1. Zainstaluj wymagania wstępne specyficzne dla danej platformy (znajdź odpowiednią sekcję poniżej).
  2. Klonuj i cd do tego repozytoriumNp, git clone [email protected]:imazen/imageflow.git && cd imageflow)

Jeśli używasz bash na dowolnej platformie, powinieneś być w stanie użyć build.sh

  • ./build.sh clean – wyczyścić
  • ./build.sh test – uruchomić wszystkie testy
  • ./build.sh debug – wygenerować powolne binarki debug
  • ./build.sh release – wygenerować binarki release
  • ./build.sh install – zainstalować binarki release do /usr/local (musi uruchomić `./build.sh release first)
  • ./build.sh uninstall – odinstaluj release binaries

build.sh umieszcza binaries w oknie ./artifacts/ directory

Jeśli pracujesz w systemie Windows, wykonuj polecenia budowania tylko w oknie utworzonym przez win_enter_env.bat.

Możesz także budować używając cargo bezpośrednio, choć to umieści binarki w ./target/release zamiast tego.* cargo test --allaby przetestować Imageflow w trybie debug (slooow)* cargo build --package imageflow_abi --releaseaby skompilować libimageflow/imageflow.dll* cargo build --package imageflow_tool --releaseaby skompilować imageflow_tool(.exe)* cargo build --package imageflow_server --releaseaby skompilować imageflow_server(.exe)* cargo build --all --releaseaby skompilować wszystko w trybie release* cargo doc --no-deps --all --releaseaby wygenerować dokumentację.

Building from Source with Docker

Jeśli chcesz replikować środowisko Imageflow CI:

  1. Instalacja Dockera
  2. Run from a bash session (Docker + Windows WSL, macOS, or linux)
  3. git clone [email protected]:imazen/imageflow.gitcd imageflow./build_via_docker.sh debug

To stworzy cache wewnątrz ~/.docker_imageflow_caches specyficzne dla użytego obrazu dockera. Instancje będą efemeryczne; jedyny stan będzie w cache.

Oficjalne pliki Dockerfiles są również świetnym miejscem, aby uzyskać bardziej szczegółowe kroki konfiguracji środowiska, ponieważ nie wymieniamy kroków do konfiguracji:

  • Valgrind (wspólne wersje łamią openssl; może być konieczne zbudowanie ze źródła)
  • Objęcie kodu
  • Wiązania.

Wymagania wstępne dla systemu Linux

(testowane na 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 `

Mac OS Wymagania wstępne

  1. Zainstaluj XCode Command-Line Tools, jeśli jeszcze tego nie zrobiłeś
  2. Zainstaluj Homebrew, jeśli jeszcze tego nie zrobiłeś.
  3. Zainstaluj nasm, pkg-config, i wgetbrew install nasm pkg-config wget
  4. Zainstaluj Rust

Windows WSL (Ubuntu Bionic Subsystem) Wymagania wstępne

  1. Zainstaluj Ubuntu 18.04 z Windows Store
  2. Uruchom Ubuntu 18.04 i utwórz swoją nazwę użytkownika/hasło
  3. sudo apt-get update, aby zaktualizować dostępne pakiety.
  4. Zainstaluj Rust 1.28+ przez uruchomieniecurl https://sh.rustup.rs -sSf | sh -s -- -y --default-toolchain stable
  5. Upewnij się, że narzędzia do budowania są zainstalowane (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. (opcjonalnie) Aby użyć graficznego edytora tekstu, musisz pobrać imageflow do katalogu „Windows”, a następnie zmapować go do lokalizacji w Ubuntu.Na przykład, jeśli sklonowałeś imageflow do Documents/imageflow, uruchomiłbyś:ln -s /mnt/c/Users//Documents/imageflow ~/win_imageflow
  7. Zamknij i otwórz ponownie Ubuntu

Windows 10 Wymagania wstępne

  1. Zainstaluj Visual Studio 2017 Build Tools (osobno lub jako komponent VS)
  2. Zainstaluj Git 64-bit.
  3. Run As Administratorinstalator NASM 64-bit – nie będzie podpowiadał.
  4. Zainstaluj Rust 64-bit, jeśli chcesz 64-bitowy Imageflow lub Rust 32-bit, jeśli nie.Zainstaluj toolchain stable jako domyślny i potwierdź dodanie go do PATH.
  5. Otwórz wiersz poleceń i przełącz się na katalog główny tego repozytorium
  6. Edytuj ci/wintools/SETUP_PATH.bat, aby upewnić się, że rust/cargo, nasm, git i Git/mingw64/bin są w %PATH%.
  7. Uruchom win_enter_env.bat, aby uruchomić podpowłokę (edytuj ją, jeśli chcesz kompilację 32-bitową)
  8. Wszystkie polecenia kompilacji powinny być uruchamiane w podpowłoce. Uruchom cmd.exe /c "ci\wintools\win_verify_tools.bat", aby sprawdzić, czy narzędzia są obecne.

Jak nauczyć się przetwarzania obrazów dla sieci?

Po pierwsze, przeczytaj High Performance Images dla kontekstu.

Nie ma wielu świetnych podręczników na ten temat. Oto kilka z mojej osobistej półki z książkami. Pomiędzy nimi (i Wikipedią) udało mi się zebrać około 60% wiedzy, której potrzebowałem; resztę znalazłem czytając kod źródłowy wielu popularnych bibliotek do przetwarzania obrazów.

Zacząłbym od przeczytania Principles of Digital Image Processing: Core Algorithms front-to-back, a następnie Digital Image Warping. Wikipedia jest również użytecznym źródłem informacji, chociaż odpowiednie strony nie są połączone ani skategoryzowane razem – użyj konkretnych terminów wyszukiwania, takich jak „bilinear interpolation” i „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: Algorytmy podstawowe
  • Zasady cyfrowego przetwarzania obrazu: Advanced Methods

Znalazłem kod źródłowy dla OpenCV, LibGD, FreeImage, Libvips, Pixman, Cairo, ImageMagick, stb_image, Skia, i FrameWave jest bardzo przydatny do zrozumienia rzeczywistych implementacji i rozważań. Większość podręczników zakłada nieskończoną płaszczyznę, ignoruje błędy off-by-one, ograniczenia zmiennoprzecinkowe, dokładność przestrzeni kolorów i symetrię operacyjną w ograniczonym regionie. Nie mogę polecić żadnego podręcznika jako dokładnego odniesienia, tylko jako konceptualny punkt wyjścia. Zrobiłem kilka notatek dotyczących kwestii, których należy być świadomym podczas tworzenia biblioteki obrazowania.

Należy również pamiętać, że widzenie komputerowe jest bardzo różne od tworzenia obrazu. W wizji komputerowej dokładność resamplingu ma bardzo małe znaczenie, na przykład. Ale w tworzeniu obrazów służysz fotografom, ludziom o znacznie lepszej percepcji wizualnej niż przeciętny deweloper. Wytworzone obrazy będą renderowane obok siebie z innymi CSS i obrazami, a najmniej znacząca niedokładność jest dość widoczna. Konkurujesz z Lightroomem; z narzędziami offline, które dają wizualnie doskonałe rezultaty. Oprogramowanie dla użytkownika końcowego zostanie odrzucone, jeśli fotografowie poczują, że psuje ich pracę.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.