por Cesar Cassiano Schimanco

C# - Marca d´agua em imagens

Neste artigo vou mostrar como usar o System.Drawing para inserir um logotipo em uma imagem. Abaixo criei alguns exemplos de como inserir marca d´agua em imagens usando ASP.NET / C#.
 

I nserir marca d`agua com transparência de 50% na imagem.
Aqui usei um logotipo simples com o fundo branco, mas poderia ser um GIF ou PNG com fundo transparente.
//Caminho da imagem (c:\inetpub\wwwroot\site\1.png)
	string strOriginal = MapPath("~/1.png");
	//Caminho do logo (c:\inetpub\wwwroot\site\codebreak-alpha.png)
	string strLogo = MapPath("~/codebreak-alpha.png");

	//Usando o using para fazer o Dispose() automatico das imagens
	//Carregar a imagem original
	using (imgOriginal = System.Drawing.Image.FromFile(strOriginal, true))
	{
		//Carregar o logo
		using (imgLogo = System.Drawing.Image.FromFile(strLogo, true))
		{
			//Pegar a extensão da imagem
			string extension = System.IO.Path.GetExtension(strOriginal).ToLower().Replace(".", "");

			//Definir o tipo de imagem, para salvarmos no formato correto.
			System.Drawing.Imaging.ImageFormat format;
			if (extension.IndexOf("png") > -1) //Se for PNG
				format = System.Drawing.Imaging.ImageFormat.Png;
			else if (extension.IndexOf("gif") > -1) //Se for GIF
				format = System.Drawing.Imaging.ImageFormat.Gif;
			else if (extension.IndexOf("bmp") > -1) //Se for BMP
				format = System.Drawing.Imaging.ImageFormat.Bmp;
			else  //Se nao for nenhuma das anteriores, define como JPEG
				format = System.Drawing.Imaging.ImageFormat.Jpeg;

			//Criar o objeto graphics para trabalhar com a imagem original
			using (Graphics gra = Graphics.FromImage(imgOriginal))
			{
				//Criar o Bitmap para o logo
				Bitmap logo = new Bitmap(imgLogo);

				//Largura do logo
				int intWidth = logo.Size.Width;
				//Altura do logo
				int intHeight = logo.Size.Height;
				//Posicionamento centralizado
				int intLeft = (imgOriginal.Width / 2) - (intWidth / 2);
				//Posicionamento centralizado
				int intTop = (imgOriginal.Height / 2) - (intHeight / 2);

				//Desenha a nova imagem com o logo sobreposto no canto direito inferior
				gra.DrawImage(logo, intLeft, intTop, intWidth, intHeight);
			}

			//Salvar a imagem com extensão e formato correto 
			//este exemplo ficaria assim: c:\inetpub\wwwroot\site\exemplo1.png
			imgOriginal.Save(MapPath("~/exemplo3." + extension), format);

			//Carrega a imagem na pagina
			imgExemplo3.ImageUrl = ResolveUrl("~/exemplo3." + extension);
		}
	}

 

Inserir marca d`agua no canto direito inferior da imagem.
Aqui usei um logotipo simples com o fundo branco, mas poderia ser um GIF ou PNG com fundo transparente.
//Caminho da imagem (c:\inetpub\wwwroot\site\1.png)
	string strOriginal = MapPath("~/1.png");
	//Caminho do logo (c:\inetpub\wwwroot\site\codebreak.png)
	string strLogo = MapPath("~/codebreak.png");

	//Usando o using para fazer o Dispose() automatico das imagens
	//Carregar a imagem original
	using (imgOriginal = System.Drawing.Image.FromFile(strOriginal, true))
	{
		//Carregar o logo
		using (imgLogo = System.Drawing.Image.FromFile(strLogo, true))
		{
			//Pegar a extensão da imagem
			string extension = System.IO.Path.GetExtension(strOriginal).ToLower().Replace(".", "");

			//Definir o tipo de imagem, para salvarmos no formato correto.
			System.Drawing.Imaging.ImageFormat format;
			if (extension.IndexOf("png") > -1) //Se for PNG
				format = System.Drawing.Imaging.ImageFormat.Png;
			else if (extension.IndexOf("gif") > -1) //Se for GIF
				format = System.Drawing.Imaging.ImageFormat.Gif;
			else if (extension.IndexOf("bmp") > -1) //Se for BMP
				format = System.Drawing.Imaging.ImageFormat.Bmp;
			else  //Se nao for nenhuma das anteriores, define como JPEG
				format = System.Drawing.Imaging.ImageFormat.Jpeg;

			//Criar o objeto graphics para trabalhar com a imagem original
			using (Graphics gra = Graphics.FromImage(imgOriginal))
			{
				//Criar o Bitmap para o logo
				Bitmap logo = new Bitmap(imgLogo);

				//Definir a propriedade SmoothingMode para suavizar a linha com maxima qualidade
				gra.SmoothingMode = SmoothingMode.HighQuality;
				//determina como os pixels são compensados ??durante o processamento.
				gra.PixelOffsetMode = PixelOffsetMode.HighQuality;

				//Largura do logo
				int intWidth = logo.Size.Width;
				//Altura do logo
				int intHeight = logo.Size.Height;
				//Posicionamento a esquerda
				int intLeft = imgOriginal.Width - intWidth;
				//posicionamento em relação ao topo
				int intTop = imgOriginal.Height - intHeight;

				//Desenha a nova imagem com o logo sobreposto no canto direito inferior
				gra.DrawImage(logo, intLeft, intTop, intWidth, intHeight);
			}

			//Salvar a imagem com extensão e formato correto 
			//este exemplo ficaria assim: c:\inetpub\wwwroot\site\exemplo1.png
			imgOriginal.Save(MapPath("~/exemplo1." + extension), format);

			//Carrega a imagem na pagina
			imgExemplo1.ImageUrl = ResolveUrl("~/exemplo1." + extension);
		}
	}

 

