c# – 这是否可以压缩带有zip库的JPEG文件

据我所知,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大小为130KB,压缩后每个文件压缩到大约70KB,怎么可能?只有2个答案,我可以想象.

1-我们可以通过zip库以更高的压缩比压缩Jpeg文件

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;

    }

}

解决方法:

正如大多数人已经说过的那样,您无法轻松压缩这些已经压缩的文件.有些人在JPEG重新压缩方面努力工作(重新压缩=部分解码已经压缩的文件,然后使用自定义更强的模型和熵编码器压缩这些数据.重新压缩通常可以确保比特相同的结果).即使是那种先进的再压缩技术,我也只看到了最多25%的改进. PackJPG是他们中的一员.你可以看看其他压缩机here.正如你所知,即使*压缩机也无法达到25%(即使它非常复杂).

考虑到这些事实,ZIP(实际上是deflate)不能提高压缩程度(如果你将它与十大压缩机进行比较,这是一个非常古老和低效的方法).我相信这个问题有两个可能的原因:

>您不小心向JPEG流添加了一些额外的数据(可能在JPEG流之后添加).
> .NET将大量冗余数据输出到JFIF文件.也许一些大的EXIF数据等.

要解决此问题,您可以使用JFIF转储工具来观察JFIF容器中的内容.此外,您可能想要使用PackJPG尝试JPEG文件.

上一篇:linux – 在文本文件中重新排序行以获得更好的压缩比


下一篇:javascript – Closure编译器导出所有原型和静态方法