Desenvolvimento - ASP. NET
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. O Namespace System.Drawing do .NET Framework permite manipular imagens com muita facilidade e há muitos recursos para isso.
por Rodrigo GlauserComo 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 administradorde um site gerar seu próprio conteúdo e vê-lo sendo"roubado" porconcorrentesé 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 .NETFramework o que não conseguíamos facilmente no ASP 3.0 por exemplo.
Neste artigo mostrarei comosobrepor 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 omé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.NETWeb 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.Drawinge 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 abaixoestá oMé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, _
ByVal nomeArquivo As String, ByVal nomeArquivoMarca As String, _
ByVal tamanho As Double)
Dim tamanhoFinal, alturaFinal As Integer
Dim dimensaoFinal As Size
Dim oImg As System.Drawing.Image
Dim oImgFinal As System.Drawing.Image
" Objetos Image que conterão a imagem original e redimensionada respectivamente.
Verificamos abaixo sea 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âmetroQueryString 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 servidore 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
O Namespace System.Drawing é o que particularmente eu mais gosto. É possível fazer coisas inimagináveis com ele. Espero que possa ter ajudado alguém com este artigo e até a próxima com mais ASP.NET.