Remover o fundo branco do logotipo.
Usando o MakeTransparent removo a cor branca (#ffffff) da imagem, mas observe que o resultado não é dos melhores. O ideal seria uma imagem PNG sem fundo.
//Caminho da imagem (c:\inetpub\wwwroot\site\1.png)
	string strOriginal = MapPath("~/1.png");
	//Caminho do logo (c:\inetpub\wwwroot\site\codebreak.png)
	string strLogo = MapPath("~/codebreak.png");

	//Usando o using para fazer o Dispose() automatico das imagens
	//Carregar a imagem original
	using (imgOriginal = System.Drawing.Image.FromFile(strOriginal, true))
	{
		//Carregar o logo
		using (imgLogo = System.Drawing.Image.FromFile(strLogo, true))
		{
			//Pegar a extensão da imagem
			string extension = System.IO.Path.GetExtension(strOriginal).ToLower().Replace(".", "");

			//Definir o tipo de imagem, para salvarmos no formato correto.
			System.Drawing.Imaging.ImageFormat format;
			if (extension.IndexOf("png") > -1) //Se for PNG
				format = System.Drawing.Imaging.ImageFormat.Png;
			else if (extension.IndexOf("gif") > -1) //Se for GIF
				format = System.Drawing.Imaging.ImageFormat.Gif;
			else if (extension.IndexOf("bmp") > -1) //Se for BMP
				format = System.Drawing.Imaging.ImageFormat.Bmp;
			else  //Se nao for nenhuma das anteriores, define como JPEG
				format = System.Drawing.Imaging.ImageFormat.Jpeg;

			//Criar o objeto graphics para trabalhar com a imagem original
			using (Graphics gra = Graphics.FromImage(imgOriginal))
			{
				//Criar o Bitmap para o logo
				Bitmap logo = new Bitmap(imgLogo);

				//Definir parte branca como transparente
				logo.MakeTransparent(ColorTranslator.FromHtml("#ffffff"));

				//Definir a propriedade SmoothingMode para suavizar a linha com maxima qualidade
				gra.SmoothingMode = SmoothingMode.HighQuality;
				//determina como os pixels são compensados ??durante o processamento.
				gra.PixelOffsetMode = PixelOffsetMode.HighQuality;

				//Largura do logo
				int intWidth = logo.Size.Width;
				//Altura do logo
				int intHeight = logo.Size.Height;
				//Posicionamento a esquerda
				int intLeft = imgOriginal.Width - intWidth;
				//posicionamento em relação ao topo
				int intTop = imgOriginal.Height - intHeight;

				//Desenha a nova imagem com o logo sobreposto no canto direito inferior
				gra.DrawImage(logo, intLeft, intTop, intWidth, intHeight);
			}

			//Salvar a imagem com extensão e formato correto 
			//este exemplo ficaria assim: c:\inetpub\wwwroot\site\exemplo1.png
			imgOriginal.Save(MapPath("~/exemplo2." + extension), format);

			//Carrega a imagem na pagina
			imgExemplo2.ImageUrl = ResolveUrl("~/exemplo2." + extension);
		}
	}

Download do projeto aqui
 

Comentários

Carregando comentários

Postar um novo comentário



Processando...