Criando e manipulando imagens com C-Sharp – Parte 2
Seguindo a serie de artigos de criação e manipulação de imagens (veja o arquivo anterior), nesse artigo irei ensinar como remover as Meta Tags existentes em uma imagem do tipo JPG. Essas Meta Tags são chamadas de ExifW (Exchangeable image file format) e nelas existem diversas informações sobre a imagens.
Normalmente encontramos essas Meta Tags nas fotos que são tiradas por câmeras fotográficas digitais. Eis algumas das informações encontradas.
- Marca do Equipamento
- Software de Criação
- Velocidade do obturador
- Modo do Flash
- Comprimento focal
- Abertura do diafragma
- Tempo de exposição
- Data em que a foto foi tirada
- etc…

A principio utilizei essa técnica para editar uma foto sem a necessidade de utilizar o meu editor de imagens (PhotoshopW). Agora vamos ao que interessa.
private void RemoveExifProperties(string imagePath)
{
// Imagem original
System.Drawing.Bitmap OriginalBitmap = new System.Drawing.Bitmap(imagePath);
// Carrega a lista de propriedades da imagem
System.Drawing.Imaging.PropertyItem[] aPropertyItem = OriginalBitmap.PropertyItems;
foreach (System.Drawing.Imaging.PropertyItem property in aPropertyItem)
{
// Pega a propriedade atual da imagem
System.Drawing.Imaging.PropertyItem p = property;
// Atribui novo valor a propriedade
p.Value = new byte[0];
// Seta a nova propriedade
OriginalBitmap.SetPropertyItem(p);
}
// Salva a imagem em memoria
System.IO.MemoryStream mStream = new System.IO.MemoryStream();
OriginalBitmap.Save(mStream, OriginalBitmap.RawFormat);
OriginalBitmap.Dispose();
// Salva a imagem da memoria em arquivo
System.Drawing.Bitmap CopyBitmap = new System.Drawing.Bitmap(mStream);
CopyBitmap.Save(imagePath);
CopyBitmap.Dispose();
mStream.Dispose();
}
No Código acima eu informo para o meu método o caminho físico da minha imagem que desejo remover as informações. Eu atribuo o array de propriedades da imagem a um variável do tipo System.Drawing.Imaging.PropertyItem[] e em seguida faço um foreach (laço de repetição) para pegar uma propriedade da imagem por vez e atribuir valor do tipo byte[0]. Faço isso porque o valor dá propriedade é do tipo array de byte(byte[]).
Feito isso, crio uma variável do tipo MemoryStream e salvo a imagem nela. Esse processo atribui a imagem em memória para que eu possa salva-la.
Ai vem a pergunta, porque não salvar diretamente em disco? Não poderia porque a imagem esta aberta e ocorreria um Exception ao tentar sobrescrever.
A solução é jogar a imagem modificada em memória para depois salva-la. Após realizar todo esse processo, daremos chamaremos o método Dispose para as variáveis do tipo Bitmap e MemoryStream para evitar descarregar as informações da memória.
Agora basta utilizar o método no projeto que precisar e passar somente o caminho físico da imagem para modificá-la.
private void btnProcessar_Click(object sender, EventArgs e)
{
string filePath = @"D:Minhas imagensS7301443.JPG";
RemoveExifProperties(filePath);
}
E aqui temos o resultado.

Algumas informações aparentemente não são removidas e sim atribuídas com seus valores padrões.
Espero que tenha entendido. Caso tenha alguma dúvida deixe seu comentário.
Abraço e sucesso!!!
