Otimizando o resumo de imagem de batch é essencial para aplicativos pesados em imagem (catálogos de e-commerce, galerias, feeds). Aspose.Imaging para .NET permite que você carregue, resume e encode imagens de forma eficiente enquanto mantém seu código totalmente gerenciado e cross-platform.

Exemplo completo

Passo 1: Escolha uma estratégia de recuperação apropriada

Escolha uma estratégia que corresponda aos seus limites de desempenho:

  • Caixa de limite (recomendada para miniaturas): Use FitInto As imagens se encaixam no interior targetWidth × targetHeight ** Sem distorção** (mantenha a proporção de aspecto).
  • ** Dimensão absoluta (pixéis exatos):** Use um resíduo absoluto se os consumidores precisarem de dimensões fixas (podem ser distorcidos se a proporção de aspecto for diferente).
  • Percentagem de escalagem: Fácil para descida uniforme de tamanhos diferentes (por exemplo, 50% do original).

Tip: Para redes de lojas e cartões sociais, FitInto É geralmente o padrão mais seguro.

Etapa 2: Controlar a memória e o caching

Aspose.Imaging suporta caching configurável para que batches grandes não superem a RAM:

  • Preferir caching em disco para grandes empregos (caminho suportado por SSD).
  • Configure a pasta de cache e o tamanho do orçamento antes do processamento.
// Configure once at startup (example values)
Aspose.Imaging.Cache.CacheType   = Aspose.Imaging.Cache.CacheType.CacheOnDisk;
Aspose.Imaging.Cache.CacheFolder = @"D:\imaging-cache";
Aspose.Imaging.Cache.CacheSize   = 1L * 1024 * 1024 * 1024; // 1 GB

E também:

  • Disponível em cada Image Assim que for salvo.
  • Evite manter muitas imagens descodificadas vivas ao mesmo tempo – processo por arquivo.

Passo 3: Paralelize com segurança

Utilização Parallel.ForEach (como no Gist), mas tune-o:

  • Sete MaxDegreeOfParallelism para um valor sensível para a sua caixa (cores de CPU, velocidade I/O, cabine de memória).
  • Cada tarefa deve funcionar em seu próprio ** Image Por exemplo, não compartilhe objetos de imagem entre filas.
  • Mantenha suas opções de codificação imutáveis por reserva para evitar controvérsia.

** Guia: ** Comece com MaxDegreeOfParallelism = Environment.ProcessorCount Adaptação após o perfil.

Passo 4: Escolha codificadores e qualidade deliberadamente

  • Para as saídas JPEG, tune o tamanho do arquivo vs. qualidade usando JpegOptions.Quality (ponto doce típico: 75–90).
  • Para os ativos que exigem transparência ou rendimento sem perda, use PngOptions em vez disso.
  • Mantenha o formato de saída consistente por caso de uso (por exemplo, JPEG para fotos, PNG para ativos de UI).

Passo 5: Falhas de curto-circuito; Mantenha o batch em movimento

Mergulhe cada arquivo em uma tentativa/catch (como você fez) e logue o caminho + exceção.

  • Desligar arquivos não-imagem (extensões de filtro para frente).
  • Logar tamanhos originais e de saída para validar poupanças.
  • Escrever falhas em um CSV para re-runs.

Etapa 6: I/O Higiene

  • Certifique-se de que o diretório de saída existe e está em um disco rápido ** (SSD).
  • Evite escrever a saída sobre a entrada; escreva para um diretório separado.
  • Se você tem milhões de arquivos, partilhe as saídas em subfolders para manter as listas de diretórios rápidas.

Passo 7: Verifique os resultados com um teste de saúde rápido

Após a reposição:

  • Valide a largura / altura em relação aos seus objetivos.
  • Confirmar o tipo de arquivo/extensão corresponde ao encoder usado.
  • Verificação da qualidade visual para casos de bordo comuns (panoramas, pequenos ícones, PNGs transparentes).

Melhores práticas (Checklist)

    • Capacidade: * Set CacheType, CacheFoldere um razoável CacheSize.
  • ** Paralelismo: ** Utilização Parallel.ForEach com tonalidade MaxDegreeOfParallelismNão compartilhado Image de casos.
    • Disponível: * Sempre disponível Image em breve.
  • *Encoder: *Utilização JpegOptions.Quality para JPEG; alternar para PngOptions para a perda / alfa.
  • I/O: Raízes de entrada e saída separadas; diretórios pré-creados.
  • Filtração: Limita-se às extensões de imagem conhecidas antes de carregar.
  • Logging: Recorde falhas e métricas básicas (conto, MB em / fora).
  • Atualizações: Mantenha Aspose.Imaging atualizado para melhorias de desempenho contínuas.

More in this category