imazen / imageflow

imagens óptimas a velocidades incríveis

testos estado: release candidate

Docker PullsDocker Pullsview releases licença: Escolha AGPLv3 ou Comercial

Download blazing ferramentas rápidas e seguras para um fluxo de trabalho de imagem moderno.

  • imageflow_tool é uma ferramenta de linha de comando para experimentar, executar trabalhos em lote, ou quando você quer isolamento do processo. Até 17x mais rápido do que o ImageMagick. Também produz arquivos menores com maior qualidade.
  • imageflow_server pode executar trabalhos JSON ou manipular imagens em vôo (ex.: /bucket/img.jpg?w=200) para uso direto a partir deHTML. As imagens de origem podem residir no armazenamento blob, em outro servidor, ou no sistema de arquivos. Entretanto, para uso em produção, recomendamos o uso do Imageflow.NET Server, que é muito mais rico em recursos e não precisa de um proxy reverso na frente para segurança.
  • libimageflow é para uso direto (em processo) a partir de sua linguagem de programação. Veja os nossos Node bindings, Go bindings, Scala bindings, Elixir bindings, ou .NET bindings. Se ainda não temos bindings para a sua linguagem, considere passar um dia para adicioná-los. Imageflow tem um ABI simples compatível com C, do qual apenas 4 métodos são necessários para implementar bindings.

Abra um problema para que possamos escrever um exemplo de código para o seu caso de uso. Acreditamos no design orientado por feedback, e racionalizar o uso no mundo real é o caminho mais rápido para um grande produto.

Querystring API Documentation

JSON API Documentation

libimageflow, imageflow_tool, e imageflow_server estão disponíveis binários asself-contained para Windows, Ubuntu, e Mac. Também oferecemos imagens Docker para Linux (onde glibc e OpenSSL são necessários).

Agradecemos aos nossos patrocinadores no Kickstarter e aos muitos apoiantes do ImageResizer por tornar este projecto uma realidade.Visite Imageresizing.net se precisar de uma excepção AGPLv3 para uso comercial.

Comece com imageflow_tool (recomendado)

imageflow_tool examples --generate – cria um diretório de exemplos com trabalhos JSON e scripts de invocação.

Você pode usar strings de comando compatíveis com o ImageResizer 4 querystrings:

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

Or submeter um arquivo de trabalhos JSON. Os trabalhos JSON podem ter múltiplas entradas e saídas, e podem representar qualquer tipo de gráfico de operação.

O seguinte gera múltiplos tamanhos de uma imagem a partir de um arquivo de exemplo de trabalho:

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 padrão, imageflow_tool imprime uma resposta JSON para stdout. Você escreve isto no disco com --response.

--debug-package irá criar um arquivo .zip para reproduzir o comportamento problemático com v1/build e v1/querystring. Por favor envie relatórios de erros; nós tentamos facilitar.

Usando imageflow_server para imagens dinâmicas

imageflow_server start --demo

Agora você pode editar imagens de HTML… e usar srcset sem dor de cabeça.

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

Além da demonstração

