2010-07-16 57 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