%@ page contentType="text/html; charset=UTF-8" %>
<%@ page import="java.io.*,java.util.*,java.awt.image.*,javax.imageio.*" %>
<%@include file="flag-functions.jsp" %>
<%
String docBase = getServletContext().getRealPath("/");
File similarityDir = new File(docBase,"similarity-2d");
String imagesStr = (request.getParameter("imagesDir")!=null) ? request.getParameter("imagesDir") : "import";
File imagesDir = new File(similarityDir,imagesStr);
File aspectRatioFile = new File(similarityDir,"flag-aspect-ratio.json");
ArrayList imageFileList = listFilesForFolder(imagesDir,".gif");
File imageUrlBase = new File(imagesStr);
if (!aspectRatioFile.exists()) {
Map ratioFreq = new HashMap();
Map> ratioList = new HashMap>();
for (final File fileEntry : imageFileList) {
BufferedImage bimg = ImageIO.read(fileEntry);
int width = bimg.getWidth();
int height = bimg.getHeight();
int gcd = GCD(width,height);
int gcd_width = width / gcd;
int gcd_height = height / gcd;
if ((gcd_width>50) || (gcd_height>50)) {
int rough_width = (gcd_width+49)/50;
int rough_height = (gcd_height+49)/50;
int rough_gcd = GCD(rough_width,rough_height);
gcd_width = rough_width / rough_gcd;
gcd_height = rough_height / rough_gcd;
}
String ratioStr = gcd_width + ":" + gcd_height;
if (!ratioFreq.containsKey(ratioStr)) {
ratioFreq.put(ratioStr,1);
ratioList.put(ratioStr,new ArrayList());
ratioList.get(ratioStr).add(fileEntry);
}
else {
ratioFreq.put(ratioStr,ratioFreq.get(ratioStr)+1);
ratioList.get(ratioStr).add(fileEntry);
}
}
try {
FileWriter foutFileWriter = new FileWriter(aspectRatioFile);
PrintWriter fout = new PrintWriter(foutFileWriter);
fout.println("{");
Map sortedRatioFreq = sortByComparator(ratioFreq);
int c = 0;
for (Map.Entry entry : sortedRatioFreq.entrySet()) {
String ratio_key = entry.getKey();
Integer ratio_freq = entry.getValue();
if (ratio_freq>1) {
if (c>0) {
fout.print(", ");
}
fout.println("\"" + ratio_key + "\" : ");
fout.println(" { \"freq\" : " + entry.getValue());
ArrayList flag_list = ratioList.get(ratio_key);
int flag_list_len = flag_list.size();
fout.print(" ,\"flags\" : [");
for (int i=0; i0) {
fout.print(", ");
}
String flag_file_str = imageUrlBase + "/" + flag_list.get(i).getName();
fout.print("\""+flag_file_str+"\"");
}
fout.println("]");
fout.println(" }");
c++;
}
}
fout.println("}");
fout.close();
}
catch (IOException e) {
e.printStackTrace();
}
}
try {
FileReader fr = new FileReader(aspectRatioFile);
BufferedReader bfr = new BufferedReader(fr);
String line;
while ( ( line = bfr.readLine( ) ) != null ) {
out.print(line);
}
bfr.close();
}
catch (IOException e) {
e.printStackTrace();
}
%>