📄 jpgcompress.m
字号:
function JPGCompress(s)
%对制定图片进行jpeg压缩编码
A=imread('1.bmp');%A 256x256 65536 uint8 B 256x256 524288 double
fun=@DCT_Measure;
B=blkproc(A,[8,8],fun);%得到量化后的系数矩阵,与原始图像尺寸相同,需要进一步处理
%将B分成8×8矩阵重新排列,并对直流系数做差分
n=length(B)/8; %对每个维度分成的块数
%创建一个8×(8×n^2)的二维数组C存放待编码数据
C=zeros(8);%初始化为8×8的全0矩阵
for y=0:n-1
for x=0:n-1
T1=C(:,[end-7:end]);%取出上一组数据做差分,T1的所有8行和最后8列组成的8*8
T2=B(1+8*x:8+8*x,1+8*y:8+8*y);
T2(1)=T2(1)-T1(1);% 直流系数做差分
C=[C,T2];%将C和T2矩阵串联
end
end
C=C(:,[9:end]);%去除C的前8列,就是前面的全0
%把256*256的矩阵B转化为8*8192的矩阵C
%依次对每一块编码
JPGCode={''};%存储编码的元胞初始化为空的字符串
for a=0:n^2-1
T=Code_Huffman(C(:,[1+a*8:8+a*8]));
JPGCode=strcat(JPGCode,T);
end
%J=JPGCode;
sCode=cell2mat(JPGCode);%将元胞转化为数组
Fid=fopen('JPGCode.txt','w');%用变量fid标记I/O流,打开文本文件
fprintf(Fid,'%s',sCode);% 将压缩码sCode保存到文本文件中。添加而不是覆盖
fclose(Fid);%关闭I/O流
%计算压缩比和压缩效率
[x y]=size(A);
b=x*y*8/length(sCode);
v=8/b;
disp('JPEG压缩数据已保存至JPGCode.txt中!');
disp(['压缩比为:',num2str(b),';压缩效率:',num2str(v)]);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -