2010-07-16 58 views
3

有没有办法从键盘获取打印屏幕图像?比方说,我有一个图片托管站点,并且想要一个功能,用户可以在图片中粘贴,并以这种方式托管它。那可能吗?从剪贴板获取打印屏幕图像

对不起,这是一个模糊的问题。

编辑:有可能与某种第三方插件?有没有现有的Firefox插件可以做类似的事情?

回答

2

它看起来好像是要使用Canvas元素在HTML 5中可以使用。请参见this question.

在Flash中似乎不可能,但在Adobe Air中可能。见this question

0

不,据我所知,从Javascript和Flash多年的知名度来看,这可能是而不是。 Flash和JavaScript都不能让你深入挖掘系统。 (另外,如果用户可以随意阅读我的剪贴板,我将不会喜欢它!)

+0

+1对于允许网站访问剪贴板的正确偏执。这通过闪回带回之前的剪贴板漏洞。 – 2010-07-16 17:25:35

2

A signed Java applet可以访问剪贴板。请参阅ClipboardService界面。

用户第一次加载页面时,他们将看到一个消息框,要求获得访问剪贴板的权限。

更新我才发现,原来小程序不需要以使用ClipboardService要签名,不过用户仍然可以看到警告信息的第一次。

0

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

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

这是从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; 
    } 
} 
} 
+0

我假设你的applet需要签名? – finnw 2010-07-31 19:22:49

+0

是的,除非您在客户端计算机上编辑策略文件,这是不好的做法,否则不确定是否有办法在没有签名的小程序的情况下使用AccessController,我相信没有签署小程序就会陷入沙箱权限。 – Keibosh 2010-08-02 16:44:59