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