imazen / imageflow

imágenes óptimas a velocidades increíbles

pruebas estado: release candidate

Docker PullsDocker Pullsver releases licencia: Elija AGPLv3 o Comercial

Descargue herramientas increíblemente rápidas y seguras para un flujo de trabajo de imágenes moderno.

  • imageflow_tool es una herramienta de línea de comandos para experimentar, ejecutar trabajos por lotes, o cuando quiera aislar procesos. Hasta 17 veces más rápido que ImageMagick. También produce archivos más pequeños con mayor calidad.
  • imageflow_server puede ejecutar trabajos JSON o manipular imágenes en vuelo (por ejemplo, /bucket/img.jpg?w=200) para su uso directo desdeHTML. Las imágenes de origen pueden residir en el almacenamiento blob, en otro servidor o en el sistema de archivos. Sin embargo, para el uso de producción, se recomienda el uso de Imageflow.NET Server, que es mucho más rica en características y no necesita un proxy inverso en el frente para la seguridad.
  • libimageflow es para el uso directo (en el proceso) de su lenguaje de programación. Vea nuestros enlaces Node, enlaces Go, enlaces Scala, enlaces Elixir o enlaces .NET. Si aún no tenemos bindings para su lenguaje, considere dedicar un día a añadirlos. Imageflow tiene una ABI compatible con SimpleC, de la cual sólo se necesitan 4 métodos para implementar bindings.

Abre un issue para que escribamos código de ejemplo para tu caso de uso. Creemos en el diseño basado en la retroalimentación, y la racionalización del uso en el mundo real es el camino más rápido hacia un gran producto.

Documentación de la API Querystring

Documentación de la API JSON

libimageflow, imageflow_tool y imageflow_server están disponibles como binarios autocontenidos para Windows, Ubuntu y Mac. También ofrecemos imágenes Docker para Linux (donde se requiere glibc y OpenSSL).

Damos las gracias a nuestros patrocinadores en Kickstartery a los muchos partidarios de ImageResizer por hacer de este proyecto una realidad.Visite Imageresizing.net si necesita una excepción AGPLv3 para uso comercial.

Comience con imageflow_tool (recomendado)

imageflow_tool examples --generate – crea un directorio de ejemplos con trabajos JSON y scripts de invocación.

Puede utilizar cadenas de comandos que son compatibles con ImageResizer 4 querystrings:

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

O enviar un archivo de trabajo JSON. Los trabajos JSON pueden tener múltiples entradas y salidas, y pueden representar cualquier tipo de gráfico de operación.

Lo siguiente genera múltiples tamaños de una imagen a partir de un archivo de trabajo de ejemplo:

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

Por defecto, imageflow_tool imprime una respuesta JSON en stdout. Se escribe esto en el disco con --response.

--debug-packagecreará un archivo .zip para reproducir el comportamiento problemático tanto con v1/build como con v1/querystring. Por favor, envíe informes de errores; tratamos de hacerlo fácil.

Usando imageflow_server para imágenes dinámicas

imageflow_server start --demo

Ahora puede editar imágenes desde HTML… y usar srcset sin dolor de cabeza.

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

Más allá de la demo

