用户: 密码: 答案:   我要注册   忘记密码

加入收藏  设为首页

开发文档

CNJM首页

业界新闻

手机软件

终端应用

资源下载

EclipseME

CNJM论坛

                 

频道列表

J2ME开发 176篇
服务器端开发 33篇
JAVA语言 71篇
游戏与图形 101篇
WindowsMobile开发 6篇
Symbian开发 61篇
Brew开发 36篇
其它开发平台 6篇

热点文章

PngMate使用教程 55919次
使用JavaMagic进行... 30179次
手机游戏修改(2)工具 20238次
手机游戏修改之浅谈 13050次
手机游戏修改(8)... 12573次
J2ME游戏开发笔记...  12144次
开发手机游戏的一...  11166次
J2ME潜艇大战游戏...  10790次
Java手机游戏编程...  10694次
手机游戏知识扫盲 10537次
手机盗版软件现状分析 10455次
J2ME游戏中的图片处理 10172次

文章搜索

搜 索
按 照
频 道
  
优化png图片的小工具
编辑:rocks    审核:rocks    文章来源:CSDN博客
关键词:png    发表日期:2006-02-27 12:07:31    浏览次数:6961次
本文版权归原作者,中国JAVA手机网收录本文的目的是让更多人阅读到此文章。转载请注明出处为中国JAVA手机网<www.cnjm.net>
来自:http://www.cnjm.net/tech/article999.html

[转载于CSDN博客]

熟悉png格式的朋友都知道png有3个必须的文件块,其他的可以去除.这个工具的作用就是提取3个文件块.当然,文件头与文件尾还是单加上的.对图片的优化还是有一定作用的:

/*
* Created on 2006-1-24
JAVA手机网[www.cnjm.net]
*
* TODO To change the template for this generated file go to
JAVA手机网[www.cnjm.net]
* Window - Preferences - Java - Code Style - Code Templates
*/

/**
* @author lhz1
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/

JAVA手机网[www.cnjm.net]
import java.io.*;
public class ProImage {
static int size;
static byte[] a;
static byte[] b;
static byte[] f;
static int i=0;
static String[] Fname;
JAVA手机网[www.cnjm.net]
static int Fcount;

/**
JAVA手机网[www.cnjm.net]
 *
 */
public ProImage() {
 
 // TODO Auto-generated constructor stub
}

JAVA手机网[www.cnjm.net]
public static void main(String[] args) throws IOException {
 ProImage.find(args[0]);
 //ProImage.readImage("1.png");
 //ProImage.moImage();
 //ProImage.writeImage("2.png");
}

public static void readImage(String url) throws IOException{
 try {
 
  DataInputStream dis=new DataInputStream(new FileInputStream(new File(url)));
  size=dis.available();
     b=new byte[size];
  for(i=0;i<size;i++){
JAVA手机网[www.cnjm.net]
   
   b[i]=dis.readByte();
   
JAVA手机网[www.cnjm.net]
   
JAVA手机网[www.cnjm.net]
  }
 
  //a=b;
  dis.close();
 
 } catch (FileNotFoundException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
 }
 
 
 
}