Você vai querer montar vários locais de origem de imagens para prefixos. O comando --mount analisa dois-pontos (:) delimita a lista de argumentos. O primeiro é o prefixo que você vai usar na URL (como http://localhost:39876/prefix/. O segundo é o nome do motor. Os restantes argumentos são enviados para o motor.

Exemplos

  • --mount "/img/:ir4_local:C:\inetpub\wwwroot\images"
  • --mount "/proxyimg/:ir4_http:https:://myotherserver.com/imagefolder/" (note a dupla fuga dos dois pontos)
  • --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 o libimageflow da sua língua

  • .NET As encadernações padrão podem ser encontradas em https://github.com/imazen/imageflow-dotnet
  • Nó encadernações disponíveis em https://github.com/imazen/imageflow-node
  • Ruby – Encadernações básicas podem ser encontradas em encadernações/ruby/
  • C e a interface C+++ é estável – use encadernações/cabeçalhos/imageflow_default.h ou uma das muitas convenções alternativas fornecidas com cada release.
  • Rust – Imageflow é escrito em Rust, então você pode usar a imageflow_core crate.
  • outras linguagens – Use uma ferramenta de geração de vinculação FFI para sua linguagem, e alimente-a com o arquivo de cabeçalho que mais gostar.

Você também pode achar que imageflow_tool é bastante rápido para suas necessidades.

Caixas dentro deste projeto

  • imageflow_abi – A API estável da libimageflow/imageflow.dll.Os cabeçalhos para libimageflow estão localizados em bindings/headers
  • imageflow_tool – A ferramenta de linha de comando
  • imageflow_server – O servidor HTTP
  • c_components – Uma caixa de ferrugem contendo a fonte C
  • c_components/tests – Testes para os componentes C
  • imageflow_types – Tipos compartilhados usados pela maioria das caixas, com a seriação JSON
  • imageflow_helpers – funções e utilidades comuns de ajuda
  • imageflow_riapi – análise/layout de compatibilidade RIAPI e ImageResizer4
  • imageflow_core – A biblioteca principal e motor de execução

Falhas conhecidas e características em falta (a partir de Maio de 2020)

Falhas

  • imageflow_server ainda não expõe o JSON API.
  • Sem testes de fuzz ou auditoria de terceiros ainda.

Falta de funcionalidades

  • Blurring.

Atraso de funcionalidades

  • Previsão do custo do trabalho (atrasado – sem interesse da comunidade)

Você precisará mais do que apenas o Rust para compilar o Imageflow, pois ele tem um par de dependências C.

  1. Instalar pré-requisitos específicos da plataforma (encontre a seção à direita abaixo).
  2. Clonar e cd neste repositórioE.g., git clone [email protected]:imazen/imageflow.git && cd imageflow)