Querrá montar varias ubicaciones de origen de imágenes en prefijos. El comando --mount analiza una lista de argumentos delimitada por dos puntos (:). El primero es el prefijo que usará en la URL (como http://localhost:39876/prefix/. El segundo es el nombre del motor. Los argumentos restantes se envían al motor.

Ejemplos

  • --mount "/img/:ir4_local:C:\inetpub\wwwroot\images"
  • --mount "/proxyimg/:ir4_http:https:://myotherserver.com/imagefolder/" (nótese el doble escape de los dos puntos)
  • --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"

Usando libimageflow desde su lenguaje

  • .NET Los enlaces estándar se pueden encontrar en https://github.com/imazen/imageflow-dotnet
  • Los enlaces de nodo están disponibles en https://github.com/imazen/imageflow-node
  • Ruby – Los enlaces básicos se pueden encontrar en bindings/ruby/
  • La interfaz de C y C++ es estable – utilice bindings/headers/imageflow_default.h o una de las muchas convenciones alternativas proporcionadas con cada versión.
  • Rust – Imageflow está escrito en Rust, por lo que puede utilizar el imageflow_core crate.
  • otros lenguajes – Utilice una herramienta de generación de enlaces FFI para su lenguaje, y aliméntelo con el archivo de cabecera que más le guste.

También puede encontrar que imageflow_tool es bastante rápido para sus necesidades.

Crates dentro de este proyecto

  • imageflow_abi – La API estable de libimageflow/imageflow.dll.Las cabeceras de libimageflow se encuentran en bindings/headers
  • imageflow_tool – La herramienta de línea de comandos
  • imageflow_server – El servidor HTTP
  • c_components – Un crate oxidado que contiene el código fuente en C
  • c_components/tests – Pruebas para los componentes en C
  • imageflow_types – Tipos compartidos utilizados por la mayoría de los crates, con serialización JSON
  • imageflow_helpers – Funciones de ayuda y utilidades comunes
  • imageflow_riapi – Parsing/layout de compatibilidad con RIAPI e ImageResizer4
  • imageflow_core – La biblioteca principal y el motor de ejecución

Fallas conocidas y características faltantes (a partir de mayo de 2020)

Fallas

  • imageflow_server no expone la API JSON todavía.
  • No hay pruebas fuzz o auditoría de terceros todavía.

Características que faltan

  • Desenfoque.

Características retrasadas

  • Predicción del coste del trabajo (retrasado – sin interés de la comunidad)

Necesitarás algo más que Rust para compilar Imageflow, ya que tiene un par de dependencias de C.

  1. Instala los prerrequisitos específicos de la plataforma (encuentra la sección adecuada más abajo).
  2. Clona y cd en este repositorioPor ejemplo, git clone [email protected]:imazen/imageflow.git && cd imageflow)

