Utilisateur:Ellysor/TilesToPlanFiles

De Guild Wars 2 Wiki
Aller à la navigation Aller à la recherche

Programme (java) qui récupére les tiles d'une zone depuis l'API et les assemble pour créer la carte Plan-xxx.jpg qui est utilisée par le wiki. Il n'est pas complètement automatisé, il ne récupère pas les coordonnées de la map à partie de /map_floor mais il les lit dans un tableau pour le moment.

import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.net.URL;

import javax.imageio.ImageIO;


public class AssembleTiles {

 public static void main(String[] args)
 {
   //  https://api.guildwars2.com/v1/map_floor.json?continent_id=1&lang=fr&floor=1
   
   //int[] tileData = { 2, 7, 2, 9, 63, 73 }; String filename = "Plan-Bassin aurique (niveau supérieur).jpg";
   int[] tileData = { 1, 7, 2, 9, 63, 73 };  String filename = "Plan:Bassin aurique (surface).jpg";
   
   int floor = tileData[0]; // floor 1 = surface, 2 = niveau superieur
   int zoom = tileData[1]; // max zoom level (for best level of details) 
   int tileMinX = tileData[2];
   int tileMaxX = tileData[3];
   int tileMinY = tileData[4];
   int tileMaxY = tileData[5];
   
   BufferedImage resultImage = new BufferedImage((tileMaxX-tileMinX+1)*256, (tileMaxY-tileMinY+1)*256, BufferedImage.TYPE_INT_RGB);
   Graphics2D g2 = resultImage.createGraphics();
   
   try {
   
     for (int i = tileMinX; i<= tileMaxX; i++) {
       for (int j = tileMinY; j<= tileMaxY; j++) {
         String urlString = "https://tiles.guildwars2.com/1/"+floor+"/"+zoom+"/"+i+"/"+j+".jpg";
         System.out.println("Loading " + urlString);
         BufferedImage tileImage = ImageIO.read(new URL(urlString));
         g2.drawImage(tileImage,(i-tileMinX)*256,(j-tileMinY)*256,256,256,null);
       }
     }
     
     File outputfile = new File("C:\\Users\\User\\Documents\\Guild Wars 2\\"+filename);
     ImageIO.write(resultImage, "jpg", outputfile);
     System.out.println("Done, file " + filename + " created");
   } catch (IOException e) {
     e.printStackTrace();
   }
   
 }

}