jueves, 5 de abril de 2012

Función que recibe una imagen y modifica las propiedades, escala de grises, resolución, calidad, etc y retorna como un arreglo de Bytes

Es común que al momento de trabajar con imágenes necesitemos realizar un ajuste de calidad, la resolución o escala de grises, respecto a este problema aqui tenemos una funcion que diseñe algunos años con varios bloques comentados segun la necesidad de cada quien, en su momento utilice cada uno de estos bloques y los fui comentando solamente :P


    Public Shared Function BmpToBytes_MemStream(ByVal img As Image) As Byte()
        'Esta configuracion reduce el tamaño en mas de un 70% del PDF
        '----------------------------------------------------------------------
        'Dim imagen As New Bitmap(782, 1070, System.Drawing.Imaging.PixelFormat.Format32bppPArgb)
        'Dim new_g As Graphics = Graphics.FromImage(imagen)

        'new_g.PixelOffsetMode = Drawing2D.PixelOffsetMode.Default

        'new_g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBilinear
        'new_g.SmoothingMode = Drawing2D.SmoothingMode.AntiAlias

        'MOD:2 Esta confiracion mejorara la calidad y aumentará el tamaño del los archivos PDF, 
        'reduce el tamaño en un 60%
        '-----------------------------------------------------------------------
        'Dim imagen As New Bitmap(782, 1070, System.Drawing.Imaging.PixelFormat.Format32bppPArgb)
        'Dim new_g As Graphics = Graphics.FromImage(imagen)

        'new_g.PixelOffsetMode = Drawing2D.PixelOffsetMode.Default

        'new_g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High
        'new_g.SmoothingMode = Drawing2D.SmoothingMode.HighQuality


        'MOD:3 Esta confiracion mejorara la calidad y aumentará el tamaño del los archivos PDF, 
        'reduce el tamaño en un 55%
        '-------------------------------------------------------------
        'Dim imagen As New Bitmap(782, 1070, System.Drawing.Imaging.PixelFormat.Format32bppPArgb)
        'Dim new_g As Graphics = Graphics.FromImage(imagen)

        'new_g.PixelOffsetMode = Drawing2D.PixelOffsetMode.Half

        'new_g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High
        'new_g.SmoothingMode = Drawing2D.SmoothingMode.HighQuality

        'MOD:4 Esta confiracion mejorara la calidad y aumentará el tamaño del los archivos PDF, 
        'reduce el tamaño en un 55%
        '--------------------------------------------------------------------
        'Dim imagen As New Bitmap(782, 1070, System.Drawing.Imaging.PixelFormat.Format32bppPArgb)
        'Dim new_g As Graphics = Graphics.FromImage(imagen)

        'new_g.PixelOffsetMode = Drawing2D.PixelOffsetMode.HighQuality

        'new_g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High
        'new_g.SmoothingMode = Drawing2D.SmoothingMode.HighQuality

        'MOD:5 Esta confiracion mejorara la calidad y aumentará el tamaño del los archivos PDF, 
        'reduce el tamaño en un ?%
        '-------------------------------------------------------------------
        'Dim imagen As New Bitmap(782, 1070, System.Drawing.Imaging.PixelFormat.Format64bppPArgb)
        'Dim new_g As Graphics = Graphics.FromImage(imagen)

        'new_g.PixelOffsetMode = Drawing2D.PixelOffsetMode.HighQuality

        'new_g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High
        'new_g.SmoothingMode = Drawing2D.SmoothingMode.HighQuality


        'MOD:6 Esta confiracion mejorara la calidad y aumentará el tamaño del los archivos PDF, 
        'reduce el tamaño en un ?%
        '---------------------------------------------------------------------------------------
        'Dim imagen As New Bitmap(950, 1300, System.Drawing.Imaging.PixelFormat.Format64bppPArgb)
        'Dim new_g As Graphics = Graphics.FromImage(imagen)

        'new_g.PixelOffsetMode = Drawing2D.PixelOffsetMode.HighQuality

        'new_g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High
        'new_g.SmoothingMode = Drawing2D.SmoothingMode.HighQuality

        'MOD:7 Esta confiracion mejorara la calidad y aumentará el tamaño del los archivos PDF, 
        'reduce el tamaño en un ?%
        '---------------------------------------------------------------
        'ESTA ES LA IDEAL
        Dim imagen As New Bitmap(1024, 1402, System.Drawing.Imaging.PixelFormat.Format64bppPArgb)
        Dim new_g As Graphics = Graphics.FromImage(imagen)

        new_g.PixelOffsetMode = Drawing2D.PixelOffsetMode.HighQuality

        new_g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBilinear
        new_g.SmoothingMode = Drawing2D.SmoothingMode.HighQuality

        'MOD:8 Esta confiracion mejorara la calidad y aumentará el tamaño del los archivos PDF, 
        'reduce el tamaño en un ?%
        '----------------------------------------------------------
        'Dim imagen As New Bitmap(1600, 2190, System.Drawing.Imaging.PixelFormat.Format64bppPArgb)
        'Dim new_g As Graphics = Graphics.FromImage(imagen)

        'new_g.PixelOffsetMode = Drawing2D.PixelOffsetMode.HighQuality

        'new_g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBilinear
        'new_g.SmoothingMode = Drawing2D.SmoothingMode.HighQuality

        new_g.DrawImage(img, 0, 0, imagen.Width, imagen.Height)
        img = imagen

        Dim sTemp1 As String

        sTemp1 = System.IO.Path.GetTempFileName()
        System.IO.File.Delete(Path.GetTempFileName())

        Dim fs As New FileStream(sTemp1, FileMode.OpenOrCreate)

        img.Save(fs, System.Drawing.Imaging.ImageFormat.Jpeg)

        fs.Position = 0

        Dim imgLength As Integer = CInt(fs.Length)
        Dim bytes(0 To imgLength - 1) As Byte
        fs.Read(bytes, 0, imgLength)

        fs.Close()
        'Eliminar el archivo temporal para no saturar el disco duro
        System.IO.File.Delete(Path.GetTempFileName())
        Return bytes
    End Function

No hay comentarios:

Publicar un comentario