JPG再压缩

xyh2007 2008-10-08 08:56:15
请问如何对JPG再次压缩,最好是无损而且压缩比率较高!比如1K图片压缩后只有几百字节.
...全文
329 点赞 收藏 13
写回复
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
xyh2012 2008-10-08
谢谢大家,继续讨论,看有没有什么好的方法实现无损压缩!
回复
jingtan 2008-10-08
理论上数据压缩是有限度的...
回复
VsirSoft 2008-10-08
下面这个例子是将图片拉伸的代码,但是跟你的没有关系 你只需要把图片载入改下质量就好,质量由0~100 越低越差 我在红色部分给你表明了,时间原因 你就自己改改吧 我就不多弄了





代码如下:(将图象变为200*200)

GdiplusStartupInput gdiplusStartupInput;
ULONG_PTR gdiplusToken;
GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);

CLSID encoderClsid;
EncoderParameters encoderParameters;
ULONG quality;
Status stat;
Image image(L"1.jpg");
Bitmap bitmap(200, 200, PixelFormat32bppARGB);
Graphics graph(&bitmap);
graph.DrawImage(&image, Rect(0,0,200,200));
GetEncoderClsid(L"image/jpeg", &encoderClsid);
//构造编码参数列表
//数组中只包含一个EncoderParameter对象
encoderParameters.Count = 1;
encoderParameters.Parameter[0].Guid = EncoderQuality;
//参数类型为LONG
encoderParameters.Parameter[0].Type = EncoderParameterValueTypeLong;
//只设置一个参数
encoderParameters.Parameter[0].NumberOfValues = 1;


//设置JPEG图片质量为最好
quality = 100;

encoderParameters.Parameter[0].Value = &quality;
stat = bitmap.Save(L"1_2.jpg", &encoderClsid, &encoderParameters);
GdiplusShutdown(gdiplusToken);


回复
Erorr 2008-10-08
没有可能,因为已经进行了哈夫曼编码,那个已经是最优的了,再进行其它编码说不定越压越大呢
JPEG2000主要是EBCOT算法,小波变换和算术编码,从数据变换的时候就超过了JPEG,算术编码也比哈夫曼编码少用一个码表
回复
blueink_200451 2008-10-08
那东西已经被压得不能再压了,再怎讨论也有用啊,无损压缩必须要求足够的信息来还原数据,所以不管什么算法都有一个限度啊
回复
xyh2007 2008-10-08
UP
回复
wsjtianyu 2008-10-08
可以用JPEG2000试试,比JPEG效果好。用的是小波。
回复
xyh2012 2008-10-08
可是我今天下载了个软件,的确能实现无损压缩,不知道他用的什么方法?
回复
xyh2007 2008-10-08
可以有损压缩,但效果不能太差,不知有没有什么好的办法?
回复
VsirSoft 2008-10-08
如果是无损的 我想应该不能再压了. jpg的编码已经很效率了.
回复
好像不好办,rar压jpg都只能压下去一点。
回复
wltg2001 2008-10-08
本来就已经是压缩的了,根本不可能再达到高压缩率
回复
wltg2001 2008-10-08
谢谢大家,继续讨论,看有没有什么好的方法实现无损压缩!
==================
那东西已经被压得不能再压了,再怎讨论也有用啊,无损压缩必须要求足够的信息来还原数据,所以不管什么算法都有一个限度啊
回复
发动态
发帖子
图形处理/算法
创建于2007-09-28

1.9w+

社区成员

VC/MFC 图形处理/算法
申请成为版主
社区公告
暂无公告