【问题标题】:How rotate image and save it from JSP/Servlet page如何旋转图像并从 JSP/Servlet 页面保存
【发布时间】:2014-01-30 19:29:37
【问题描述】:

我能够成功地使用 JQueryRotate 在 JSP 页面中旋转我的图像。 但是,用户现在希望能够保存旋转后的图像。

但从我目前收集到的信息来看,似乎不可能做到这一点。所以我可能不得不从头开始。

是否可以为在 JSP/Servlet 中呈现的图像进行旋转图像并保存功能?如果是,怎么做?

编辑:顺便说一句,HTML5 是不可能的,因为我的要求是仍然支持 IE9。

【问题讨论】:

  • 你的意思是保存旋转后在浏览器中渲染的图像?作为jpg或png或whatelse?
  • 是的。将其保存为 png 很好。有什么想法吗?
  • 似乎是一个骗局。 stackoverflow.com/q/16318629/3183018
  • 好吧,正如@user3183018 指出的那样,有一个答案,答案是否定的。可预测 - 图片在客户端。我只是想确保我很好地理解了这个问题并且没有遗漏任何内容。
  • @ThrashBean:从我链接的答案来看,如果可以使用 HTML5 画布似乎是可能的。

标签: java javascript jquery jsp servlets


【解决方案1】:

好吧,总结一下。使用非 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 设置为要写入的文件,然后将图像文件发送回浏览器。这种方法有一个缺点——如果你有滚动,窗口外的部分(比如说“滚动出去”)将不会被捕获。好吧,事实上它有很多缺点,但这就是我所拥有的,你可以做一些研究。希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-27
    • 1970-01-01
    相关资源
    最近更新 更多