| Por Rodrigo Glauser rsglauser@hotmail.com É líder do Grupo de Usuários Gup.NET Ponta Grossa/PR, desenvolvedor coorporativo da Masisa do Brasil LTDA, trabalha atualmente em um projeto de integração .NET e SAP em filiais da empresa localizadas no Brasil, Argentina, Chile, Venezuela e México, trabalha com .NET há 2 anos e com programação web há 4 anos. Também concentra esforços em soluções para internet na solucoesweb.com. The Spoke: http://br.thespoke.net/MyBlog/rglauser/MyBlog.aspx |
|
|
|
|
| Adicionando CopyRight e redimensionando imagens com ASP.NET | |
|
|
|
Como desenvolvedor de sites comerciais, frequentemente me deparei com a necessidade de gerar copyright nas imagens e fotos dos sites. Todo mundo sabe quanto trabalho dá para o administrador de um site gerar seu próprio conteúdo e vê-lo sendo "roubado" por concorrentes é no mínimo desanimador.
O Namespace System.Drawing do .NET Framework permite manipular imagens com muita facilidade e há muitos recursos para isso, é impressionante o que podemos fazer agora com o .NET Framework o que não conseguíamos facilmente no ASP 3.0 por exemplo.
Neste artigo mostrarei como sobrepor esta imagem:

no canto superior esquerdo desta outra:

Produzindo a seguinte saída:

Além da sobreposição irei mostrar como se faz o redimensionamento OnTheFly de ambas imagens interpoladas produzindo uma imagem final em qualquer dimensão sem o utilizar o método GetThumbnailImage() que em meus testes apresentou uma qualidade final das imagens muito ruim.
1º Passo - Criar a Solução ASP.NET
Crie um projeto Visual Basic -> ASP.NET Web Application chamado GerarCopyRight. Não há problema em usar um projeto já existente, fica a seu critério.

Adicione um WebForm chamado foto.aspx e crie uma subpasta ao projeto chamado imagens onde ficarão as imagens que iremos tratar. Na pasta Imagens coloque uma imagem chamada marca.gif que conterá a Marca do CopyRight. Coloque também todas as imagens que desejar que tenham a marca sobreposta.

2ª Passo - Código Comentado
Abra a página foto.aspx em modo código e faça a importação dos seguintes namespaces: System.Drawing e System.Drawing.Drawing2D
No método Page_Load da página insira o seguinte código:
Private Sub Page_Load(ByVal sender As System.Object, |
Notem que 2 parâmetros deverão ser passados por QueryString: O Nome do Arquivo e o Tamanho em Pixels final da Imagem.
Neste bloco abaixo está o Método GerarCopyRight que irá fazer o processamento da Imagem . Como padrão utilizei a palavra Final para me referir aos objetos que se referem à imagem redimensionada.
Private Sub GerarCopyRight(ByVal nomePasta As String, _ |
Verificamos abaixo se a figura realmente existe no local informado. Uma boa prática é de colocar uma figura em branco ou com alguma mensagem dizendo que a imagem solicitada não foi encontrada.
If IO.File.Exists(nomePasta & nomeArquivo) Then oImg = Image.FromFile(nomePasta & nomeArquivo) Else ' oImg = Image.FromFile(nomePasta & "NaoDisponivel.jpg") ' Aqui você pode colocar uma figura dizendo "Imagem Não Disponível" End If |
Aqui determinamos o comprimento e largura em pixels da imagem final que será exibida. Se não for passado nenhum valor para o parâmetro QueryString tamanho então a imagem Final não sofre redimensionamento.
If tamanho = 0 Then tamanhoFinal = oImg.Width alturaFinal = oImg.Height Else tamanhoFinal = tamanho alturaFinal = oImg.Height / (oImg.Width / tamanhoFinal) End If |
Instanciamos o objeto Size com as dimensões finais da
figura:
dimensaoFinal = New Size(tamanhoFinal, alturaFinal) |
Abaixo Instanciamos o Objeto oImgFinal para termos um objeto image em branco com as dimensões da imagem Final. Com o objeto oImgFinal instanciamos o objeto oGraphic da classe Graphic onde as imagens serão interpoladas e redimensionadas.
oImgFinal = New Bitmap(dimensaoFinal.Width, dimensaoFinal.Height, _ |
Instanciamos um objeto Retângulo que contém as coordenadas x e y e as dimensões width , height. Com estas informações de posicionamento interpolamos a primeira imagem (oImg) ao objeto oGraphic já redimensionada.
Dim oRectangle As Rectangle = New Rectangle(0, 0, _ |
O código abaixo é o que interpola a imagem de
CopyRight ao objeto oGraphic. Na primeira linha fazemos a verificação de
existencia da imagem de CopyRight no servidor e também colocamos um
tamanho mínimo para a inserção da marca, isto porque imagens pequenas
normalmente não necessitam de proteção. A Constante proporcao determina quantas
vezes a imagem de copyright será menor que a imagem redimensionada. E por final
interpolamos a imagem com a marca de Copyright ao oGraphic com base nas
coordenadas informadas pelo objeto oRectangleLogo. Se você desejar que a imagem
seja sobreposta em outra posição altere o x e y do oRectangleLogo.
Obs. A imagem de Copyright pode ser em formato png, jpg, gif e pode conter
transparência.
If dimensaoFinal.Width > 250 And IO.File.Exists(nomeArquivoMarca) Then Dim oImgMarca As Image Dim tamanhoMarca, alturaMarca As Double Const proporcao As Double = 4.5 oImgMarca = System.Drawing.Image.FromFile(nomeArquivoMarca) tamanhoMarca = dimensaoFinal.Width / proporcao alturaMarca = (oImgMarca.Height / oImgMarca.Width) _ |
Para testar a página abra seu navegador e digite
http://localhost/GerarCopyRight/foto.aspx?nomeArquivo=ImagemOriginal.jpg&tamanho=
300
Altere os parâmetros ( Nome do Arquivo e Tamanho ) e perceba as alterações
ocorridas na imagem. Outras configurações como nome da pasta, nome do arquivo
com o copyright, proporção, etc... poderiam ser mantidas no web.config ou
passadas por querystring também.
Para mostrar as imagens produzidas OnTheFly em outras páginas é só informar a url no src da Tag Img ou ImageUrl da Tag <asp:Image
|
<img border=0 src="http://localhost/GerarCopyRight /foto.aspx?nomeArquivo=ImagemOriginal.jpg&tamanho=300"> |