# VBForums CodeBank > CodeBank - Visual Basic .NET >  save JPEG images with any quality

## MrPolite

(C# version of this article is here )

Here's the code! Too many people ask for this
Using this code you can save an image (System.Drawing.Image) item as a jpeg image, specifying the quality of it. Jpeg quality is the same as compression so the lower the quality, the smaller the file size. It's simple to use, ie just do this:

VB Code:
Dim myImage As Image = ' ... load the image somehow 
' Save the image with a quality of 50% 
SaveJpeg(destImagePath, myImage, 50)


VB Code:
' Please do not remove :) 
    ' Written by Kourosh Derakshan 
    ' 
     'add this!
    Imports System.Drawing.Imaging
      ' Saves an image as a jpeg image, with the given quality 
    ' Gets:
    '   path    - Path to which the image would be saved.
    '   quality - An integer from 0 to 100, with 100 being the 
    '             highest quality
    Public Shared Sub SaveJpeg(ByVal path As String, ByVal img As Image, ByVal quality As Long)
        If ((quality < 0) OrElse (quality > 100)) Then
            Throw New ArgumentOutOfRangeException("quality must be between 0 and 100.")
        End If
         ' Encoder parameter for image quality
        Dim qualityParam As New EncoderParameter(Encoder.Quality, quality)
        ' Jpeg image codec 
        Dim jpegCodec As ImageCodecInfo = GetEncoderInfo("image/jpeg")
         Dim encoderParams As New EncoderParameters(1)
        encoderParams.Param(0) = qualityParam
        img.Save(path, jpegCodec, encoderParams)
    End Sub
       ' Returns the image codec with the given mime type 
    Private Shared Function GetEncoderInfo(ByVal mimeType As String) As ImageCodecInfo
        ' Get image codecs for all image formats 
        Dim codecs As ImageCodecInfo() = ImageCodecInfo.GetImageEncoders()
         ' Find the correct image codec 
        For i As Integer = 0 To codecs.Length - 1
            If (codecs(i).MimeType = mimeType) Then
                Return codecs(i)
            End If
        Next i
         Return Nothing
    End Function

----------


## jareck

hm... i have a problem with these lines in vb.net 2008
ublic Shared Sub SaveJpeg(ByVal path As String, ByVal img As Image, ByVal quality As Long)
Private Shared Function GetEncoderInfo(ByVal mimeType As String) As ImageCodecInfo
statement is not valid in a namespace

----------


## Ashraf Alshahawy

Hi MrPolite .... Good Topic

Hi Jarck , the code need a little bet modification to work fine with you 

I tested it and works fine for me , make a new project and clear any lines before you paste the code :

Imports System.Drawing.Imaging 'this statement must be at the topmost of any code inside a class.

Public Class Form1

    ' Please do not remove  :Smilie:  
    ' Written by Kourosh Derakshan 
    ' 

    'add this!



    ' Saves an image as a jpeg image, with the given quality 
    ' Gets:
    '   path   - Path to which the image would be saved.
    '   quality - An integer from 0 to 100, with 100 being the 
    '           highest quality
    Public Shared Sub SaveJpeg(ByVal path As String, ByVal img As Image, ByVal quality As Long)
        If ((quality < 0) OrElse (quality > 100)) Then
            Throw New ArgumentOutOfRangeException("quality must be between 0 and 100.")
        End If

        ' Encoder parameter for image quality
        Dim qualityParam As New EncoderParameter(Encoder.Quality, quality)
        ' Jpeg image codec 
        Dim jpegCodec As ImageCodecInfo = GetEncoderInfo("image/jpeg")

        Dim encoderParams As New EncoderParameters(1)
        encoderParams.Param(0) = qualityParam
        img.Save(path, jpegCodec, encoderParams)
    End Sub



    ' Returns the image codec with the given mime type 
    Private Shared Function GetEncoderInfo(ByVal mimeType As String) As ImageCodecInfo
        ' Get image codecs for all image formats 
        Dim codecs As ImageCodecInfo() = ImageCodecInfo.GetImageEncoders()

        ' Find the correct image codec 
        For i As Integer = 0 To codecs.Length - 1
            If (codecs(i).MimeType = mimeType) Then
                Return codecs(i)
            End If
        Next i

        Return Nothing
    End Function

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

'You can add this piece of code inside a Button_Click event or any event you like.

        Dim myImage As Image = Image.FromFile("E:\a7.jpg") 'Replace the "E:\a7.jpg" with path of your own image 

        ' Save the image with a quality of 50&#37; 
        SaveJpeg("C:\FFF.Jpg", myImage, 50) 'Replace the "C:\f7.jpg" with path where you want your image to be saved.

    End Sub
End Class


I hope that helped.

----------


## jareck

ooh god.... 
I know im noob...
sorry for my stupid question :Blush:

----------


## alissa914

> Hi MrPolite .... Good Topic
> 
> Hi Jarck , the code need a little bet modification to work fine with you 
> 
> I tested it and works fine for me , make a new project and clear any lines before you paste the code :
> I hope that helped.


Absolutely helped me.  I was debating converting images to grayscale and I was trying to avoid using DLLs that break between Windows versions (or have the potential to).  I take an image, dither it down to 8-bit grayscale, and then use this code to save it at 10% (since it's just a reverse side of the check).  The file size is 1/5 or less of what it would be otherwise.  Thank you for saving me a lot of headache.   :Smilie: 

Lauren

----------