Se você estiver usando bash em qualquer plataforma, você deve ser capaz de usar build.sh

  • ./build.sh clean – para limpar
  • ./build.sh test – executar todos os testes
  • ./build.sh debug – gerar binários de depuração lenta
  • ./build.sh release – gerar binários de lançamento
  • ./build.sh install – instalar binários de lançamento para /usr/local (deve executar `./build.sh release first)
  • ./build.sh uninstall – desinstale os binários de release

build.sh coloque os binários no arquivo ./artifacts/ directory

Se você estiver no Windows, execute apenas comandos de compilação na janela criada por win_enter_env.bat.

Você também pode compilar usando cargo diretamente, embora isto irá colocar binários em ./target/release em vez disso.* cargo test --all para testar o Imageflow em modo debug (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 tudo em modo de lançamento* cargo doc --no-deps --all --release para gerar documentação.

Compilar a partir do código fonte com Docker

Se você quiser replicar o ambiente CI Imageflow:

  1. Instalar Docker
  2. Executar a partir de uma sessão de bash (Docker + Windows WSL, macOS, ou linux)
  3. git clone [email protected]:imazen/imageflow.gitcd imageflow./build_via_docker.sh debug

Isto irá criar caches dentro de ~/.docker_imageflow_caches específicos para a imagem da docker utilizada. Instâncias serão efémeras; o único estado estará nas caches.

Os Dockerfiles oficiais são também um óptimo local para obter passos mais detalhados na configuração do ambiente, pois não listamos os passos para a configuração:

  • Valgrind (versões comuns quebram openssl; pode ser necessário construir a partir do código fonte)
  • Code coverage
  • Bindings.

Pré-requisitos do Linux

(testado no Ubuntu 16.04 e 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é-requisitos Mac OS

  1. Instalar Ferramentas de Linha de Comando XCode se ainda não tiver
  2. Instalar Homebrew se ainda não tiver.
  3. Instalar nasm, pkg-config, e wgetbrew install nasm pkg-config wget
  4. Instalar Ferrugem

Windows WSL (Ubuntu Bionic Subsystem) Pré-requisitos

  1. Instalar Ubuntu 18.04 da Loja do Windows
  2. Executar Ubuntu 18.04 e criar seu nome de usuário/senha
  3. sudo apt-get update para atualizar os pacotes disponíveis.
  4. Instalar Ferrugem 1.28+ executandocurl https://sh.rustup.rs -sSf | sh -s -- -y --default-toolchain stable
  5. Instale as ferramentas de compilação (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 usar um editor de texto gráfico, você precisará baixar o imageflow para um diretório “Windows”, depois mapeá-lo para um local no Ubuntu.Por exemplo, se você clonar o imageflow para Documentos/imageflow, você executaria:ln -s /mnt/c/Users//Documents/imageflow ~/win_imageflow
  7. Fechar e reabrir o Ubuntu

Windows 10 Pré-requisitos

  1. Instalar o Visual Studio 2017 Build Tools (separadamente ou como um componente VS)
  2. Instalar o Git 64-bit.
  3. Run As Administrator o instalador NASM 64-bit – ele não irá solicitar.
  4. Instalar Rust 64-bit se você quiser 64-bit Imageflow ou Rust 32-bit se você não.Install toolchain stable como padrão, e confirmar a adição a PATH.
  5. Abra a linha de comando e muda para o diretório raiz deste repositório
  6. Editar ci/wintools/SETUP_PATH.bat para garantir que rust/cargo, nasm, git, e Git/mingw64/bin estejam todos em %PATH%.
  7. Executar win_enter_env.bat para iniciar uma sub-shell (edite-a se você quiser uma compilação de 32 bits)
  8. Todos os comandos de compilação devem ser executados na sub-shell. Execute cmd.exe /c "ci\wintools\win_verify_tools.bat" para verificar se as ferramentas estão presentes.

Como se aprende a processar imagens para a web?

Primeiro, leia Imagens de Alta Performance para contexto.

Não há muitos livros de texto excelentes sobre o assunto. Aqui estão alguns da minha estante pessoal. Entre eles (e a Wikipédia) consegui juntar cerca de 60% do conhecimento que precisava; o resto encontrei lendo o código fonte de muitas bibliotecas populares de processamento de imagens.

Comecei por ler Princípios de Processamento Digital de Imagens: Core Algorithms front-to-back, depois Digital Image Warping. A Wikipédia também é uma referência útil, embora as páginas relevantes não estejam ligadas ou categorizadas juntas – use termos de busca específicos, como “interpolação bilinear” e “Lab color space”.

  • Digital Image Warping
  • Computer Graphics: Princípios e Prática em C (2ª Edição)
  • Princípios do Processamento Digital de Imagens: Técnicas Fundamentais
  • Princípios do Processamento Digital de Imagem: Algoritmos Centrais
  • Princípios do Processamento Digital de Imagem: Métodos Avançados

Eu encontrei o código fonte para OpenCV, LibGD, FreeImage, Libvips, Pixman, Cairo, ImageMagick, stb_image, Skia, e FrameWave é muito útil para entender implementações e considerações do mundo real. A maioria dos livros de texto assume um plano infinito, ignora os erros por um, as limitações de ponto flutuante, a precisão do espaço de cor e a simetria operacional dentro de uma região delimitada. Eu não posso recomendar nenhum livro didático como uma referência precisa, apenas como um ponto de partida conceitual. Eu fiz algumas anotações sobre questões a serem observadas na criação de uma biblioteca de imagens.

Tambem, tenha em mente que a visão por computador é muito diferente da criação de imagens. Na visão computacional, a precisão da reamostragem importa muito pouco, por exemplo. Mas na criação de imagens, você está servindo imagens para fotógrafos, pessoas com percepção visual muito mais apurada do que o revelador médio. As imagens produzidas serão renderizadas lado a lado com outros CSS e imagens, e o mínimo de imprecisão é bastante visível. Você está competindo com o Lightroom; com ferramentas offline que produzem resultados visualmente perfeitos. O software do usuário final será descartado se os fotógrafos sentirem que ele está corrompendo seu trabalho.

Deixe uma resposta

O seu endereço de email não será publicado.