【发布时间】:2012-02-05 06:32:03
【问题描述】:
据我所知,jpeg 文件在其他图像扩展名之间具有最佳压缩比,如果我更正,我们不能再压缩 jpeg 文件,因为它具有最佳压缩率,所以请帮助我。我创建了一些 jpeg 如下:
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 库对其进行更多压缩)
有人知道吗?如果我们可以创建更好的 jpeg,请帮助我。
编辑:
这是我压缩 jpeg 的邮政编码:
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;
}
}
【问题讨论】:
-
使用您选择的 ZIP 实用程序压缩 JPEG,它的大小将与原始 JPEG 大致相同(如果不大于)。 JPEG 文件已经被压缩(虽然没有使用 ZIP 压缩)。通过压缩 JPEG,您的收益将是微乎其微的。
-
JPEG 图像已被压缩。再次压缩它们不会有任何收获。
-
@CodyGray 那么我该如何压缩它们呢?如何创建无法压缩更多的 jpeg?
-
它们已经被压缩了。你不需要压缩它们。如果您想要压缩程度更高的 JPEG,请在您用于保存 JPEG 的库中调高压缩级别设置。
-
@Saeid - 请记住,JPEG 是有损的,这意味着压缩得越多,结果的质量就越低。
标签: c# image compression zip jpeg