<%@ page contentType="text/html; charset=UTF-8"%> <%@ 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="java.util.Arrays"%> <%@page import="java.util.Comparator"%> <%@page import="java.util.Enumeration"%> <% final int tileMax[] = { 2, 3, 4, 5, 7, 9, 11, 14, 17, 22 }; int xStart = 0; int yStart = 0; int zoom = 5; String image=request.getParameter("i"); String outFormat=request.getParameter("of"); if (outFormat == null) outFormat = "png"; try { zoom = Integer.parseInt(request.getParameter("z")); } catch (Exception e){} int xEnd = tileMax[zoom]; int yEnd = tileMax[zoom]; try { xStart = Integer.parseInt(request.getParameter("xs")); } catch (Exception e){} try { yStart = Integer.parseInt(request.getParameter("ys")); } catch (Exception e){} try { xEnd = Integer.parseInt(request.getParameter("xe")); } catch (Exception e){} try { yEnd = Integer.parseInt(request.getParameter("ye")); } catch (Exception e){} final String sinaiticusBaseURL = "http://www.codex-sinaiticus.net/handler/manuscriptImage.ashx?z=" + zoom; if (image == null) return; if (xStart < 0) xStart = 0; if (xStart > tileMax[zoom]) xStart = tileMax[zoom]; if (yStart < 0) yStart = 0; if (yStart > tileMax[zoom]) yStart = tileMax[zoom]; if (xEnd < 0) xEnd = 0; if (xEnd > tileMax[zoom]) xEnd = tileMax[zoom]; if (yEnd < 0) yStart = 0; if (yEnd > tileMax[zoom]) yEnd = tileMax[zoom]; if (((xEnd-xStart) * (yEnd-yStart)) > 101) return; xEnd++; yEnd++; try { String imageBaseURL = sinaiticusBaseURL + "&image="+image; BufferedImage fullImage = null; Graphics2D g = null; int tileWidth = 0; int tileHeight = 0; for (int i = xStart; i < xEnd; i++) { for (int j = yStart; j < yEnd; j++) { String imageURL = imageBaseURL + "&x="+Integer.toString(i) + "&y="+Integer.toString(j); BufferedImage tile = ImageIO.read(new URL(imageURL)); if (i == xStart && j == yStart) { tileWidth = tile.getWidth(); tileHeight = tile.getHeight(); fullImage = new BufferedImage(tileWidth * (xEnd-xStart), tileHeight * (yEnd-yStart), BufferedImage.TYPE_INT_RGB); g = fullImage.createGraphics(); } g.drawImage(tile, (i-xStart)*tileWidth, (j-yStart)*tileHeight, tileWidth, tileHeight, null); } } if (g != null) g.dispose(); response.setContentType("image/png"); OutputStream os = response.getOutputStream(); ImageIO.write(fullImage, outFormat, os); os.close(); } catch (Exception e) {e.printStackTrace();} %>