我能够成功使用JQueryRotate在JSP页面中旋转我的图像。 但是,用户现在希望能够保存旋转的图像。
但是从目前为止我收集到的内容来看,似乎不可能做到这个客户端。所以我可能需要从头开始重新开始。
是否可以对JSP / Servlet中呈现的图像执行具有保存功能的旋转图像?如果是,怎么样?
编辑:顺便说一句,HTML5不在问题中,因为我的要求是仍然支持IE9。答案 0 :(得分:0)
好吧,只是为了sumarize。使用非HTML5浏览器 - 无法将修改后的内容保存在客户端图片上。在现代浏览器中 - 您可以尝试保存包含图像的画布。此外,您可以跟踪css trasformation,并根据需要渲染转换后的图像,但这是服务器端,只显示旋转的图像,而不是保存它。您可以做的其他事情是当用户请求保存操作时将转换后的图像发送到服务器,使用服务器端的图像处理软件/库来旋转/转换图像,并将新图像发送回客户端。这可能有用,例如php有一些图像库。顺便说一句,一些社交网站共享图像,但我认为,当用户上传图像并将其保存在服务器上时,所有转换(裁剪,剪切,调整大小,旋转......)都在服务器上进行。 BTW(2)前一段时间,在J2EE应用程序中,由于用户需求,我们不得不做这样的事情 - 将在浏览器中呈现的图像保存到客户机。将尝试拯救这个想法,如果有什么有趣的东西会发布它。
<强> EDITED 强> 以下是我们之前为保存屏幕截图而制作的一些代码:
import java.awt.AWTException;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.io.OutputStream;
import javax.imageio.ImageIO;
public class Screenshot {
public Screenshot() {
}
public static void imageCapture(int left, int top, int width, int height, String outFileName, String imgFormat) {
if (!outFileName.toUpperCase().endsWith(imgFormat)) {
outFileName += "." + imgFormat;
}
try {
Robot robot = new Robot();
BufferedImage bi = robot.createScreenCapture(new Rectangle(left, top, width, height));
ImageIO.write(bi, imgFormat, new File(outFileName));
}
catch (AWTException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}
}
public static void imageCapture(int left, int top, int width, int height, OutputStream outStream, String imgFormat) {
try {
Robot robot = new Robot();
BufferedImage bi = robot.createScreenCapture(new Rectangle(left, top, width, height));
ImageIO.write(bi, imgFormat, outStream);
}
catch (AWTException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}
}
}
如您所见,我们使用了java.awt。将完整文件路径或已准备好的OutputStream设置为要写入的文件,然后将图像文件发送回浏览器。这种方法有一个缺点 - 如果你有滚动,窗外的部分(比如说“滚出”)就不会被捕获。事实上,它有许多缺点,但这就是我所拥有的,你可以做一些研究。希望这会有所帮助。