Как я знаю, файл jpeg имеет лучшую степень сжатия между другими расширениями изображений, и если я исправлю, мы не сможем больше сжимать файл jpeg, потому что он имеет лучшее сжатие, поэтому, пожалуйста, помогите мне в этом.Я создаю несколько jpegs следующим образом:
ImageCodecInfo[] codecs = ImageCodecInfo.GetImageEncoders();
ImageCodecInfo ici = null;
foreach(ImageCodecInfo codec in codecs) {
if(codec.MimeType == "image/jpeg")
ici = codec;
}
EncoderParameters ep = new EncoderParameters();
ep.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, _quality);
using(MemoryStream ms = new MemoryStream()) {
Bitmap capture = GetImage();
capture.Save(ms, ici, ep);
}
И я сжал их с помощью sharpziplib, в среднем каждый размер jpeg составляет 130 КБ, а после сжатия каждого файла, сжатого до 70 КБ, как это возможно?есть только 2 ответа, которые я могу себе представить.
1- Мы можем сжать файл JPEG с большей степенью сжатия с помощью библиотек zip
2 - Мой файл JPEG создан неправильно, и мы можем создать лучшие файлы JPEG(с большей степенью сжатия, поскольку мы не можем больше сжимать их с помощью zip-библиотек)
Кто-нибудь знает об этом?если мы сможем создать лучшие jpegs, пожалуйста, помогите мне в этом.
Редактировать:
это мой почтовый индекс для сжатия jpegs:
void addnewentry(MemoryStream stream, string pass,
string ZipFilePath, string entryname){
ICSharpCode.SharpZipLib.Zip.ZipFile zf = new ZipFile(ZipFilePath);
if(!String.IsNullOrEmpty(pass))
zf.Password = pass;
StaticDataSource sds = new StaticDataSource(Stream);
zf.BeginUpdate();
zf.Add(sds, entryName);
zf.CommitUpdate();
zf.IsStreamOwner = true;
zf.Close();
}
public class StaticDataSource : IStaticDataSource {
public Stream stream { get; set; }
public StaticDataSource() {
this.stream.Position = 0;
}
public StaticDataSource(Stream stream) {
this.stream = stream;
this.stream.Position = 0;
}
public Stream GetSource() {
this.stream.Position = 0;
return stream;
}
}