【问题标题】:Get the print screen image from the clipboard从剪贴板获取打印屏幕图像
【发布时间】:2011-03-16 21:03:20
【问题描述】:

有没有办法从键盘获取打印屏幕图像。例如,我有一个图像托管站点,并且想要一个功能,用户可以粘贴图像并以这种方式简单地托管它。这可能吗?

抱歉,这个问题太模糊了。

编辑:是否可以使用某种第三方插件?是否有任何现有的 Firefox 插件可以做类似的事情?

【问题讨论】:

    标签: java javascript flash clipboard


    【解决方案1】:

    在 HTML 5 中使用Canvas 元素似乎是可能的。见this question.

    这在 Flash 中似乎是不可能的,但在 Adob​​e Air 中似乎是不可能的。见this question

    【讨论】:

      【解决方案2】:

      不,据我多年对 Javascript 和 Flash 的了解,这是不可能可能的。 Flash 和 JavaScript 都无法让您深入了解系统。 (另外,如果他们可以随意阅读我的剪贴板,我作为用户不会喜欢它!)

      【讨论】:

      • +1 表示对允许网站访问您的剪贴板持偏执态度。这让人们回忆起以前通过 Flash 进行的剪贴板攻击。
      【解决方案3】:

      签名的 Java 小程序可以访问剪贴板。

      看看@987654321@界面。

      用户第一次加载页面时,他们会看到一个消息框,询问是否允许访问剪贴板。

      更新我刚刚发现小程序确实不需要需要签名才能使用ClipboardService,尽管用户第一次看到警告消息.

      【讨论】:

        【解决方案4】:

        我有一个小程序可以做到这一点。

        用户点击打印屏幕,小程序从剪贴板复制图像,格式化并上传到服务器。

        这是从 CB 中获取它的类,如果您想要格式化并上传到服务器的其余部分,请告诉我。

        import java.awt.Image;
        import java.awt.Toolkit;
        import java.awt.datatransfer.Clipboard;
        import java.awt.datatransfer.DataFlavor;
        import java.awt.datatransfer.Transferable;
        import java.awt.datatransfer.UnsupportedFlavorException;
        import java.io.IOException;
        import java.security.AccessController;
        import java.security.PrivilegedAction;
        
        public class ImagefromCB
        {
        // If an image is on the system clipboard, this method returns it;
        // otherwise it returns null.
        public Image getImageFromClipboard()
        {
        
            Clipboard systemClipboard = (Clipboard) AccessController.doPrivileged(new PrivilegedAction() {
                public Object run() 
                {
                    Clipboard tempClipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
                 return tempClipboard;
                }
            });
        
            // get the contents on the clipboard in a 
            // Transferable object
            Transferable clipboardContents = systemClipboard.getContents(null);
        
            // check if contents are empty, if so, return null
            if (clipboardContents == null)
                return null;
            else
                try
                {
                    // make sure content on clipboard is 
                    // falls under a format supported by the 
                    // imageFlavor Flavor
                    if (clipboardContents.isDataFlavorSupported(DataFlavor.imageFlavor))
                    {
                        // convert the Transferable object
                        // to an Image object
                        Image image = (Image) clipboardContents.getTransferData(DataFlavor.imageFlavor);
                        return image;
                    }
                } catch (UnsupportedFlavorException ufe)
                {
                    ufe.printStackTrace();
                } catch (IOException ioe)
                {
                    ioe.printStackTrace();
                }
            return null;
        }
        
        public Image getCBImage()
        {
            System.out.println("Copying image from system clipboard.");
            Image image = getImageFromClipboard();
            if (image != null)
            {
                return image;
            } else
            {
                System.out.println("No Image found on Clipboard");
                return null;
            }
        }
        }
        

        【讨论】:

        • 我认为您的小程序需要签名?
        • 是的,不确定是否有办法在没有签名小程序的情况下使用 AccessController,我相信如果不签署小程序,您就会陷入沙盒权限,除非您在客户端上编辑策略文件机器这是不好的做法。
        【解决方案5】:

        这两种产品是JiraYoutrack。两者都使用 Java Applet。 在制作系统时,您可以使用这些产品的 GUI 作为灵感。 我特别喜欢 YouTracks Image from Clipboard Without Preview,你不需要直接与小程序交互。

        【讨论】:

          猜你喜欢
          • 2011-11-05
          • 1970-01-01
          • 2013-02-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-07-08
          • 2012-05-17
          • 1970-01-01
          相关资源
          最近更新 更多