Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Save JPG in progressive format

<Extension()> _
Public Sub Save(ByVal b As Bitmap, ByVal FileName As String, ByVal Compression As Long, ByVal MimeType As String)
    Dim Params As EncoderParameters = New EncoderParameters(2)
    Dim CodecInfo As ImageCodecInfo = GetEncoderInfo(MimeType)

    Params.Param(0) = New EncoderParameter(Encoder.RenderMethod, EncoderValue.RenderProgressive)
    Params.Param(1) = New EncoderParameter(Encoder.Quality, Compression)

    b.Save(FileName, CodecInfo, Params)
End Sub

this does not work. Its not saved as progressive. How can i do this, and maybe also specify the nr of passes.??

like image 961
Tomasi Avatar asked Feb 15 '10 17:02

Tomasi


People also ask

Should I save JPEG as progressive or optimized?

The main difference is that when the picture (jpeg file) is export as "progressive" is going to load the full size image with reduced quality, while if it's export as "optimize" is going to load section by section from top to bottom.

What are progressive JPEG?

A progressive JPEG image is encoded differently than a standard or baseline JPEG image. It loads in successive waves until a clear picture is formed. This can improve a website's performance as the images seems to be loading faster.

Is baseline or progressive better?

Progressive will appear faster, because it can download a preview of the image in their placeholders as the page is downloading the content from the network. Baseline will appear slower because the users will see the image render from the top first and then making its way to the bottom.

How do I make progressive photos?

Save for web option in Adobe Photoshop. Choose JPEG from the optimization format menu. Select compression level by choosing a quality option (low, medium, or high); I will recommend to keep it high for a more detailed preserved optimized image. Select Progressive to display the image progressively in a web browser.


1 Answers

As far as I can tell, it's not supported. I have tried code suggested here and here and arrived at this C# code:

using (Image source = Image.FromFile(@"D:\temp\test2.jpg")) {

  ImageCodecInfo codec = ImageCodecInfo.GetImageEncoders().First(c => c.MimeType == "image/jpeg");

  EncoderParameters parameters = new EncoderParameters(3);
  parameters.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 100L);
  parameters.Param[1] = new EncoderParameter(System.Drawing.Imaging.Encoder.ScanMethod, (int)EncoderValue.ScanMethodInterlaced);
  parameters.Param[2] = new EncoderParameter(System.Drawing.Imaging.Encoder.RenderMethod, (int)EncoderValue.RenderProgressive);

  source.Save(@"D:\temp\saved.jpg", codec, parameters);
}

Setting both interlaced and progressive mode, it still saves a regular baseline JPEG. I have tried any combination of either setting and their alternative settings (non-interlaced and non-progressive), and haven't seen any difference at all in the resulting image file.

I haven't found any response from anyone saying that they have actually managed to save a progressive JPEG in .NET.

Both the ScanMethodInterlaced and RenderProgressive parameter values are described only as "Not used in GDI+ version 1.0." in the documentation.

like image 136
Guffa Avatar answered Oct 07 '22 08:10

Guffa