Applet no crear el archivo de imagen a través de ImageIO.write
-
09-10-2019 - |
Pregunta
He estado luchando con un problema que involucra un boceto de procesamiento que quiero utilizar para crear un archivo de imagen (en un directorio del servidor). En Java, utilizo un PImage del lienzo, convertida en un BufferedImage, que se crea a continuación, como un archivo a través de ImageIO.write.
Crea el archivo correctamente cuando se ejecuta como un boceto en mi sistema, file.png aparece en la misma carpeta que el programa. El problema es que cuando el programa se exporta como un applet, ya no crea el archivo. Sería enorme si alguien tenía alguna entrada de por qué el boceto del programa puede crear la imagen, pero el applet no puede.
Aquí hay un par de fragmentos de lo que estoy usando si es de ninguna ayuda. Gracias a todos.
PImage pimg = get();
BufferedImage canvas = convertToBufferedImage(pimg);
File file = new File("./sketch/file.png");
try
{
ImageIO.write(canvas, "PNG", file);
}
catch (Exception e) { println(e); }
Y aquí está el método que está convirtiendo el PImage a un BufferedImage.
BufferedImage convertToBufferedImage(PImage pimg){
PGraphics pg = createGraphics(width, height, JAVA2D);
pg.image(pimg, 0, 0);
BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB_PRE);
Graphics2D g2d = img.createGraphics();
g2d.drawImage((java.awt.Image)pg.image, 0, 0, width, height, this);
g2d.finalize();
g2d.dispose();
return img;
}
Solución
Creo que es justo restricciones de seguridad del applet que le impide modificar el sistema de archivos en la máquina cliente.
Tome un vistazo a FileSaveService en JNLP. Esto puede ser usado desde un applet firmado a guardar un archivo en el sistema de archivos en la máquina cliente.
Si está intentando escribir en un directorio en el servidor de un applet, no se puede hacer esto directamente. Lo que se necesita para crear un formulario de carga en el servidor y tal vez usar HttpURLConnection
para enviar una solicitud POST al servidor.