2010-09-21 39 views

回答

4
+0

它现在在这里:http://svn.apache.org/viewvc/commons/proper/imaging/trunk/src/main/java/org/apache/commons/imaging/formats/icns/IcnsDecoder.java?view =标记非常感谢。它将帮助我在GNU Linux和Windows下创建一个.app文件:https://sourceforge.net/p/tuer/tickets/9/#c109 – gouessej 2014-07-24 20:25:10

2

您需要ICNS先转换为另一种图像类型,负载在此之后的图像,你可以将其删除。这是怎么PNG转换为ICNS,所以你只需要以相反的方式来做:

public static void Png(File png, File icns) throws IOException{ 
    ImageIcon image = new ImageIcon(ImageIO.read(png)); 
    ImageIconAs(image, icns); 
} 

public static void ImageIconAs(ImageIcon ii, File icns) throws IOException{IconAs((Icon)ii,icns);} 

public static void IconAs(Icon icon, File icns) throws IOException{ 
     if (icon != null) { 
       BufferedImage bi = new BufferedImage(icon.getIconWidth(), icon.getIconHeight(), BufferedImage.TYPE_INT_ARGB); 
       Graphics2D g = bi.createGraphics(); 
       icon.paintIcon(new Canvas(), g, 0, 0); 
       g.dispose(); 
       File outputfile = new File("temp000.png"); 
       ImageIO.write(bi, "png", outputfile); 
       execTerminal(new String[]{ "sips", "-s", "format", "tiff", 
         "temp000.png","--out", "temp000.tiff" }); 
       File apaga2 = new File("temp000.png"); 
       apaga2.delete(); 
       execTerminal(new String[]{ "tiff2icns", "-noLarge", 
         "temp000.tiff", icns.getAbsolutePath()}); 
       File apaga = new File("temp000.tiff"); 
       apaga.delete(); 
     } 
    } 

static void execTerminal(String[] cmd){ 
     int exitCode = 0; 
     try { 
      exitCode = Runtime.getRuntime().exec(cmd).waitFor(); 
     } 
     catch (InterruptedException e) {e.printStackTrace();} 
     catch (IOException e) { 
      if (exitCode != 0) System.out.println("ln signaled an error with exit code " + exitCode); 
     } 
    } 

你只需要使用它来调用操作:

PNG(png_file,icns_file);