package com.kreative.paint.material.frame;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import javax.imageio.ImageIO;
public class UnmakeFrame {
public static void main(String[] args) {
if (args.length == 0) {
printHelp();
} else {
File outDir = null;
boolean makeFRNX = false;
boolean makeIIOW = false;
boolean makeStrip = false;
boolean processingFlags = true;
int i = 0; while (i < args.length) {
String arg = args[i++];
if (processingFlags && arg.startsWith("-")) {
if (arg.equals("--")) {
processingFlags = false;
} else if (arg.equals("-D") && i < args.length) {
outDir = new File(args[i++]);
} else if (arg.equals("-F")) {
makeFRNX = true;
} else if (arg.equals("-I")) {
makeIIOW = true;
} else if (arg.equals("-P")) {
makeStrip = true;
} else if (arg.equals("--help")) {
printHelp();
} else {
System.err.println("Ignoring unknown option: " + arg);
}
} else {
try {
processFile(new File(arg), outDir, makeFRNX, makeIIOW, makeStrip);
} catch (IOException e) {
System.err.println("Error processing " + arg + ": " + e.getMessage());
e.printStackTrace();
}
}
}
}
}
private static void printHelp() {
System.out.println();
System.out.println("UnmakeFrame - Extract frame info from PNG.");
System.out.println();
System.out.println("Options:");
System.out.println(" -D <path> Set output directory.");
System.out.println(" -F Output FRNX file.");
System.out.println(" -I Output PNG file rewritten by ImageIO.");
System.out.println(" -P Output PNG file without frNF chunk.");
System.out.println(" -- Treat remaining arguments as file names.");
System.out.println();
System.out.println("If none of -F, -I, -P are specified, all are implied.");
System.out.println();
}
private static void processFile(
File inFile,
File outDir,
boolean makeFRNX,
boolean makeIIOW,
boolean makeStrip
) throws IOException {
if (!(makeFRNX || makeIIOW || makeStrip)) {
makeFRNX = makeIIOW = makeStrip = true;
}
File frnfFile, iiowFile, stripFile;
if (outDir == null) {
File parent = inFile.getParentFile();
String basename = inFile.getName().replaceFirst("\\.[a-zA-Z0-9]+$", "");
frnfFile = new File(parent, basename + "-frameinfo.frnx");
iiowFile = new File(parent, basename + "-iiowrite.png");
stripFile = new File(parent, basename + "-stripped.png");
} else if (makeIIOW && makeStrip) {
String basename = inFile.getName().replaceFirst("\\.[a-zA-Z0-9]+$", "");
frnfFile = new File(outDir, basename + "-frameinfo.frnx");
iiowFile = new File(outDir, basename + "-iiowrite.png");
stripFile = new File(outDir, basename + "-stripped.png");
} else {
String basename = inFile.getName().replaceFirst("\\.[a-zA-Z0-9]+$", "");
frnfFile = new File(outDir, basename + ".frnx");
iiowFile = new File(outDir, basename + ".png");
stripFile = new File(outDir, basename + ".png");
}
Frame frame = FrameReader.readFrame(inFile);
if (makeFRNX) {
PrintWriter finfOut = new PrintWriter(new OutputStreamWriter(new FileOutputStream(frnfFile), "UTF-8"), true);
FrameWriter.printFRNX(finfOut, frame);
finfOut.flush();
finfOut.close();
}
if (makeIIOW) {
ImageIO.write(frame.image, "png", iiowFile);
}
if (makeStrip) {
DataInputStream stripIn = new DataInputStream(new FileInputStream(inFile));
DataOutputStream stripOut = new DataOutputStream(new FileOutputStream(stripFile));
FrameWriter.stripFRNF(stripIn, stripOut);
stripOut.flush();
stripOut.close();
stripIn.close();
}
}
}