%@ page contentType="text/html; charset=UTF-8"%>
<%@ page trimDirectiveWhitespaces="true" %>
<%@ page import="java.io.File"%>
<%@page import="java.io.FileFilter"%>
<%@page import="java.io.OutputStream"%>
<%@page import="java.net.URL"%>
<%@page import="java.awt.image.BufferedImage"%>
<%@page import="java.awt.Graphics2D"%>
<%@page import="javax.imageio.ImageIO"%>
<%@page import="javax.imageio.IIOImage"%>
<%@page import="javax.imageio.ImageWriter"%>
<%@page import="javax.imageio.ImageWriteParam"%>
<%@page import="javax.imageio.stream.MemoryCacheImageOutputStream"%>
<%@page import="java.util.Arrays"%>
<%@page import="java.util.Comparator"%>
<%@page import="java.util.Enumeration"%>
<%@page import="java.util.Vector"%>
<%@page import="java.util.Iterator"%>
<%
int xStart = 0;
int yStart = 0;
int zoom = 6;
Iterator iw = ImageIO.getImageWritersByFormatName("jpeg");
ImageWriter writer = (ImageWriter)iw.next();
ImageWriteParam iwp = writer.getDefaultWriteParam();
iwp.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
float q = 95; try { q = Integer.parseInt(request.getParameter("q")); } catch (Exception e) {}
iwp.setCompressionQuality(q/100f);
String tilePath=request.getParameter("tilepath");
if (tilePath == null) tilePath = "http://gallica.bnf.fr/proxy?method=R";
String ark=request.getParameter("ark");
if (ark == null) ark = "btv1b8470433r";
String folio=request.getParameter("folio");
if (folio == null) folio = "f15";
try { zoom = Integer.parseInt(request.getParameter("z")); } catch (Exception e){}
if (tilePath == null) return;
try {
BufferedImage fullImage = null;
Graphics2D g = null;
int imageWidth = 4220;
int imageHeight = 5300;
fullImage = new BufferedImage(imageWidth, imageHeight, BufferedImage.TYPE_INT_RGB);
g = fullImage.createGraphics();
int x = 0;
int y = 0;
for (int i = 0; i < 5; ++i) {
BufferedImage tile = null;
String imageURL = tilePath + "&ark="+ark+"."+folio+"&l="+Integer.toString(zoom) + "&r="+ Integer.toString(y) + ",0,1060,4220";
tile = ImageIO.read(new URL(imageURL));
g.drawImage(tile, x, y, tile.getWidth(), tile.getHeight(), null);
y += tile.getHeight();
}
if (g != null) g.dispose();
response.setContentType("image/jpeg");
OutputStream os = response.getOutputStream();
writer.setOutput(new MemoryCacheImageOutputStream(os));
IIOImage image = new IIOImage(fullImage, null, null);
writer.write(null, image, iwp);
writer.dispose();
os.close();
}
catch (Exception e) {e.printStackTrace();}
%>