imazen / imageflow

images optimales à des vitesses incroyables

tests état : release candidate

Docker PullsDocker Pullsvoir les releases licence : Choisissez AGPLv3 ou Commercial

Téléchargez des outils rapides comme l’éclair et plus sûrs pour un flux de travail d’image moderne.

  • imageflow_tool est un outil en ligne de commande pour l’expérimentation, l’exécution de travaux par lots,ou lorsque vous voulez isoler le processus. Jusqu’à 17x plus rapide que ImageMagick. Produit également des fichiers plus petits à une qualité supérieure.
  • imageflow_server peut exécuter des travaux JSON ou manipuler des images en vol (par exemple /bucket/img.jpg?w=200) pour une utilisation directe à partir duHTML. Les images sources peuvent résider dans un stockage blob, sur un autre serveur, ou sur le système de fichiers. Cependant, pour une utilisation en production, nous recommandons d’utiliser Imageflow.NET Server, qui est beaucoup plus riche en fonctionnalités et n’a pas besoin d’un proxy inverse en amont pour la sécurité.
  • libimageflow est pour une utilisation directe (en cours de processus) à partir de votre langage de programmation. Voir nos bindings Node, bindings Go, bindings Scala, bindings Elixir ou bindings .NET. Si nous n’avons pas encore de liens pour votre langage, pensez à consacrer une journée pour les ajouter. Imageflow a une ABI simple compatible C, dont seulement 4 méthodes sont nécessaires pour mettre en œuvre les bindings.

Ouvrir un problème pour nous faire écrire du code d’exemple pour votre cas d’utilisation. Nous croyons en la conception axée sur la rétroaction, et la rationalisation de l’utilisation du monde réel est le moyen le plus rapide d’obtenir un excellent produit.

Documentation API Quuerystring

Documentation API JSON

libimageflow, imageflow_tool, et imageflow_server sont disponibles asself-contained binaires pour Windows, Ubuntu, et Mac. Nous proposons également des images Docker pour Linux (où glibc et OpenSSL sont nécessaires).

Nous remercions nos backers sur Kickstarteret les nombreux supporters d’ImageResizer pour avoir fait de ce projet une réalité.Visitez Imageresizing.net si vous avez besoin d’une exception AGPLv3 pour une utilisation commerciale.

Démarrez avec imageflow_tool (recommandé)

imageflow_tool examples --generate – crée un répertoire d’exemples avec des travaux JSON et des scripts d’invocation.

Vous pouvez utiliser des chaînes de commande compatibles avec les chaînes de requête d’ImageResizer 4:

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

Ou soumettre un fichier de travaux JSON. Les travaux JSON peuvent avoir plusieurs entrées et sorties, et peuvent représenter n’importe quel type de graphe d’opérations.

Ce qui suit génère plusieurs tailles d’une image à partir d’un exemple de fichier de travail :

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

Par défaut, imageflow_tool imprime une réponse JSON sur stdout. Vous écrivez ceci sur le disque avec --response.

--debug-package créera un fichier .zip pour reproduire le comportement problématique avec les deux v1/build et v1/querystring. S’il vous plaît, soumettez des rapports de bogues ; nous essayons de rendre cela facile.

Utilisation de imageflow_server pour l’imagerie dynamique

imageflow_server start --demo

Maintenant, vous pouvez éditer des images à partir de HTML… et utiliser srcset sans maux de tête.

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

Au-delà de la démo

