Mudando o Tamanho de Arquivos JPEG x Qualidade

 

Enquanto fazíamos um trabalho de página Web, precisamos diminuir o tamanho de alguns dos nossos arquivos JPG em tempo de carga da Web. Normalmente, poderíamos reduzir consideravelmente o tamanho de arquivos JPG (não o tamanho de exibição) sem diminuir significativamente a qualidade da imagem. Procurando na Web por ferramentas shareware ou ferramentas adquiríveis, não achamos o que queríamos. Procurando no Delphi, descobrimos que o TJpegImage faz mais do que salvar um arquivo JPG com qualidade de compressão diferentes. Escrevemos nossa própria ferramenta, para alterar a relação Tamanho x Qualidade de arquivos JPG.

Sem entrar em detalhes do código completo da aplicação, o qual obviamente permite comparar o arquivo JPG original versus o modificado, mediante um slider de relação de taxa de compressão, mostraremos como converter um arquivo de entrada JPG para um arquivo de saída, com uma relação de compressão diferente, via um simples procedimento Delphi.

 

procedure SetJPGCompression(ACompression: integer; const AInFile: string; const AOutFile: string);

Parâmetros

ACompression: Relação de compressão a ser utilizada - 1 ..100 (a maioria dos arquivos JPG que utilizamos, parecem ter um valor padrão de 75, utilizarmos um valor mais alto do que 75, faz com que AUMENTE o tamanho do arquivo sem melhorar a qualidade. Utilizando um valor 40,  conseguimos uma qualidade aceitável junto com uma diminuição do tamanho do arquivo para quase a METADE. Mexa com este valor em uma barra slider).

AInFile: Filename do arquivo JPG a converter.

AOutFile: Filename do arquivo de saída convertido. 

 

 

uses JPEG;

 

procedure SetJPGCompression(ACompression: integer; const AInFile: string;

  const AOutFile: string);

var

  iCompression: integer;

  oJPG: TJPegImage;

  oBMP: TBitMap;

begin

  { Forcar a Compressião para a faixa entre 1..100 }

  iCompression := abs(ACompression);

  if iCompression = 0 then

    iCompression := 1;

  if iCompression > 100 then

    iCompression := 100;

 

  { Cria as classes de trabalho Jpeg e Bmp }

  oJPG := TJPegImage.Create;

  oJPG.LoadFromFile(AInFile);

  oBMP := TBitMap.Create;

  oBMP.Assign(oJPG);

 

  { Fazer a Compressão e salva o novo arquivo }

  oJPG.CompressionQuality := iCompression;

  oJPG.Compress;

  oJPG.SaveToFile(AOutFile);

 

  { Limpar }

  oJPG.Free;

  oBMP.Free;

end;