⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jpeg-033511052.htm

📁 实现JPEG压缩
💻 HTM
字号:
<html>
<head>
<script language="JavaScript">
function example()
{
      form1.text1[0].value=139
	   form1.text1[1].value=144
	    form1.text1[2].value=149
		form1.text1[3].value=153
		form1.text1[4].value=155
		form1.text1[5].value=155
		form1.text1[6].value=155
		form1.text1[7].value=155
		form1.text1[8].value=144
	   form1.text1[9].value=151
	    form1.text1[10].value=153
		form1.text1[11].value=156
		form1.text1[12].value=159
		form1.text1[13].value=156
		form1.text1[14].value=156
		form1.text1[15].value=156
		form1.text1[16].value=150
	   form1.text1[17].value=155
	    form1.text1[18].value=160
		form1.text1[19].value=163
		form1.text1[20].value=158
		form1.text1[21].value=156
		form1.text1[22].value=156
		form1.text1[23].value=156
		form1.text1[24].value=159
	   form1.text1[25].value=161
	    form1.text1[26].value=162
		form1.text1[27].value=160
		form1.text1[28].value=160
		form1.text1[29].value=159
		form1.text1[30].value=159
		form1.text1[31].value=159
		form1.text1[32].value=159
	   form1.text1[33].value=160
	    form1.text1[34].value=161
		form1.text1[35].value=162
		form1.text1[36].value=162
		form1.text1[37].value=155
		form1.text1[38].value=155
		form1.text1[39].value=155
		form1.text1[40].value=161
	   form1.text1[41].value=161
	    form1.text1[42].value=161
		form1.text1[43].value=161
		form1.text1[44].value=160
		form1.text1[45].value=157
		form1.text1[46].value=157
		form1.text1[47].value=157
		form1.text1[48].value=162
	   form1.text1[49].value=162
	    form1.text1[50].value=161
		form1.text1[51].value=163
		form1.text1[52].value=162
		form1.text1[53].value=157
		form1.text1[54].value=157
		form1.text1[55].value=157
		form1.text1[56].value=162
	   form1.text1[57].value=162
	    form1.text1[58].value=161
		form1.text1[59].value=161
		form1.text1[60].value=163
		form1.text1[61].value=158
		form1.text1[62].value=158
		form1.text1[63].value=158
	}
	var c=new Array(64)
	var ct=new Array(64)
	function FDCT()
	{
	    var temp=new Array(64)
		var i
		var j
		var temp1
		var k
		for(j=0;j<8;j++)
		{
		     c[j]=1.0/Math.sqrt(8);
			 ct[j*8]=c[j];
		}
		for(i=1;i<8;i++)
		{
		     for(j=0;j<8;j++)
			 {
			       c[i*8+j]=Math.sqrt(2.0/8)*Math.cos((2*j+1)*i*3.1415926/2/8)
				   ct[j*8+i]=c[i*8+j]
				}
		  }
		  for(i=0;i<8;i++)
		  {
		      for(j=0;j<8;j++)
			  {
			       temp[i*8+j]=0.0;
				   		for(k=0;k<8;k++)
						   {
						        if(form1.text1[i*8+k].value=='')
								{
								    alert("未给定源图像样本")
									return 
									}
									temp[i*8+j]+=(form1.text1[i*8+k].value-128)*ct[k*8+j]
							}
				}
		}
		for(i=0;i<8;i++)
		  {
		   for(j=0;j<8;j++)
		    {
		       temp1=0.0
			   for(k=0;k<8;k++)
			     {   temp1+=c[i*8+k]*temp[k*8+j]}
			  form1.text2[i*8+j].value=temp1
			  }
		}    	   							
}
function  give()
{
           form1.text3[0].value=16
	   form1.text3[1].value=11
	    form1.text3[2].value=10
		form1.text3[3].value=16
		form1.text3[4].value=24
		form1.text3[5].value=40
		form1.text3[6].value=51
		form1.text3[7].value=61
		form1.text3[8].value=12
	   form1.text3[9].value=12
	    form1.text3[10].value=14
		form1.text3[11].value=19
		form1.text3[12].value=26
		form1.text3[13].value=58
		form1.text3[14].value=60
		form1.text3[15].value=55
		form1.text3[16].value=14
	   form1.text3[17].value=13
	    form1.text3[18].value=16
		form1.text3[19].value=24
		form1.text3[20].value=40
		form1.text3[21].value=57
		form1.text3[22].value=69
		form1.text3[23].value=56
		form1.text3[24].value=14
	   form1.text3[25].value=17
	    form1.text3[26].value=22
		form1.text3[27].value=29
		form1.text3[28].value=51
		form1.text3[29].value=87
		form1.text3[30].value=80
		form1.text3[31].value=62
		form1.text3[32].value=18
	   form1.text3[33].value=22
	    form1.text3[34].value=37
		form1.text3[35].value=56
		form1.text3[36].value=68
		form1.text3[37].value=109
		form1.text3[38].value=103
		form1.text3[39].value=77
		form1.text3[40].value=24
	   form1.text3[41].value=35
	    form1.text3[42].value=55
		form1.text3[43].value=64
		form1.text3[44].value=81
		form1.text3[45].value=104
		form1.text3[46].value=113
		form1.text3[47].value=92
		form1.text3[48].value=49
	   form1.text3[49].value=64
	    form1.text3[50].value=78
		form1.text3[51].value=87
		form1.text3[52].value=103
		form1.text3[53].value=121
		form1.text3[54].value=120
		form1.text3[55].value=101
		form1.text3[56].value=72
	   form1.text3[57].value=92
	    form1.text3[58].value=95
		form1.text3[59].value=98
		form1.text3[60].value=112
		form1.text3[61].value=100
		form1.text3[62].value=103
		form1.text3[63].value=99
	}	
  function  liang()
  {
      var i
	  var j
	  var temp
	  for(i=0;i<8;i++)
	     for(j=0;j<8;j++)
		 {
		      if(form1.text3[i*8+j].value=='')
			    {
				     alert("未给定量化表")
									return 
					}
				if(form1.text2[i*8+j].value=='')
			    {
				     alert("未给定FDCT系数表")
									return 
					}
					temp=form1.text2[i*8+j].value/form1.text3[i*8+j].value
				form1.text4[i*8+j].value=Math.round(temp)
				}
		}
