Converter imagem para byte e de byte para imagem em C# (CSharp)

Converter uma imagem de Image para byte array e de byte array para Image, de grande utilidade quando queremos salvar uma imagem em um banco de dados, assim como comparar duas imagens em C# (CSharp).


Autor : Antonio Carlos Ferreira de Azevedo
Postado em : 28/11/2015

Classe para converter e comparar Imagens


Para converter uma Imagem para byte array:

ConverterImagem.imageToByteArray(imagem)
Onde o valor deve ser um Image
A função retorna um byte[] byte array com a imagem convertida
Quando for armazenar sua imagem no banco de dados converta a imagem e armazene o resultado em byte[] byte array

Para converter um byte array para Imagem:

ConverterImagem.byteArrayToImage(imagem)
Onde o valor deve ser um byte[] byte array
A função retorna uma Image com a imagem convertida
Quando fizer a leitura no banco de dados converta de byte[] byte array para Image para pode exibir as imagens

Para comparar duas Imagens:

ConverterImagem.ComparaImagem(imagem1, imagem2)
Onde o valor deve ser de duas imagens podendo ser passados os campos como Image ou byte[] byte array
A função retorna um valor Boolean sendo true se as duas imagens forem iguais e false se não forem iguais

Crie uma classe em seu projeto com o nome de ConverterImagem.cs e cole o código abaixo.

/* 
 * Converte imagem de Image para byte array e compara duas imagens para verificar se são iguais
 * 
 * Para guardar uma imagem em um banco de dados você converte para byte e armazena no banco, 
 * quando da leitura do banco de dados você deve converter novamente para imagem
 * 
 * 
 * Visite nossa página http://www.codigoexpresso.com.br
 * 
 *  
 * public byte[] imageToByteArray(Imagem)
 *        Converte uma imagem no formato 'image' para um 'byte array'
 *
 * public Image byteArrayToImage(Imagem)
 *        Converte uma imagem de 'byte array' para uma 'image'
 *
 *  public Boolean ComparaImagem(Imagem1, Imagem2)
 *        Compara duas imagens retornando 'true' se as imagens forem iguais
 *        pode-se informar duas imagens como 'image' ou já convertidas para 'byte array' 
 *        
 */
using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;

class ConverterImagem
{

    /// <summary>
    /// Converte de Image para byte array
    /// </summary>
    /// <param name="imageIn">Image</param>
    /// <returns>byte array</returns>
    public byte[] imageToByteArray(System.Drawing.Image imageIn)
    {
        MemoryStream ms = new MemoryStream();
        imageIn.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
        return ms.ToArray();
    }

    /// <summary>
    /// Converte de byte array para Image
    /// </summary>
    /// <param name="byteArrayIn">Imagem byte array</param>
    /// <returns>Image</returns>
    public Image byteArrayToImage(byte[] byteArrayIn)
    {
        MemoryStream ms = new MemoryStream(byteArrayIn);
        Image returnImage = Image.FromStream(ms);
        return returnImage;
    }

    /// <summary>
    /// Compara dois image
    /// </summary>
    /// <param name="Imagem1">Image</param>
    /// <param name="Imagem2">Image</param>
    /// <returns>Boolean (true) se as imagens forem iguais e (false) se as imagens forem diferentes</returns>
    public Boolean ComparaImagem(System.Drawing.Image Imagem1, System.Drawing.Image Imagem2)
    {
        if (imageToByteArray(Imagem1) == imageToByteArray(Imagem2))
        {
            return true;
        }

        return false;
    }

    /// <summary>
    /// Compara dois image convertidos em byte array 
    /// </summary>
    /// <param name="Imagem1">byte array de uma imagem</param>
    /// <param name="Imagem2">byte array de uma imagem</param>
    /// <returns>Boolean (true) se as imagens forem iguais e (false) se as imagens forem diferentes</returns>
    public Boolean ComparaImagem(byte[] Imagem1, byte[] Imagem2)
    { 
        if (Imagem1==Imagem2)
        { 
            return true;
        }

        return false;
    }
}


Comentários

Lucas Iori em 21/07/2017 22:28:48
 

Ola cara , tudo bem? estou com o seguinte problema se puder me ajudar agradeço. Estou salvando uma foto no banco de dados no tipo byte[] , porém quando trago ela de la para fazer o inverso não estou conseguindo converter de string para byte , poderia me ajudar por favor? Sou novo na programação obrigado.


Antonio Azevedo (Administrador) em 17/10/2017 22:43:37
 

O procedimento é converter para byte salvar no banco e depois converter para imagem novamente e não pra texto.