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 um comentário