function zz()
{
   var m=0
   var n=1
   var k=1
   var i=1
   var Ni=8
    if(form1.text4[0].value=='')
			   {alert("未给定规格化量化表")
									return 
				}
   form1.text5.value=form1.text4[0].value;
   for(k=1;k<Ni;k++)
   {
      if(k%2!=0)
		{
		  n=k
		  m=0
		  while(n>=0)
		     {
			   i=i+1
			   if(form1.text4[m*Ni+n].value=='')
			   {alert("未给定规格化量化表")
									return 
				}
			       
			  form1.text5.value+=' '+form1.text4[m*Ni+n].value
			   m=m+1
			   n=n-1
			  }
       }
    else
	  {
	    m=k
		n=0
		while(m>=0)
		   {
			   i=i+1
			    if(form1.text4[m*Ni+n].value=='')
			   {alert("未给定规格化量化表")
									return 
				}
			 form1.text5.value+=' '+form1.text4[m*Ni+n].value
			   m=m-1
			   n=n+1
		 }
	}
  }
  for(k=1;k<Ni;k++)
  {
     if(k%2!=0)
	 {
	   n=Ni-1
	   m=k
	   while(m<Ni)
	   {
	       i=i+1
		    if(form1.text4[m*Ni+n].value=='')
			   {alert("未给定规格化量化表")
									return 
				}
			  form1.text5.value+=' '+form1.text4[m*Ni+n].value
			   m=m+1
			   n=n-1
			   }
	 }
	 else
	 {
	    m=Ni-1
		n=k
		while(n<Ni)
		{
			   i=i+1
			    if(form1.text4[m*Ni+n].value=='')
			   {alert("未给定规格化量化表")
									return 
				}
			   form1.text5.value+=' '+form1.text4[m*Ni+n].value
			   m=m-1
			   n=n+1
		 } 
    }
  }
}
var temps=new Array(64)
function RLE()
{
    if(form1.text5.value=='')
	{
	    alert("未设定z型编码")
		return 
		}
    var str=form1.text5.value  
	var i
	form1.text6.value=''
	var num=0
	var j=-1
	var fu=0
	// alert(str.length)
	for(i=0;i<str.length;i++)
	 {   
	     if(str.charAt(i)==' ')
		       {
			      if(fu==1)
				  num=-num
			      temps[++j]=num
				  fu=0
				  num=0
				  }
			else if(str.charAt(i)=='-')
			        fu=1
			else
			num=num*10+str.charCodeAt(i)-48
		}
		temps[++j]=num
		num=1
		//alert(temp[56])
	  for(i=1;i<=j;i++)
	  {
	      if(temps[i]==temps[i-1])
		  num++;
		  else
		  {
		      form1.text6.value+='('+temps[i-1]+')'+num
			  num=1
			  }
		}
		 form1.text6.value+='('+temps[i-1]+')'+num
}
function huan()
{
      if(form1.text6.value=='')
	{
	    alert("未设定JPEG数据流")
		return 
	}
   var m=0
   var n=1
   var k=1
   var i=1
   var Ni=8
   form1.text7[0].value=temps[0]
   for(k=1;k<Ni;k++)
   {
      if(k%2!=0)
		{
		  n=k
		  m=0
		  while(n>=0)
		     {
			   i=i+1
			  form1.text7[m*Ni+n].value=temps[i-1]
			   m=m+1
			   n=n-1
			  }
       }
    else
	  {
	    m=k
		n=0
		while(m>=0)
		   {
			   i=i+1
			   form1.text7[m*Ni+n].value=temps[i-1]
			   m=m-1
			   n=n+1
		 }
	}
  }
  for(k=1;k<Ni;k++)
  {
     if(k%2!=0)
	 {
	   n=Ni-1
	   m=k
	   while(m<Ni)
	   {
	       i=i+1
			    form1.text7[m*Ni+n].value=temps[i-1]
			   m=m+1
			   n=n-1
			   }
	 }
	 else
	 {
	    m=Ni-1
		n=k
		while(n<Ni)
		{
			   i=i+1
			   form1.text7[m*Ni+n].value=temps[i-1]
			   m=m-1
			   n=n+1
		 } 
    }
  }
}
  function ni()
  {
      var i
	  var j
	  for(i=0;i<8;i++)
	     for(j=0;j<8;j++)
		 {
		      if(form1.text3[i*8+j].value=='')
			    {
				     alert("未给定量化表")
									return 
					}
				if(form1.text7[i*8+j].value=='')
			    {
				     alert("未给定规格化的量化系数")
									return 
					}
				form1.text8[i*8+j].value=form1.text3[i*8+j].value*form1.text7[i*8+j].value
				}
		}
