Como sabemos, JPEG (ou JPG) é um método de compressão de imagens e seu grau de compactação influencia no tamanho de armazenamento e na qualidade da imagem.
Abaixo veremos dois exemplos de como modificar este nível de compressão em C#. Lembrando que o nível de compressão em C# (Encoder.Quality) vai de 0 até 100, onde 0 representa o nível máximo de compressão e 100 nenhuma compactação.
Exemplo 1. Ajustar a qualidade da imagem JPEG para 100% de qualidade, ou seja, sem compressão.
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class jpg : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//carregando a imagem de exemplo
using (Bitmap img = new Bitmap(MapPath("~/imagem.jpg")))
{
//CodecInfo para imagens Jpeg
ImageCodecInfo codec = ImageCodecInfo.GetImageEncoders().First(enc => enc.FormatID == ImageFormat.Jpeg.Guid);
//EncoderParameters que vai setar o nível de qualidade (compressão)
EncoderParameters imgParams = new EncoderParameters(1);
//Qualidade em 100L = 100% de qualidade - sem compressão
imgParams.Param = new[] { new EncoderParameter(Encoder.Quality, 100L) };
//Salvar a imagem a imagem
img.Save(MapPath("~/nova-imagem.jpg"), codec, imgParams);
}
}
}
Exemplo 2. Reduzir a qualidade e consecutivamente o tamanho da imagem.
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class jpg : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//carregando a imagem de exemplo
using (Bitmap img = new Bitmap(MapPath("~/imagem.jpg")))
{
//CodecInfo para imagens Jpeg
ImageCodecInfo codec = ImageCodecInfo.GetImageEncoders().First(enc => enc.FormatID == ImageFormat.Jpeg.Guid);
//EncoderParameters que vai setar o nível de qualidade (compressão)
EncoderParameters imgParams = new EncoderParameters(1);
//Qualidade em 0L = máximo de compressão
imgParams.Param = new[] { new EncoderParameter(Encoder.Quality, 0L) };
//Salvar a imagem a imagem
img.Save(MapPath("~/nova-imagem.jpg"), codec, imgParams);
}
}
}
86L geralmente é um bom equilíbrio entre qualidade de imagem e tamanho de armazenamento.
Resumo:
Neste artigo vimos como manipular níveis de compressão de JPGs para aumentar e também para diminuir o tamanho e qualidade de imagens em C#.