Si está utilizando bash en cualquier plataforma, debería poder utilizar build.sh

  • ./build.sh clean – para limpiar
  • ./build.sh test – ejecutar todas las pruebas
  • ./build.sh debug – generar binarios de depuración lentos
  • ./build.sh release – generar binarios de liberación
  • ./build.sh install – instalar binarios de liberación a /usr/local (debe ejecutar `./build.sh release primero)
  • ./build.sh uninstall – desinstalar los binarios de la versión

build.sh coloca los binarios en la ./artifacts/ directory

Si está en Windows, sólo ejecute los comandos de construcción en la ventana creada por win_enter_env.bat.

También puede construir usando cargo directamente, aunque esto colocará los binarios en ./target/release en su lugar.* cargo test --all para probar Imageflow en modo de depuración (slooow)* cargo build --package imageflow_abi --release para compilar libimageflow/imageflow.dll* cargo build --package imageflow_tool --release para compilar imageflow_tool(.exe)* cargo build --package imageflow_server --release para compilar imageflow_server(.exe)* cargo build --all --release para compilar todo en modo de liberación* cargo doc --no-deps --all --release para generar documentación.

Construir desde la fuente con Docker

Si quieres replicar el entorno de Imageflow CI:

  1. Instalar Docker
  2. Ejecutar desde una sesión bash (Docker + Windows WSL, macOS, o linux)
  3. git clone [email protected]:imazen/imageflow.gitcd imageflow./build_via_docker.sh debug

Esto creará cachés dentro de ~/.docker_imageflow_cachesespecíficos para la imagen docker utilizada. Las instancias serán efímeras; el único estado estará en las cachés.

Los archivos oficiales de Dockerfiles son también un gran lugar para obtener pasos más detallados de configuración del entorno, ya que no enumeramos los pasos para configurar:

  • Valgrind (las versiones comunes rompen openssl; es posible que tenga que construir desde la fuente)
  • Cobertura de código
  • Bindings.

Requisitos previos de Linux

(probado en Ubuntu 16.04 y 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 `

Prerrequisitos de Mac OS

  1. Instalar las herramientas de línea de comandos XCode si no lo ha hecho
  2. Instalar Homebrew si no lo ha hecho.
  3. Instalar nasm, pkg-config, y wgetbrew install nasm pkg-config wget
  4. Instalar Rust

Requisitos previos de Windows WSL (Ubuntu Bionic Subsystem)

  1. Instalar Ubuntu 18.04 desde la Tienda Windows
  2. Ejecutar Ubuntu 18.04 y crear su nombre de usuario/contraseña
  3. sudo apt-get update para actualizar los paquetes disponibles.
  4. Instalar Rust 1.28+ ejecutandocurl https://sh.rustup.rs -sSf | sh -s -- -y --default-toolchain stable
  5. Asegúrese de que las herramientas de construcción están instaladas (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. (opcional) Para utilizar un editor de texto gráfico, tendrá que descargar imageflow a un directorio «Windows», y luego asignarlo a una ubicación en Ubuntu.Por ejemplo, si clonó imageflow a Documents/imageflow, ejecutaría:ln -s /mnt/c/Users//Documents/imageflow ~/win_imageflow
  7. Cerrar y volver a abrir Ubuntu

Requisitos previos de Windows 10

  1. Instalar Visual Studio 2017 Build Tools (por separado o como componente de VS)
  2. Instalar Git 64 bits.
  3. Run As Administrator el instalador de NASM de 64 bits – no lo pedirá.
  4. Instalar Rust de 64 bits si quieres Imageflow de 64 bits o Rust de 32 bits si no lo quieres.Instalar toolchain stable por defecto, y confirmar la adición a PATH.
  5. Abre la línea de comandos y cambia al directorio raíz de este repositorio
  6. Edita ci/wintools/SETUP_PATH.bat para asegurarte de que rust/cargo, nasm, git y Git/mingw64/bin están todos en %PATH%.
  7. Ejecuta win_enter_env.bat para iniciar un sub-shell (edítalo si quieres una compilación de 32 bits)
  8. Todos los comandos de compilación deben ejecutarse en el sub-shell. Ejecute cmd.exe /c "ci\wintools\win_verify_tools.bat" para comprobar que las herramientas están presentes.

¿Cómo se aprende el procesamiento de imágenes para la web?

Primero, lea Imágenes de alto rendimiento para el contexto.

No hay muchos grandes libros de texto sobre el tema. Aquí hay algunos de mi estantería personal. Entre ellos (y la Wikipedia) fui capaz de reunir alrededor del 60% de los conocimientos que necesitaba; el resto lo encontré leyendo el código fuente de muchas bibliotecas populares de procesamiento de imágenes.

Yo empezaría por leer Principles of Digital Image Processing: Core Algorithms front-to-back, y luego Digital Image Warping. Wikipedia también es una referencia útil, aunque las páginas relevantes no están enlazadas o categorizadas juntas – utilice términos de búsqueda específicos, como «interpolación bilineal» y «espacio de color Lab».

  • Digital Image Warping
  • Computer Graphics: Principios y práctica en C (2ª edición)
  • Principios del procesamiento digital de imágenes: Técnicas fundamentales
  • Principios del procesamiento digital de imágenes: Algoritmos básicos
  • Principios del procesamiento digital de imágenes: Métodos avanzados

He encontrado que el código fuente de OpenCV, LibGD, FreeImage, Libvips, Pixman, Cairo, ImageMagick, stb_image, Skia y FrameWave es muy útil para entender las implementaciones y consideraciones del mundo real. La mayoría de los libros de texto asumen un plano infinito, ignoran los errores de uno en uno, las limitaciones de los puntos flotantes, la precisión del espacio de color y la simetría operativa dentro de una región delimitada. No puedo recomendar ningún libro de texto como referencia precisa, sólo como punto de partida conceptual. Hice algunas notas con respecto a las cuestiones a tener en cuenta al crear una biblioteca de imágenes.

También, tenga en cuenta que la visión por ordenador es muy diferente de la creación de imágenes. En la visión por ordenador, la precisión del remuestreo importa muy poco, por ejemplo. Pero en la creación de imágenes, estás sirviendo imágenes a fotógrafos, personas con una percepción visual mucho más aguda que el desarrollador medio. Las imágenes producidas se mostrarán junto a otras CSS e imágenes, y la menor inexactitud es bastante visible. Está compitiendo con Lightroom; con herramientas fuera de línea que producen resultados visualmente perfectos. El software para el usuario final será descartado si los fotógrafos sienten que está corrompiendo su trabajo.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.