function  again()
{
    var temp=new Array(64)
	var templ
	var i
	var j
	var k
	for(i=0;i<8;i++)
	{
	    for(j=0;j<8;j++)
		{
		     temp[i*8+j]=0.0
			 for(k=0;k<8;k++)
			 {
			      if(form1.text8[i*8+k].value=='')
				  {
				      alert("未给定逆量化系数")
					  return
					  }
			    temp[i*8+j]+=form1.text8[i*8+k].value*c[k*8+j]
				}
		}
	}
		for(i=0;i<8;i++)
		{for(j=0;j<8;j++)
		  {
		       templ=0.0
			   for(k=0;k<8;k++)
			       {  templ+=ct[i*8+k]*temp[k*8+j]}
				 templ+=128
				 if(templ<0)
				 form1.text9[i*8+j].value=0
				 else if(templ>255)
				   form1.text9[i*8+j].value=255
				   else
				   form1.text9[i*8+j].value=Math.round(templ)
			}	
		}
	}		   				
</script>
</head>
<BODY>
<TT><B>JPEG算法举例</B></TT>
<script language = "Javascript">
document.write("<form name='form1'>")
document.write("<input type=reset  value='reset'><br><br>");
document.write("<B>一. JPEG压缩过程</B><br>")
for (var i = 0; i < 8; i++){
   for (var j = 0 ; j < 8; j++)
      document.write("<input type='text' name='text1'  size='4'>");
   document.write("<br>");
 }
document.write("源图像<input type='button' name='bt2' value='样例' onClick='example()'><br><br>");
for (var i = 0; i < 8; i++){
   for (var j = 0 ; j < 8; j++)
      document.write("<input type='text' name='text2' size='4'>");
   document.write("<br>");
 }
document.write("FDCT系数<input type='button' name='bt2' value='FDCT' onClick='FDCT()'><br><br>");
for (var i = 0; i < 8; i++){
   for (var j = 0 ; j < 8; j++)
      document.write("<input type='text' name='text3'  size='4'>");
   document.write("<br>");
 }
document.write("量化表<input type='button' name='bt3' value='量化表样例'onClick='give()'><br><br>");
for (var i = 0; i < 8; i++){
   for (var j = 0 ; j < 8; j++)
      document.write("<input type='text' name='text4'  size='4'>");
   document.write("<br>");
 }
document.write("规格化量化表<input type='button' name='bt4' value='量化' onClick='liang()'><br><br>");
document.write("<br><br>");
document.write("<B>二. JPEG数据流的形成</B><br>")
 document.write("<input type='text' name='text5'  size='100'>");
document.write("Z字型编排<input type='button' name='bt5' value='z字型编排' onClick='zz()'><br><br>");
 document.write("<input type='text' name='text6'  size='100'>");
document.write("RLE编码<input type='button' name='bt6' value='RLE编码' onClick='RLE()'><br><br>");
document.write("<br><B>三. JPEG图像的重构</B><br><br>")
for (var i = 0; i < 8; i++){
   for (var j = 0 ; j < 8; j++)
      document.write("<input type='text' name='text7'  size='4'>");
   document.write("<br>");
 }
document.write("还原规格化量化表<input type='button' name='bt7' value='还原规格化量化表' onClick='huan()'<br><br>");
for (var i = 0; i < 8; i++){
   for (var j = 0 ; j < 8; j++)
      document.write("<input type='text' name='text8'  size='4'>");
   document.write("<br>");
 }
document.write("逆量化后的系数<input type='button' name='bt8' value='逆量化' onClick='ni ()'><br><br>");
for (var i = 0; i < 8; i++){
   for (var j = 0 ; j < 8; j++)
      document.write("<input type='text' name='text9'  size='4'>");
   document.write("<br>");
 }
document.write("重构图像<input type='button' name='bt9' value='重构图像' onClick='again()'><br><br>");
document.write("</form>");

</script>
</BODY>
</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -