# Configurações do Image Processor

[Image Processor](/pt-br/documentacao/plataforma/applications/#image-processor) é um módulo de [Applications](/pt-br/documentacao/plataforma/applications/), ativado para uma aplicação por vez. Com o módulo ativado, uma requisição de imagem pode carregar uma query string `ims` que descreve uma transformação. Azion retorna uma imagem derivada, construída a partir da imagem de origem no servidor de origem. Esta página traz o campo, a flag e a interface que define cada um, além dos behaviors, campos de cache, headers e datasets que o módulo alcança.

---

## Ativação do módulo

Cinco interfaces definem o mesmo switch, e o switch pertence à aplicação: uma aplicação pode carregar o módulo enquanto outra não.

| Interface                                                                                                                     | Onde você define                                                                            | Campo ou flag                                                                              |
| ----------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------ |
| Azion Console                                                                                                                 | O grupo **Default Modules** da seção **Modules**, na aba **Main Settings** de uma aplicação | O switch **Image Processor**, com o texto de ajuda "Enable dynamic image editing options." |
| Azion API v4                                                                                                                  | `PATCH /v4/workspace/applications/<id>`                                                     | `modules.image_processor.enabled`                                                          |
| Azion API v3                                                                                                                  | `PATCH https://api.azionapi.net/edge_applications/<id>`                                     | `image_optimization`                                                                       |
| [Azion CLI](/pt-br/documentacao/devtools/cli/)                                                                                | `azion create application` e `azion update application`                                     | `--image-processor`                                                                        |
| [`azion.config.js`](/pt-br/documentacao/devtools/cli/azion-config-js/) e [Azion Lib](/pt-br/documentacao/devtools/azion-lib/) | O objeto da aplicação                                                                       | `imageProcessorEnabled`                                                                    |

`modules.image_processor.enabled` e `imageProcessorEnabled` são booleanos, e `imageProcessorEnabled` assume `false` por padrão. A flag do Azion CLI recebe uma string: `--image-processor true`. Em Azion Console, o switch é salvo com **Save**.

API v4 carrega o switch no objeto `modules` da aplicação:

```json
{
  "modules": {
    "image_processor": {
      "enabled": true
    }
  }
}
```

O mesmo objeto `modules` carrega `application_accelerator`, `cache` e `functions`, cada um com seu próprio booleano `enabled`. API v3 nomeia o switch `image_optimization` e o recebe no nível superior do corpo.

---

## Behaviors do Rules Engine

Três behaviors do [Rules Engine](/pt-br/documentacao/plataforma/applications/rules-engine/) compõem a regra que processa uma imagem. **Optimize Images** exige o módulo Image Processor na aplicação que executa a regra.

| Behavior               | Fase              | Tipo na API          | O que faz                                                                                                                                                                                    |
| ---------------------- | ----------------- | -------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Optimize Images**    | **Request Phase** | `optimize_images`    | Ativa Image Processor para a requisição correspondente. Não recebe atributos.                                                                                                                |
| **Set Cache Policy**   | **Request Phase** | `set_cache_policy`   | Aplica um cache setting à requisição correspondente. `attributes.value` carrega o id do cache setting, e Azion Console o nomeia em um segundo dropdown.                                      |
| **Add Request Header** | **Request Phase** | `add_request_header` | Adiciona um header à requisição. `attributes.value` assume o formato `Field: value`, como `Accept: image/webp` ou `Accept: image/avif`, que é o que uma conversão para esses formatos exige. |

Um criterion da mesma regra carrega `variable`, `operator`, `conditional` e `argument`. Uma regra que corresponde a requisições de imagem lê `${request_uri}` ou `${uri}` com o operador `matches`, usando um argumento como `\.(jpg|jpeg|gif|bmp|png|ico|webp|avif)`.

---

## Cache variation

Uma imagem derivada é armazenada em cache sob a própria cache key. A cache key inclui a query string `ims`, e uma variação com um formato convertido carrega o formato do arquivo após o separador, como em `httpsstatic.yourdomain.com/static/images/image_1.jpg?ims=880x@@webp`.

Variar o cache por query string é um campo do [Application Accelerator](/pt-br/documentacao/plataforma/applications/#application-accelerator): `cache_vary_by_querystring` está sob `modules.application_accelerator` em um cache setting. Variar o cache por `ims`, portanto, exige esse módulo. Processar uma imagem não o exige.

| Campo                                    | Controle no Console | O que define                                                                                                                    |
| ---------------------------------------- | ------------------- | ------------------------------------------------------------------------------------------------------------------------------- |
| `cache_vary_by_querystring.behavior`     | **Behavior**        | Como o cache trata os parâmetros da query string. O dropdown oferece *Allowlist*, *Denylist*, *Ignore* e *All*.                 |
| `cache_vary_by_querystring.fields`       | **Fields**          | Os parâmetros de query string considerados para a variação de cache, um por linha. Um cache setting para imagens carrega `ims`. |
| `cache_vary_by_querystring.sort_enabled` | **Sort**            | Se os parâmetros de query string são ordenados, de forma que o comportamento do cache não dependa da ordem em que chegam.       |

Em Azion Console, os três controles ficam no painel **Cache vary by Query String** da seção **Application Accelerator** de um cache setting. Para o restante dos campos que um cache setting carrega, incluindo a idade máxima do objeto em cache, consulte [Cache Settings](/pt-br/documentacao/plataforma/applications/cache/cache-settings/). Para os demais campos que o módulo libera, consulte [Configurações do Application Accelerator](/pt-br/documentacao/plataforma/applications/application-accelerator/configuracoes/).

---

## Headers de resposta

Azion retorna dois headers na resposta a uma requisição que carrega uma query string `ims`.

| Header                  | O que carrega                                                                              |
| ----------------------- | ------------------------------------------------------------------------------------------ |
| `x-ims`                 | Se Image Processor processou a resposta. Uma resposta processada carrega `x-ims: Enabled`. |
| `x-original-image-size` | O tamanho em bytes da imagem de origem, antes da transformação.                            |

---

## Dados de uso e eventos

Azion reporta a atividade de Image Processor em seis superfícies: duas em Real-Time Metrics, duas em Real-Time Events e duas em GraphQL.

| Superfície                                                                                               | O que carrega                                                                                                                                     |
| -------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
| A aba **Image Processor** de [Real-Time Metrics](/pt-br/documentacao/plataforma/real-time-metrics/)      | Métricas das requisições feitas às imagens processadas por Image Processor na sua conta, nos gráficos Total Requests e Total Requests per Second. |
| O gráfico **Bandwidth Saving** de Real-Time Metrics, em Applications                                     | O tráfego que a conta economizou.                                                                                                                 |
| O dataset **Image Processor** de [Real-Time Events](/pt-br/documentacao/plataforma/real-time-events/)    | Os registros de eventos das requisições feitas a aplicações que usam Image Processor. O dataset exige o módulo.                                   |
| O campo **Proxy Upstream** de Real-Time Events                                                           | `ims_http`, o valor que o campo assume quando a origem do Tiered Cache é Image Processor.                                                         |
| O dataset de consumo de [GraphQL](/pt-br/documentacao/devtools/graphql/campos-gql-consumption/)          | `productId` `1441110021` e a métrica `images_processed`, o número total de imagens processadas por Image Processor.                               |
| Os [datasets de métricas](/pt-br/documentacao/devtools/graphql/campos-gql-real-time-metrics/) de GraphQL | O dataset `imageProcessedMetrics` e seus campos.                                                                                                  |

Os dados ficam disponíveis por até 24 meses. Para criar a consulta de consumo e ler sua resposta, consulte [Consultar dados de uso do Image Processor](/pt-br/documentacao/guias/plataforma/observabilidade/consultar-dados-de-uso-image-processor-com-graphql/).

---

## Biblioteca WASM Image Processor

WASM Image Processor é uma biblioteca WebAssembly que processa imagens dentro de uma função do [Functions](/pt-br/documentacao/plataforma/functions/). Ela carrega `loadImage`, `resize`, `getImageResponse` e `clean`, e grava `webp`, `jpeg` e `png`. É uma superfície de produto diferente do módulo Image Processor, e nenhum campo desta página a configura. Para mais informações, consulte [WASM Image Processor](/pt-br/documentacao/devtools/azion-lib/wasm-image-processor/).

---

## Recursos relacionados

- [Primeiros passos com Image Processor](/pt-br/documentacao/plataforma/applications/image-processor/primeiros-passos.md): Ative o módulo e solicite uma imagem transformada pela primeira vez.
- [Entrega de imagens](/pt-br/documentacao/plataforma/applications/image-processor/entrega-de-imagens.md): O caminho que uma requisição de imagem derivada percorre, e onde a transformação acontece.
- [Parâmetros de URL do Image Processor](/pt-br/documentacao/plataforma/applications/image-processor/parametros-de-url.md): A gramática da query string `ims` que estas configurações ativam.
- [Processar imagens](/pt-br/documentacao/guias/performance-e-confiabilidade/otimizacao-de-entrega/processar-imagens.md): As etapas que ativam o módulo e criam a regra, interface por interface.