Vous voudrez monter divers emplacements de sources d’images en préfixes. La commande --mount analyse une liste d’arguments délimitée par deux points (:). Le premier est le préfixe que vous utiliserez dans l’URL (comme http://localhost:39876/prefix/. Le deuxième est le nom du moteur. Les arguments restants sont envoyés au moteur.

Exemples

  • --mount "/img/:ir4_local:C:\inetpub\wwwroot\images"
  • --mount "/proxyimg/:ir4_http:https:://myotherserver.com/imagefolder/" (notez le double échappement du deux-points)
  • --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"

Utilisation de libimageflow depuis votre langage

  • .NET Les liaisons standard peuvent être trouvées à https://github.com/imazen/imageflow-dotnet
  • Les liaisons de nœuds disponibles à https://github.com/imazen/imageflow-node
  • Ruby – Les liaisons de base peuvent être trouvées dans bindings/ruby/
  • L’interface C et C++ est stable – utilisez bindings/headers/imageflow_default.h ou l’une des nombreuses conventions alternatives fournies avec chaque version.
  • Rust – Imageflow est écrit en Rust, donc vous pouvez utiliser le imageflow_core crate.
  • autres langages – Utilisez un outil de génération de liaisons FFI pour votre langage, et alimentez-le avec le fichier d’en-tête qu’il préfère.

Vous pouvez également trouver que imageflow_tool est assez rapide pour vos besoins.

Crates dans ce projet

  • imageflow_abi – L’API stable de libimageflow/imageflow.dll.Les en-têtes pour libimageflow sont situés dans bindings/headers
  • imageflow_tool – L’outil en ligne de commande
  • imageflow_server – Le serveur HTTP
  • c_components – Un crate rust contenant les sources C
  • c_components/tests – Tests pour les composants C
  • imageflow_types – Types partagés utilisés par la plupart des crates, avec sérialisation JSON
  • imageflow_helpers – Fonctions d’aide et utilitaires communs
  • imageflow_riapi – Parsing/layout de la compatibilité RIAPI et ImageResizer4
  • imageflow_core – La bibliothèque principale et le moteur d’exécution

Défauts connus et fonctionnalités manquantes (en date de mai 2020)

Défauts

  • imageflow_server n’expose pas encore l’API JSON.
  • Pas encore de test fuzz ou d’audit tiers.

Fonctionnalités manquantes

  • Flou.

Fonctionnalités retardées

  • Prévision du coût des travaux (retardée – aucun intérêt de la communauté)

Vous aurez besoin de plus que Rust pour compiler Imageflow, car il a quelques dépendances C.

  1. Installer les prérequis spécifiques à la plateforme (trouver la bonne section ci-dessous).
  2. Clone et cd dans ce dépôtE.g., git clone [email protected]:imazen/imageflow.git && cd imageflow)

