从剪贴板获取打印屏幕图像

3

有没有一种方法可以通过键盘获取屏幕截图?比如说我有一个图片托管网站,想要一个功能,用户可以粘贴一张图片并通过这种方式进行托管。这种可能吗?

很抱歉这个问题描述得很模糊。

编辑:是否有一些第三方插件可以实现这个功能?有没有现有的Firefox插件可以做类似的事情?

5个回答

2
似乎在HTML 5中使用Canvas元素将成为可能,详见这个问题。 在Flash中似乎不可能,但在Adobe Air中可以。详见这个问题

2

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

请查看ClipboardService接口。

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

更新:我刚刚发现,为了使用ClipboardService ,小程序并不需要被签名,但是用户仍然会在第一次使用时看到警告提示信息。


0

我有一个小程序可以完美地解决这个问题。

当用户按下打印屏幕的快捷键时,该小程序将会从剪贴板中复制图像,对其进行格式化,并上传到服务器。

这是从剪贴板中获取图像的类,如果你需要其他格式化和上传到服务器的代码,请告诉我。

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;
    }
}
}

我假设你的小程序需要签名? - finnw
不确定是否有一种方法可以在没有签名小程序的情况下使用AccessController,我认为如果没有对小程序进行签名,您将被限制在沙盒权限中,除非您编辑客户端机器上的策略文件,但这是不好的做法。 - Keibosh

0
据我多年对JavaScript和Flash的了解,我认为这是不可能的。Flash和JavaScript都没有让你深入系统的权限。(而且,作为一个用户,如果他们能随意读取我的剪贴板,我也不会喜欢!)

+1 对于允许网站访问您的剪贴板要保持谨慎,这让人想起以前通过Flash进行的剪贴板漏洞。 - Chris Thornton

0

实现这一功能的两个产品是JiraYoutrack。它们都使用Java Applet。 在制作您的系统时,可以将这些产品的图形用户界面作为灵感。 我特别喜欢YouTrack的无需预览从剪贴板中获取图像,在其中您不需要直接与小程序进行交互。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接