public static void moImage(){//49 48 44 52 IHDR标识 50 4C 54 45 PLTE标识 49 44 41 54 IDAT标识 IEND 00 00 00 00 49 45 4E 44 AE 42 60 82

 int k=8;
 int j=0;
JAVA手机网[www.cnjm.net]
 int c=0;
 a=new byte[size];
JAVA手机网[www.cnjm.net]
//加入文件头;  
 a[0]=(byte)0x89;
JAVA手机网[www.cnjm.net]
 a[1]=(byte)0x50;
JAVA手机网[www.cnjm.net]
 a[2]=(byte)0x4E;
 a[3]=(byte)0x47;
 
 a[4]=(byte)0x0D;
JAVA手机网[www.cnjm.net]
 a[5]=(byte)0x0A;
 a[6]=(byte)0x1A;
 a[7]=(byte)0x0A;
 
 
 
 //System.out.println(size);
 for(i=0;i<size-4;i++){
 
  if(b[i]==0x49&&b[i+1]==0x48&&b[i+2]==0x44&&b[i+3]==0x52){//IHDR
   System.out.println("find");
   int len=(int )( ( ( b[i-4]  & 0xff ) << 24)   | ((b[i-3] & 0xff ) << 16  )| ((b[i-2] & 0xff)  << 8 ) |   (b[i-1] & 0xff) ) ;
   j=i;
   
   for( c=0;c<len+12;c++){
    a[k]=b[j-4];
    k++;
    j++;
   }
   
  }
 
JAVA手机网[www.cnjm.net]
  if(b[i]==0x50&&b[i+1]==0x4C&&b[i+2]==0x54&&b[i+3]==0x45){//PLTE
   int len=(int )( ( ( b[i-4]  & 0xff ) << 24)   | ((b[i-3] & 0xff ) << 16  )| ((b[i-2] & 0xff)  << 8 ) |   (b[i-1] & 0xff) ) ;
   j=i;
   for(c=0;c<len+12;c++){
    a[k]=b[j-4];
JAVA手机网[www.cnjm.net]
    k++;
    j++;
   }
   
  }
  if(b[i]==0x49&&b[i+1]==0x44&&b[i+2]==0x41&&b[i+3]==0x54){//IDAT
   int len=(int )( ( ( b[i-4]  & 0xff ) << 24)   | ((b[i-3] & 0xff ) << 16  )| ((b[i-2] & 0xff)  << 8 ) |   (b[i-1] & 0xff) ) ;
   j=i;
   System.out.println("len"+len);
   for(c=0;c<len+12;c++){
    a[k]=b[j-4];
    k++;
    j++;
   }
JAVA手机网[www.cnjm.net]
   
JAVA手机网[www.cnjm.net]
  }
  a[k]=(byte)0x00;
  a[k+1]=(byte)0x00;
  a[k+2]=(byte)0x00;
  a[k+3]=(byte)0x00;
  a[k+4]=(byte)0x49;
  a[k+5]=(byte)0x45;
  a[k+6]=(byte)0x4E;
  a[k+7]=(byte)0x44;
  a[k+8]=(byte)0x4E;
  a[k+9]=(byte)0x42;
  a[k+10]=(byte)0x60;
  a[k+11]=(byte)0x82;
 
 
 
 }
 f=new byte[k+12];
 for(i=0;i<k+12;i++){
  f[i]=a[i];
 }
JAVA手机网[www.cnjm.net]
}

public static void writeImage(String pngName) throws IOException{
 
 FileOutputStream fos=new FileOutputStream( pngName);
JAVA手机网[www.cnjm.net]
 System.out.println(f[0]);
 fos.write(f);
 fos.close();
 
 
 
}
public static void find(String dir)
{

File parent = new File(dir);
File child[] = parent.listFiles();
Fcount=child.length;
Fname=new String[Fcount];
JAVA手机网[www.cnjm.net]
for(int i = 0;i<child.length;i++)
JAVA手机网[www.cnjm.net]
{
if(child[i].isFile())
{
JAVA手机网[www.cnjm.net]
 Fname[i]=child[i].toString();
JAVA手机网[www.cnjm.net]
 System.out.println("file"+Fname[i]);
 try {
  ProImage.readImage(Fname[i]);
  ProImage.moImage();
  ProImage.writeImage(Fname[i]);
 
 } catch (IOException e) {
JAVA手机网[www.cnjm.net]
  // TODO Auto-generated catch block
JAVA手机网[www.cnjm.net]
  e.printStackTrace();
JAVA手机网[www.cnjm.net]
 }
 

}
else
{

//find(child[i].toString());
JAVA手机网[www.cnjm.net]
}
}
}



}
来自:http://www.cnjm.net/tech/article999.html

相关文章
    极限压缩JAR包中的图片  [2006-07-12]
    安全高效的使用PNG图  [2006-03-27]
    打造自由换色的png图片类  [2006-02-27]
    PngMate使用教程  [2006-02-15]
最新评论
网站简介  |  关于版权  |  广告服务  |  网站地图  |  联系我们
Copyright © www.CNJM.net, All rights reserved
中国JAVA手机网 版权所有
ICP备案:京ICP备041452