Si vous utilisez bash sur n’importe quelle plateforme, vous devriez pouvoir utiliser build.sh

  • ./build.sh clean – pour nettoyer
  • ./build.sh test – exécuter tous les tests
  • ./build.sh debug – générer des binaires de débogage lent
  • ./build.sh release – générer des binaires de version
  • ./build.sh install – installer les binaires de version sur /usr/local (doit exécuter `./build.sh release d’abord)
  • ./build.sh uninstall – désinstaller les binaires de la release

build.sh place les binaires dans la ./artifacts/ directory

Si vous êtes sous Windows, n’exécutez les commandes de construction que dans la fenêtre créée par win_enter_env.bat.

Vous pouvez également construire en utilisant directement cargo, bien que cela place les binaires dans ./target/release à la place.* cargo test --all pour tester Imageflow en mode débogage (slooow)* cargo build --package imageflow_abi --release pour compiler libimageflow/imageflow.dll* cargo build --package imageflow_tool --release pour compiler imageflow_tool(.exe)* cargo build --package imageflow_server --release pour compiler imageflow_server(.exe)* cargo build --all --release pour tout compiler en mode release* cargo doc --no-deps --all --release pour générer la documentation.

Construire à partir des sources avec Docker

Si vous voulez répliquer l’environnement Imageflow CI :

  1. Installer Docker
  2. Exécuter à partir d’une session bash (Docker + Windows WSL, macOS, ou linux)
  3. git clone [email protected]:imazen/imageflow.gitcd imageflow./build_via_docker.sh debug

Cela créera des caches dans ~/.docker_imageflow_caches spécifiques à l’image docker utilisée. Les instances seront éphémères ; le seul état sera dans les caches.

Les Dockerfiles officiels sont également un excellent endroit pour obtenir des étapes de configuration de l’environnement plus détaillées, car nous ne listons pas les étapes de configuration :

  • Valgrind (les versions courantes cassent openssl ; vous devrez peut-être construire à partir des sources)
  • Code coverage
  • Bindings.

Pré-requis Linux

(testé sur Ubuntu 16.04 et 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 `

Pré-requis Mac OS

  1. Installer les outils en ligne de commande XCode si vous ne l’avez pas déjà fait
  2. Installer Homebrew si vous ne l’avez pas déjà fait.
  3. Installer nasm, pkg-config, et wgetbrew install nasm pkg-config wget
  4. Installer Rust

Pré-requis Windows WSL (Ubuntu Bionic Subsystem)

  1. Installer Ubuntu 18.04 depuis le Windows Store
  2. Lancer Ubuntu 18.04 et créer votre nom d’utilisateur/mot de passe
  3. sudo apt-get update pour mettre à jour les paquets disponibles.
  4. Installer Rust 1.28+ en exécutantcurl https://sh.rustup.rs -sSf | sh -s -- -y --default-toolchain stable
  5. S’assurer que les outils de construction sont installés (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. (facultatif) Pour utiliser un éditeur de texte graphique, vous devrez télécharger imageflow dans un répertoire « Windows », puis le mapper à un emplacement dans Ubuntu.Par exemple, si vous avez cloné imageflow vers Documents/imageflow, vous exécuterez :ln -s /mnt/c/Users//Documents/imageflow ~/win_imageflow
  7. Fermer et rouvrir Ubuntu

Windows 10 Pré-requis

  1. Installer Visual Studio 2017 Build Tools (séparément ou en tant que composant VS)
  2. Installer Git 64 bits.
  3. Run As AdministratorL’installateur NASM 64 bits – il ne vous invitera pas.
  4. Installer Rust 64 bits si vous voulez Imageflow 64 bits ou Rust 32 bits si vous ne le voulez pas.Installer la toolchain stable par défaut, et confirmer son ajout à PATH.
  5. Ouvrez la ligne de commande et passez au répertoire racine de ce dépôt
  6. Modifiez ci/wintools/SETUP_PATH.bat pour vous assurer que rust/cargo, nasm, git et Git/mingw64/bin sont tous dans %PATH%.
  7. Exécutez win_enter_env.bat pour démarrer un sous-shell (modifiez-le si vous voulez une construction 32 bits)
  8. Toutes les commandes de construction doivent être exécutées dans le sous-shell. Exécutez cmd.exe /c "ci\wintools\win_verify_tools.bat" pour vérifier que les outils sont présents.

Comment apprendre le traitement d’images pour le web ?

Premièrement, lisez High Performance Images pour le contexte.

Il n’y a pas beaucoup de grands manuels sur le sujet. En voici quelques-uns de mon étagère personnelle. Entre eux (et Wikipedia), j’ai pu rassembler environ 60% des connaissances dont j’avais besoin ; le reste, je l’ai trouvé en lisant le code source de nombreuses bibliothèques de traitement d’images populaires.

Je commencerais par lire Principles of Digital Image Processing : Core Algorithms front-to-back, puis Digital Image Warping. Wikipedia est également une référence utile, bien que les pages pertinentes ne soient pas liées ou catégorisées ensemble – utilisez des termes de recherche spécifiques, comme « interpolation bilinéaire » et « espace couleur Lab ».

  • Digital Image Warping
  • Computer Graphics : Principes et pratique en C (2e édition)
  • Principes du traitement numérique des images : Techniques fondamentales
  • Principes du traitement d’images numériques : Algorithmes de base
  • Principes du traitement d’images numériques : Méthodes avancées

J’ai trouvé que le code source d’OpenCV, LibGD, FreeImage, Libvips, Pixman, Cairo, ImageMagick, stb_image, Skia, et FrameWave est très utile pour comprendre les implémentations et les considérations du monde réel. La plupart des manuels partent de l’hypothèse d’un plan infini, ignorent les erreurs de type « off-by-one », les limites de la virgule flottante, la précision de l’espace couleur et la symétrie opérationnelle dans une région délimitée. Je ne peux recommander aucun manuel comme référence précise, mais seulement comme point de départ conceptuel. J’ai pris quelques notes concernant les problèmes à connaître lors de la création d’une bibliothèque d’imagerie.

En outre, gardez à l’esprit que la vision par ordinateur est très différente de la création d’images. En vision par ordinateur, la précision du rééchantillonnage importe très peu, par exemple. Mais dans la création d’images, vous servez des images à des photographes, des personnes ayant une perception visuelle bien plus fine que le développeur moyen. Les images produites seront affichées côte à côte avec d’autres CSS et d’autres images, et la moindre imprécision sera très visible. Vous êtes en concurrence avec Lightroom, avec des outils hors ligne qui produisent des résultats visuellement parfaits. Les logiciels destinés aux utilisateurs finaux seront jetés si les photographes ont le sentiment qu’ils corrompent leur travail.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.