实际上,我正在尝试使用jsp/struts2框架创建一个在线图像编辑器。 我使用 imageIO.write() 方法来编写通过我创建的各种过滤器处理的缓冲图像。现在问题是我必须在同一页面上显示该图像。到目前为止,我已经做了很多。
{
File imagefile = new File("C:/Users/Documents/NetBeansProjects/project/web/images/"+img+"");
image = ImageIO.read(imagefile);
ImageFlipps imgflip=new ImageFlipps(image); /* image filter class that takes a bufferedimage and return a processed bufferedImage. */
imgflip.setBufferedImages();
BufferedImage img2= imgflip.vhIImageFlipps(); // returned buffered image.
ImageIO.write(img2, "jpg", new File("C:/Users/Documents/NetBeansProjects/project/web/images/new.jpg")); // writing image to some specific folder.
}
在同一页面的此代码下方,我尝试使用图像标签显示保存的图像,但它没有显示图像。
<img src="C:/Users/Documents/NetBeansProjects/project/web/images/new.jpg" alt="image not found" />
一个简单的逻辑,但不起作用。请帮助我..自过去 2 周以来一直遇到此问题。
不确定环境的其余部分是什么样子的(即您拥有哪些 servlet 或过滤器),但如果它是一个 Web 应用程序,我不知道您为什么要将东西写入您的私有本地磁盘!(除了文件路径硬编码到 NetBeans 文件夹这一事实之外,因此当您将应用程序部署到其他位置时,它们将不起作用)。
由于图像本身不是页面,因此我会将您的代码放在一个简单的 servlet 中。doGet()
方法是放置代码的正确位置。但是,您需要将其流式传输到浏览器,而不是写入硬盘上的文件。
所以像这样:
response.setContentType("image/jpeg");
OutputStream out = response.getOutputStream();
ImageIO.write(img2, "jpg", out);
out.close()
response
是传递给doGet()
方法的HttpServletResponse
。
在您的页面上,您的 <img>
标记应映射到路由到您的 servlet(通过 web.xml 映射)的 URL。所以像这样:
<img src="http://www.yoursite.com/yourapp/imageserv">
如果您需要处理不同的图像或确定要渲染的图像,则需要传递 URL 参数,例如:
<img src="http://www.yoursite.com/yourapp/imageserv?image=imageid">
在您的doGet()
方法中,您检查 HttpServletRequest
中的 URL 参数 .