cjpg压缩算法
BufferedImageimage=newBufferedImage(w,h,BufferedImage.TYPE_INT_RGB);
image.getGraphics().drawImage(img,0,0,w,h,null);//绘制缩小后的图
FiledestFile=newFile("C:\tmp1.jpg");
FileOutputStreamout=newFileOutputStream("C:\tmp2.jpg");//输出到文件流
JPEGImageEncoderencoder=JPEGCodec.createJPEGEncoder(out);
encoder.encode(image);
out.close();
B. C语言实现把一个JPG图片分解为两个图片,急!!谢谢
麻烦。。无聊。。
先找着jpg文件头格式。。
C打开文件。。找到数据部分。。
新建文件。。写入。。保存。。
综上所述:无聊+麻烦。
C. jpg压缩成85%和100%有什么差别吗
你可以看看下面的压缩原理
你的诺基亚是在量化和编码的时候实现压缩的,前二个步骤在你的手机上是不变的。唯一也就是存的时候小一些,像素会有缺失。80%压缩率,人眼是不太容易看出来的.但是如果你想打印的话,大到一定的程序时还是需要不压缩才行的,比如你洗20寸的大尺寸像片。
以下是JPG压缩原理
JPEG压缩分四个步骤实现:
1.颜色模式转换及采样;
2.DCT变换;
3.量化;
4.编码。
二.
1.颜色模式转换及采样 RGB色彩系统是我们最常用的表示颜色的方式。JPEG采用的是YCbCr色彩系统。想要用JPEG基本压缩法处理全彩色图像,得先把RGB颜色模式图像数据,转换为YCbCr颜色模式的数据。Y代表亮度,Cb和Cr则代表色度、饱和度。通过下列计算公式可完成数据转换。 Y=0.2990R+0.5870G+0.1140B Cb=-0.1687R-0.3313G+0.5000B+128 Cr=0.5000R-0.4187G-0.0813B+128 人类的眼晴对低频的数据比对高频的数据具有更高的敏感度,事实上,人类的眼睛对亮度的改变也比对色彩的改变要敏感得多,也就是说Y成份的数据是比较重要的。既然Cb成份和Cr成份的数据比较相对不重要,就可以只取部分数据来处理。以增加压缩的比例。JPEG通常有两种采样方式:YUV411和YUV422,它们所代表的意义是Y、Cb和Cr三个成份的数据取样比例。
2.DCT变换 DCT变换的全称是离散余弦变换(Discrete Cosine Transform),是指将一组光强数据转换成频率数据,以便得知强度变化的情形。若对高频的数据做些修饰,再转回原来形式的数据时,显然与原始数据有些差异,但是人类的眼睛却是不容易辨认出来。 压缩时,将原始图像数据分成8*8数据单元矩阵,例如亮度值的第一个矩阵内容如下:
JPEG将整个亮度矩阵与色度Cb矩阵,饱和度Cr矩阵,视为一个基本单元称作MCU。每个MCU所包含的矩阵数量不得超过10个。例如,行和列采样的比例皆为4:2:2,则每个MCU将包含四个亮度矩阵,一个色度矩阵及一个饱和度矩阵。 当图像数据分成一个8*8矩阵后,还必须将每个数值减去128,然后一一代入DCT变换公式中,即可达到DCT变换的目的。图像数据值必须减去128,是因为DCT转换公式所接受的数字范围是在-128到+127之间。 DCT变换公式:
x,y代表图像数据矩阵内某个数值的坐标位置f(x,y)代表图像数据矩阵内的数个数值u,v代表DCT变换后矩阵内某个数值的坐标位置F(u,v)代表DCT变换后矩阵内的某个数值 u=0 且 v=0 c(u)c(v)=1/1.414 u>0 或 v>0 c(u)c(v)=1 经过DCT变换后的矩阵数据自然数为频率系数,这些系数以F(0,0)的值最大,称为DC,其余的63个频率系数则多半是一些接近于0的正负浮点数,一概称之为AC。
3、量化 图像数据转换为频率系数后,还得接受一项量化程序,才能进入编码阶段。量化阶段需要两个8*8矩阵数据,一个是专门处理亮度的频率系数,另一个则是针对色度的频率系数,将频率系数除以量化矩阵的值,取得与商数最近的整数,即完成量化。 当频率系数经过量化后,将频率系数由浮点数转变为整数,这才便于执行最后的编码。不过,经过量化阶段后,所有数据只保留整数近似值,也就再度损失了一些数据内容,JPEG提供的量化表如下:
4、编码 Huffman编码无专利权问题,成为JPEG最常用的编码方式,Huffman编码通常是以完整的MCU来进行的。 编码时,每个矩阵数据的DC值与63个AC值,将分别使用不同的Huffman编码表,而亮度与色度也需要不同的Huffman编码表,所以一共需要四个编码表,才能顺利地完成JPEG编码工作。 DC编码 DC是彩采用差值脉冲编码调制的差值编码法,也就是在同一个图像分量中取得每个DC值与前一个DC值的差值来编码。DC采用差值脉冲编码的主要原因是由于在连续色调的图像中,其差值多半比原值小,对差值进行编码所需的位数,会比对原值进行编码所需的位数少许多。例如差值为5,它的二进制表示值为101,如果差值为-5,则先改为正整数5,再将其二进制转换成1的补数即可。所谓1的补数,就是将每个Bit若值为0,便改成1;Bit为1,则变成0。差值5应保留的位数为3,下表即列出差值所应保留的Bit数与差值内容的对照。
在差值前端另外加入一些差值的霍夫曼码值,例如亮度差值为5(101)的位数为3,则霍夫曼码值应该是100,两者连接在一起即为100101。下列两份表格分别是亮度和色度DC差值的编码表。根据这两份表格内容,即可为DC差值加上霍夫曼码值,完成DC的编码工作。
AC编码 AC编码方式与DC略有不同,在AC编码之前,首先得将63个AC值按Zig-zag排序,即按照下图箭头所指示的顺序串联起来。
63个AC值排列好的,将AC系数转换成中间符号,中间符号表示为RRRR/SSSS,RRRR是指第非零的AC之前,其值为0的AC个数,SSSS是指AC值所需的位数,AC系数的范围与SSSS的对应关系与DC差值Bits数与差值内容对照表相似。 如果连续为0的AC个数大于15,则用15/0来表示连续的16个0,15/0称为ZRL(Zero Rum Length),而(0/0)称为EOB(Enel of Block)用来表示其后所剩余的AC系数皆等于0,以中间符号值作为索引值,从相应的AC编码表中找出适当的霍夫曼码值,再与AC值相连即可。 例如某一组亮度的中间符为5/3,AC值为4,首先以5/3为索引值,从亮度AC的Huffman编码表中找到1111111110011110霍夫曼码值,于是加上原来100(4)即是用来取[5,4]的Huffman编码1111111110011110100,[5,4]表示AC值为4的前面有5个零。 由于亮度AC,色度AC霍夫曼编码表比较长,在此省略去,有兴趣者可参阅相关书籍。 实现上述四个步骤,即完成一幅图像的JPEG压缩。 参考资料[1] 林福宗 《图像文件格式(上)——Windows 编程》,清华大学出版社, 1996年[2] 李振辉、李仁各编着,《探索图像文件的奥秘》,清华大学出版社,1996年[3] 黎洪松、成实译《JPEG静止数据压缩标准》,学苑出版社,1996年
D. mfc如何将bitmap压缩成jpg
两个选择:
使用算法代码。算法代码还是比较复杂的,完全自己去研究jpg压缩算法很困难,网络搜“C++压缩算法JPG”,有示例代码可以使用。
用GDI+。这个比较简单,不过也不是两句话说的明白的,研究一下CImage类的使用,这个网上例子也很多。
E. 图片文件怎样压缩到20K以内
想要将JPG格式照片压缩至20KB,最主要的问题是图片尺寸大小。分享一款小编经常使用的压缩软件,小伙伴们可以放心下载哈~→点击下载正版无损压缩软件(请在电脑端下载软件)
简介:这是一款集视频压缩、图片压缩、PDF压缩、PPT压缩以及Word文档压缩于一体的多功能压缩软件,软件无广告、无捆绑软件,占用内存小~
推荐理由:
1、BMP、PNG、JPG等市面上主流的图片格式均支持,包括GIF动图也能够轻松压缩完成;
2、压缩质量与压缩比可根据个人需求自定义调节,均衡质量与大小,保证图片清晰度情况下压缩大小;
3、软件升级最新算法,搭建强劲内核,压缩效率更快速,即便是小白用户也不用担心有学习压力;
4、售前售后客服态度好,有任何问题都可以联系客服得到有效的帮助及解决;
将图片压缩到20K以下的具体操作步骤:
第一步:点击上方链接下载并安装嗨格式压缩大师,找到主界面中的“图片压缩”,点击“图片压缩”进入到操作页面;
第二步:进入图片压缩界面后,将需要压缩的图片拖拽进去就可以压缩了,如果是多个图片,可以直接一并添加(这款软件支持批量压缩哦~)
第三步:图片添加完成后,如果你对图片有不同压缩需求,可以在软件页面右侧进行图片压缩的各项参数设置;嗨格式压缩大师支持手动调节图片参数,包括按比特率、文件大小等设置,数值越小压缩后的文件就越小。
以上就是完整的操作步骤了,只需要三步就可以解决,即便是电脑小白也可以快速解决,只需要下载嗨格式压缩大师就可以了,如果遇到了什么问题也可以联系客服快速解决~
F. c++如何打开jpg图像
你的问题的主要困难在于解压缩。 .tiff格式与.bmp相似,通常都没有压缩或者只有简单的RLE压缩。但.jpg与此不同,它通常采用四道压缩工序,压缩算法很复杂,里面涉及很多数学(从jpeg的英文名字“联合图像专家组”就可以感受到),所以解压缩的过程是很繁琐的。另外windows内建对jpeg格式的支持,因此通常没有人会自己写这些解压缩算法,又费力又容易出错,效率还不如微软的算法。用Windows SDK中的IPicture可以读取jpeg文件并直接得到图像的RGB值,你需要去MSDN查一下相关的文件。 如果你对自己的数学基础有信心,而且一定想要知道jpeg的压缩/解压缩原理,那么下面这篇水母的文章可能对你有用(反正我看了几句就看不懂了): 水木社区(展开完整界面) → 数字多媒体应用 → 精华区文章阅读 DigiMedia 版 (精华区) 6.3 JPEG格式 6.3.1 简介 微处理机中的存放顺序有正序(big endian)和逆序(little endian)之分。正序存放就是 高字节存放在前低字节在后,而逆序存放就是低字节在前高字节在后。例如,十六进制 数为A02B,正序存放就是A02B,逆序存放就是2BA0。摩托罗拉(Motorola)公司的微处理 器使用正序存放,而英特尔(Intel)公司的微处理器使用逆序。JPEG文件中的字节是按照 正序排列的。 ---------------------------------------------------------------------------- ---- JPEG委员会在制定JPEG标准时,定义了许多标记(marker)用来区分和识别图像数据及其 相关信息,但笔者没有找到JPEG委员会对JPEG文件交换格式的明确定义。直到1998年12 月从分析网上具体的JPG图像来看,使用比较广泛的还是JPEG文件交换格式(JPEG File Interchange Format,JFIF)版本号为1.02。这是1992年9月由在C-Cube Microsystems公 司工作的Eric Hamilton提出的。此外还有TIFF JPEG等格式,但由于这种格式比较复杂 ,因此大多数应用程序都支持JFIF文件交换格式。 JPEG文件使用的颜色空间是CCIR 601推荐标准进行的彩色空间(参看第7章)。在这个彩色 空间中,每个分量、每个像素的电平规定为255级,用8位代码表示。从RGB转换成YCbCr 空间时,使用下面的精确的转换关系: Y = 256 * E'y Cb = 256 * [E'Cb] + 128 Cr = 256 * [E'Cr] + 128 其中亮度电平E'y和色差电平E'Cb和E'Cb分别是CCIR 601定义的参数。由于E'y的范围是 0~1,E'Cb和E'Cb的范围是-0.5~+0.5,因此Y, Cb和Cr的最大值必须要箝到255。于是 RGB和YCbCr之间的转换关系需要按照下面的方法计算。 (1) 从RGB转换成YCbCr YCbCr(256级)分量可直接从用8位表示的RGB分量计算得到: Y = 0.299 R + 0.587 G + 0.114 B Cb = - 0.1687R - 0.3313G + 0.5 B + 128 Cr = 0.5 R - 0.4187G - 0.0813 B + 128 需要注意的是不是所有图像文件格式都按照R0,G0,B0,…… Rn,Gn,Bn的次序存储样 本数据,因此在RGB文件转换成JFIF文件时需要首先验证RGB的次序。 (2) 从YCbCr转换成RGB RGB分量可直接从YCbCr(256级)分量计算得到: R = Y + 1.402 (Cr-128) G = Y - 0.34414 (Cb-128) - 0.71414 (Cr-128) B = Y + 1.772 (Cb-128) 在JFIF文件格式中,图像样本的存放顺序是从左到右和从上到下。这就是说JFIF文件中 的第一个图像样本是图像左上角的样本。 6.3.2 文件结构 JFIF文件格式直接使用JPE
G. 压缩的算法都有哪些
只有最常见的zip的,估计你都要研究上n久了。。。
文本文件一般有zip,rar,
网页文件有htz
视频文件有rm,avi
语音文件有mp3,
图片文件有png,gif,jpg
这些都是文件压缩的。。。。
------------------------------------
ZIP文件的总体格式
分文件头信息+文件压缩数据
中心目录+中心目录记录结束符
1.分文件头信息:
字节数 描述
4 分文件头信息标志(0x04034b50)
2 解压缩所需版本
2 通用比特标志位(置比特0位=加密;置比特1位=使用压
缩方式6,并使用8k变化目录,否则使用4k变化目录;置比特2位=使用压
缩方式6,并使用3个ShannonFano树对变化目录输出编码,否则使用2个
ShannonFano树对变化目录输出编码,其它比特位未用)
2 压缩方式(0=不压缩,1=缩小,2=以压缩因素1缩小,3=以
压缩因素2缩小,4=以压缩因素3缩小,5=以压缩因素4缩小,6=自展)
2 文件最后修改时间
2 文件最后修改日期
4 32位校验码
4 压缩文件大小
4 未压缩文件大小
2 文件名长
2 扩展段长
? 文件名(不定长)
? 扩展段(不定长)
2.中心目录结构
文件头信息...中心目录记录结束符
文件头:
字节数 描述
4 中心文件头信息标志(0x02014b50)
2 主机操作系统(高位字节表示主机操作系统,低位字
节表示ZIP压缩软件版本号,其值除以10表示主版本号,其值模10表示
次版本号。0=MS-DOS,OS/2 FAT文件系统,1=Ami ga,2=VMS,3=Unix及
变种,4=VM/CMS,5=AtariST,6=OS/2 HPFS,7=Macintosh,8=Z-System,9
=C P/M,10-255未用)
2 解压缩所需版本
2 通用比特标志
2 压缩方式
2 文件最后修改时间(用标准的MS-DOS时间日 期格式
编码)
2 文件最后修改日期
4 32位校验码(使用David Schwaderer的CRC-32算法产
生)
4 压缩文件大小
4 未压缩文件大小
2 文件名长
2 扩展段长
2 文件注释长(分别为文件名长,扩展段,注释 段,小于
64K)
2 磁盘起始号(本文件在磁盘中的起始号)
2 内部文件属性(最低位若置1,表示为ASC文本,否则为
二进制数据,其它位未用)
4 外部文件属性(依赖于主机操作系统)
4 分文件头相对位移
? 文件名(不定长)
? 扩展段(不定长,用于未来扩展,低版本为0长)
? 文件注释(不定长)
3.中心目录记录结束符
字节数 描述
4 中心目录标记结束符(0x06054b50)
2 磁盘号(其中包括中心目录结束记录)
2 磁盘中心目录起始号
2 磁盘中心目录入口总数
2 中心目录入口总数(ZIP文件中的文件总数)
2 整个中心目录大小
4 关于起始磁盘号的中心目录初始偏移
2 ZIP文件注释长度
? ZIP文件注释(不定长)
加密方法
PKZIP中使用的加密方法由Roger Schlafly提供。ZIP文件在解压
缩前必须先解密。每个加密文件具有一个12字节的加密文件头扩展信
息,存储于数据区的起始位置,加密前先设置一个起始值,然后被三个3
2位的密钥加密。密钥被使用者提供的口令初始化。12个字节加密之
后,由PKZIP的伪随机数产生方法,结合PKZIP中使用CRC-32算法对密钥
进行更新。
具体实施分为三步:
1.用口令对三个32位密钥初始化。
K(0)=305419896,K(1)=591751049,K(2)=878082192
循环 for i=0 to length(password)-1
调用更新密钥函数 update_keys(password(i))
结束循环(循环口令长度次)
其中更新密钥函数为:
update_keys(char):
Key(0)=crc32(key(0),char)
Key(1)=Key(1)+(Key(0)& 000000ffH)
Key(1)=Key(1)*134775813+1
Key(2)=crc32(Key(2),Key(1)〉〉24)
end update_keys
CRC32函数中,给定一个4字节的CRC值和一个字符,返回一个由CRC
-32算法更新的CRC。具体为:
crc32(c,b)=crc32tab[(c^b)&0xff]^(c>>8),crc32tab[256]的值
为固定的256个4字节数。
2.读取并加密12字节的加密头,再次对密钥进行初始化。
将12个字节的加密头读入缓冲区buffer(0)至buffer(11),循环fo
r i=0 to 11
C=buffer(i)^decrypt_byte()
update_keys(C)
buffer(i)=C
结束循环(循环12次)
其中的decrypt_byte()函数为:
unsigned char decrypt_byte()
local unsigned short temp
temp=Key(2)¦2
decrypt_byte=((temp*(temp^1))>>8)&0xff
end decrypt_byte
该步结束后,缓冲区中最后的二个字节buffer(10)和buffer(11)
将成为加密文件校验码的二个最高位(按低至高顺序存放)。对ZIP加
密文件进行解压缩前,PKUNZIP软件将使用者提供的口令按上述二个步
骤进行处理,得到的结果与校验码的二个高位字节进行比较,只有当提
供了正确的口令时,结果一致,才能进行后续的解压缩过程,否则,PKZI
P报告错误信息,程序自动结束。
3.读取压缩的数据流并以加密密钥对其进行加密。
压缩数据流按下述过程加密:
循环 直至数据流结束
C=数据流的一个字节
temp=C^decrypt_byte()
update_keys(temp)
输出temp
结束循环
H. 如何查看jpg的压缩率
一样,用photoshop打开你要查看的图片,点“文件”->“存储为”,点“保存”,接下来的JPEG选项中显示的品质就是该文件当前的压缩等级,然后点“取消”即可
注意:需要时调小品质可减少图片体积,同时降低图像质量,但不宜在此将其调大,因为这样做只会增加图片体积而并不会改善图像质量,不划算
I. 关于照片缩放问题
一种办法:Adobe Illustrator CS4 可以把照片矢量化, http://58.251.57.206/down?cid= 你下载这个安装就行,很简单。 实用方法,把照片拖到软件里面,选中照片,在上面的属性栏中,有个【实时临摹】的按钮,点击旁边的小三角,就出来下拉列表,可以根据自己的需要选择相应的转换类型。我也给你截图了。转换完之后,再点击属性栏中的有个【扩展】按钮,你点击一下,就能进行编辑,然后导出。转成矢量的就可以无限放大。 我也不知道你是想转个什么图片,简单的这样转还可以,复杂的图就转换质量差一点。第二种办法:用 图片无损放大 BenVista PhotoZoom Pro 3.0.2 中文绿色版 下载地址:http://www.xp510.com/soft/5/125/12941.html 能比单纯用PS放大的效果好很多,一学就会的软件。 我不知道你放大那么大干什么,假如打印的话,没这样大的打印机吧,一般是喷绘和写真吧,这样你可以把像素调低一点,尺寸相应还能大。最高72像素,喷绘40多像素就可以。