Gerando uma miniatura da imagem no c#

No projeto que estou trabalhando precisamos implementar uma forma de o usuário poder enviar imagens ao servidor, mas que essa imagem tivesse um tamanho máximo fixo, para resolver esse problema resolvi criar um Helper.

/// <summary>
/// Classe especializada em tratamento de imagens
/// </summary>
public class HelperImage
{
	/// <summary>
	/// Gera uma imagem em miniatura
	/// </summary>
	/// <param name="stream">Visão genérica da sequência de bytes</param>
	/// <param name="sizeInPercentage">Tamanho da imagem para ser redimencionada em %</param>
	/// <returns>Miniatura da imagem</returns>
	public Image GetThumbnail(Stream stream, int sizeInPercentage)
	{// Utiliza o visão genérica da visão de bytes para carregar a imagem, após utilizar libera a utilização da memória
		using (stream)
		{// Carrega a imagem através do stream
			using (Image image = Image.FromStream(stream))
			{// Calcula o tamanho da altura e largura com base na porcentagem
				int newWidth = (image.Width * sizeInPercentage) / 100;
				int newHeight = (image.Height * sizeInPercentage) / 100;
				// Gera a miniatura da imagem
				return image.GetThumbnailImage(newWidth, newHeight, null, System.IntPtr.Zero);
			}
		}
	}
	/// <summary>
	/// Gera uma imagem em miniatura
	/// </summary>
	/// <param name="file">Caminho para a imagem</param>
	/// <param name="sizeInPercentage">Tamanho da imagem para ser redimencionada em %</param>
	/// <returns>Miniatura da imagem</returns>
	public Image GetThumbnail(string file, int sizeInPercentage)
	{// Carrega a imagem informada pelo usuário
		return this.GetThumbnail(File.OpenRead(file), sizeInPercentage);
	}
	/// <summary>
	/// Gera a miniatura da imagem
	/// </summary>
	/// <param name="stream">Visão genérica da sequência de bytes</param>
	/// <param name="newWidth">Nova largura para a imagem definida em pixel</param>
	/// <param name="newHeight">Nova altura para a imagem definida em pixel</param>
	/// <returns>Miniatura da imagem</returns>
	public Image GetThumbnail(Stream stream, int newWidth, int newHeight)
	{// Utiliza o visão genérica da visão de bytes para carregar a imagem, após utilizar libera a utilização da memória
		using (stream)
		{// Carrega a imagem através do stream
			using (Image image = Image.FromStream(stream))
			{// Gera a miniatura da imagem
				return image.GetThumbnailImage(newWidth, newHeight, null, System.IntPtr.Zero);
			}
		}
	}
	/// <summary>
	/// Gera a miniatura da imagem
	/// </summary>
	/// <param name="file">Caminho para a imagem</param>
	/// <param name="newWidth">Nova largura para a imagem definida em pixel</param>
	/// <param name="newHeight">Nova altura para a imagem definida em pixel</param>
	/// <returns>Miniatura da imagem</returns>
	public Image GetThumbnail(string file, int newWidth, int newHeight)
	{// Carrega a imagem informada pelo usuário
		return this.GetThumbnail(File.OpenRead(file), newWidth, newHeight);
	}

	/// <summary>
	/// Salva a imagem
	/// </summary>
	/// <param name="image">Imagem a ser salva</param>
	/// <param name="folderFile">Nome da imagem original para gerar a miniatura</param>
	public void Save(Image image, string folderFile)
	{// Verifica as informações do arquivo
		FileInfo fileInfo = new FileInfo(folderFile);
		FileSystemInfo fileSystemInfo = (FileSystemInfo)fileInfo;
		//Pega o nome do arquivo sem a extensão
		string fileName = fileInfo.Name.Replace(fileSystemInfo.Extension, "");
		string caminhoCompleto = string.Format(@"{0}\{1}-mini{2}", fileInfo.Directory, fileName, fileSystemInfo.Extension);
		image.Save(caminhoCompleto);
	}

	/// <summary>
	/// Retorna o tamanho proporcional da nova altura com base na nova largura
	/// </summary>
	/// <param name="originalWidth">Largura original da imagem</param>
	/// <param name="originalHeight">Altura original da imagem</param>
	/// <param name="newWidth">Largura que ficará a imagem</param>
	/// <returns>Altura proporcional à largura</returns>
	public int GetHeightFromWidth(int originalWidth, int originalHeight, int newWidth)
	{
		return (newWidth * originalWidth) / originalHeight;
	}
	/// <summary>
	/// Retorna o tamanho proporcional da nova largura com base na nova altura
	/// </summary>
	/// <param name="originalWidth">Largura original da imagem</param>
	/// <param name="originalHeight">Altura original da imagem</param>
	/// <param name="newHeight">Altura que ficará a imagem</param>
	/// <returns>Largura proporcional à altura</returns>
	public int GetWidthFromHeight(int originalWidth, int originalHeight, int newHeight)
	{
		return (newHeight * originalWidth) / originalHeight;
	}
}

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *