Сохранить JPG в прогрессивном формате - PullRequest
7 голосов
/ 15 февраля 2010
<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

это не работает. Это не сохраняется как прогрессивный. Как я могу это сделать, и, возможно, также указать номер пропуска .??

Ответы [ 2 ]

6 голосов
/ 15 февраля 2010

Насколько я могу судить, это не поддерживается. Я попробовал код, предложенный здесь и здесь и пришел к этому коду 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. Я пробовал любую комбинацию настроек и их альтернативных настроек (не чересстрочные и не прогрессивные), и не видел никакой разницы в результирующем файле изображения.

Я не нашел ни одного ответа, который бы сказал, что им действительно удалось сохранить прогрессивный JPEG в .NET.

Оба значения параметров ScanMethodInterlaced и RenderProgressive описаны только как «Не используется в GDI + версии 1.0». в документация .

4 голосов
/ 10 марта 2013

Я предполагаю использовать утилиту jpegtran , как описано в Оптимизация изображения, часть 4: Прогрессивный JPEG… Горячий или нет? статья:

jpegtran -copy none -progressive input.jpg output.jpg

Кроме того, вы можете оптимизировать таблицы Хаффмана следующим образом:

jpegtran -copy none -optimize input.jpg output.jpg
...