Апплет не создает файл изображения через ImageIO.write - PullRequest
2 голосов
/ 11 января 2011

Я столкнулся с проблемой, связанной со эскизом обработки, который я хочу использовать для создания файла изображения (в каталог на стороне сервера). В Java я использую PImage холста, преобразованного в BufferedImage, который затем создается в виде файла через ImageIO.write.

Он успешно создает файл при запуске в моей системе в виде эскиза, файл file.png появляется в той же папке, что и программа. Проблема в том, что когда программа экспортируется как апплет, она больше не создает файл. Было бы здорово, если бы у кого-то было мнение, почему эскиз программы может создать изображение, а апплет - нет.

Вот пара фрагментов того, что я использую, если это поможет. Спасибо всем.

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); }

А вот метод, который преобразует PImage в 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;
}

1 Ответ

1 голос
/ 11 января 2011

Я думаю, что это просто ограничения безопасности апплета, мешающие вам изменять файловую систему на клиентском компьютере.

Взгляните на FileSaveService в JNLP. Это можно использовать из неподписанного апплета для сохранения файла в файловой системе на клиентском компьютере.

Если вы пытаетесь записать в каталог на сервере из апплета, вы не можете сделать это напрямую. Вам нужно будет создать форму загрузки на сервере и, возможно, использовать HttpURLConnection для отправки запроса POST на сервер.

...