好吧,总结一下。使用非 HTML5 浏览器 - 无法将修改后的图片保存在客户端。在现代浏览器中 - 您可以尝试保存包含图像的画布。您还可以跟踪 css 转换,并根据需要渲染转换后的图像,但这是服务器端,只会显示旋转的图像,而不是保存它。您可以做的其他事情是当用户要求保存操作时将转换后的图像发送到服务器,使用服务器端的图像处理软件/库旋转/转换图像并将新图像发送回客户端。这可以工作,例如 php 有一些图像库。顺便说一句,一些社交网站共享图像,但我认为,当用户上传图像并将其保存在服务器上时,所有转换(如果有)(裁剪、剪切、调整大小、旋转......)都是在服务器上进行的。 BTW (2) 前段时间在一个 J2EE 应用程序中,由于用户需求,我们不得不做这样的事情 - 将浏览器中呈现的图像保存到客户端机器。将尝试挽救这个想法,如果有有趣的东西会发布它。
已编辑
这是我们之前为保存屏幕截图而编写的一些代码:
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 设置为要写入的文件,然后将图像文件发送回浏览器。这种方法有一个缺点——如果你有滚动,窗口外的部分(比如说“滚动出去”)将不会被捕获。好吧,事实上它有很多缺点,但这就是我所拥有的,你可以做一些研究。希望这会有所帮助。