<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
这不起作用。它没有被保存为渐进式。我怎么能这样做,也可以指定通行证的次数。??
答案 0 :(得分:6)
据我所知,它不受支持。我尝试了建议here和here的代码,并得出了这个C#代码:
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);
}
设置隔行扫描和逐行扫描模式,它仍然保存常规基线JPEG。我尝试了任何设置和替代设置的组合(非隔行扫描和非渐进式设置),并且在生成的图像文件中没有看到任何差异。
我没有发现任何人说他们实际上已经设法在.NET中保存渐进式JPEG。
ScanMethodInterlaced
和RenderProgressive
参数值仅被描述为“未在GDI +版本1.0中使用”。在
the documentation。
答案 1 :(得分:4)
我想使用jpegtran文章中描述的Image Optimization, Part 4: Progressive JPEG…Hot or Not?实用程序:
jpegtran -copy none -progressive input.jpg output.jpg
此外,您可以通过以下方式优化哈夫曼表:
jpegtran -copy none -optimize input.jpg output.jpg