Libgdx: 將Texturepacker打包的PNG圖片還原成一張一張的單個的,
你是否發現用Texturepacker在打包壓縮資源檔之後。把原稿檔案弄丟了,但是又要增加新的小png的時候,卻無從下手了,本文就是博主在遇到這個問題後百度了很多方法,可惜只有plist格式的方法,libgdx的幾乎沒有。反正我是沒找到,於是自己就寫了一個。
打包產生的有兩個檔案
一個是**.txt 一個是**.png(有些不是txt是.pack 只要內容一樣就行,你用記事本開啟看看)
其中txt記錄位置等參數資訊. png是一張大圖
card.pngformat: RGBA8888filter: Linear,Linearrepeat: nonec36 rotate: false xy: 2, 550 size: 63, 86 orig: 63, 86 offset: 0, 0 index: -1btn1 rotate: false xy: 644, 2 size: 156, 57 orig: 156, 57 offset: 0, 0 index: -1c41 rotate: false xy: 392, 550 size: 63, 86 orig: 63, 86 offset: 0, 0 index: -1
上面是位置資訊檔。
下面用java根據這個檔案將大圖還原成小圖
public static void toPNG(String pathTxt,String pathPNG,String OUT){ArrayList<String> name=new ArrayList<String>();ArrayList<String> xy=new ArrayList<String>();ArrayList<String> size=new ArrayList<String>();try {String encoding = "GBK";File file = new File(pathTxt);if (file.isFile() && file.exists()) { // 判斷檔案是否存在InputStreamReader read = new InputStreamReader(new FileInputStream(file), encoding);// 考慮到編碼格式BufferedReader bufferedReader = new BufferedReader(read);String lineTxt = null;int lineNum=0,lineNum2=0;while ((lineTxt = bufferedReader.readLine()) != null) {lineNum++;if(lineNum2>0)lineNum2++;if(lineNum==5)lineNum2=1;if(lineNum%7==5)name.add(lineTxt);if(lineNum2%7==3)xy.add(lineTxt);if(lineNum2%7==4)size.add(lineTxt);}read.close();} else {System.out.println("找不到指定的檔案");}BufferedImage image = (BufferedImage)ImageIO.read(new File(pathPNG));for(int i=0;i<name.size();i++){String p1=name.get(i),p2=xy.get(i),p3=size.get(i);int x=0,y=0,w=0,h=0,flag=0;for(int j=0;j<p2.length();j++){if(p2.charAt(j)<='9' && p2.charAt(j)>='0' ){if(flag==0){x=x*10+p2.charAt(j)-'0';}else{y=y*10+p2.charAt(j)-'0';}}if(p2.charAt(j)==',')flag=1;}flag=0;for(int j=0;j<p3.length();j++){if(p3.charAt(j)<='9' && p3.charAt(j)>='0' ){if(flag==0)w=w*10+p3.charAt(j)-'0';elseh=h*10+p3.charAt(j)-'0';}if(p3.charAt(j)==',')flag=1;}File f=new File(OUT);if(!f.exists())f.mkdirs();ImageIO.write(image.getSubimage(x,y,w,h),"png",new FileOutputStream(OUT+"/"+p1+".png"));System.out.println(p1+":finished");}} catch (Exception e) {System.out.println("讀取檔案內容出錯");e.printStackTrace();}}本文原創網址轉載必須註明:http://blog.csdn.net/cq361106306/article/details/38036737
使用方法。直接調用
toPNG("d:/card.txt","d:/card.png","d:/s");第一個參數是文本參數檔案,不一定是txt尾碼。不同軟體產生不一樣,只要用記事本開啟內容跟上面那個txt一樣就行。
第二個參數是大圖檔案
第三個參數是輸出的地方。最後面不要再加"/"了;路徑是自動建立的
我這裡是測試成功的。如有疑問請留言
打個小廣告
我的鬥地主APP 請大家支援。 支援單機雙人三人聯機、
叫做 Wifi鬥地主
地址點擊開啟連結http://www.wandoujia.com/apps/com.hj.joker