【问题标题】:Applet not creating image file via ImageIO.write小程序不通过 ImageIO.write 创建图像文件
【发布时间】:2011-01-10 23:21:35
【问题描述】:

我一直在努力解决一个涉及我想用来创建图像文件(到服务器端目录)的处理草图的问题。在 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;
}

【问题讨论】:

  • 当我改变它时没有发现异常。小程序运行正常,但目录中没有生成图像文件。另一个奇怪的是,当它是一个草图时,如果路径只是“file.png”它实际上会在父目录中创建文件,因此我必须将路径声明为“./sketch/file.png”来保留它在与草图相同的目录中。当我将它导出为小程序时,如果我将其更改为“./applet/file.png”或只是“file.png”,它仍然无处可见。
  • 试过了。作为草图运行时返回 true,.png 文件成功创建。作为小程序运行时,我仍然没有收到任何错误。
  • 小程序无法访问服务器端文件。如果你想这样做,你必须编写一个 servlet。

标签: java file applet javax.imageio next-generation-plugin


【解决方案1】:

我认为这只是小程序安全限制,阻止您修改客户端计算机上的文件系统。

看看 JNLP 中的FileSaveService。这可以在未签名的小程序中用于将文件保存到客户端计算机上的文件系统中。

如果您尝试从小程序写入服务器 上的目录,则不能直接执行此操作。您需要在服务器上创建一个上传表单,并可能使用HttpURLConnection 向服务器发送 POST 请求。

【讨论】:

  • 那么 ImageIO.write 是完全错误的方法来完成这个吗?我见过一些解决方案,例如将 BufferedImage 编码为 Base64String,然后由 PHP 接收和解码。这是将 BufferedImage POST 到 PHP 以由服务器上传的正确方法吗?
  • @Scott,使用ImageIO.write 编码图像没有错,但您需要将其发送到HttpURLConnection 或字节数组而不是文件。看看this questionthis one 的答案。
  • 非常感谢大家的知识礼物。可能对我的问题最有希望的解决方案就是这个。 stackoverflow.com/questions/1889881/…
猜你喜欢
  • 1970-01-01
  • 2022-08-16
  • 2016-06-10
  • 2014-06-04
  • 1970-01-01
  • 2011-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多