標籤:

為什麼 Chrome 上複製 GIF 圖片只能複製一幀?


複製時候執行這裡的代碼writeImage

https://code.google.com/p/chromium/codesearch#chromium/src/webkit/glue/webclipboard_impl.ccq=ScopedClipboardWritersq=package:chromiumtype=csl=208

if (!image.isNull()) {
const SkBitmap bitmap = image.getSkBitmap();
SkAutoLockPixelslocked(bitmap);
scw.WriteBitmapFromPixels(bitmap.getPixels(), image.size());
}

可以看到其實是寫了個Bitmap點陣圖,然後這裡轉發

https://code.google.com/p/chromium/codesearch#chromium/src/ui/base/clipboard/clipboard_win.ccq=clipboard%20Imagesq=package:chromiumtype=csl=239

for (ObjectMap::const_iterator iter = objects.begin();
iter != objects.end(); ++iter) {
DispatchObject(static_cast&(iter-&>first), iter-&>second);
}

https://code.google.com/p/chromium/codesearch#chromium/src/ui/base/clipboard/clipboard.ccsq=package:chromiumtype=csl=229

case CBF_BITMAP:
if (!ValidatePlainBitmap(params))
return;

WriteBitmap((params[0].front()), (params[1].front()));
break;

WriteBitmap就沒什麼好說的了

https://code.google.com/p/chromium/codesearch#chromium/src/ui/base/clipboard/clipboard_win.ccsq=package:chromiumtype=csl=293

所以最後剪貼板里就有了點陣圖,但是因為chrome的文件有sanbox機制,無法直接把沙箱機制內的文件路徑設置到剪貼板的CF_HDROP里

其實QQ的判斷是如果剪貼板里有CF_BITMAP,還有CF_HDROP,就會根據CF_HDROP里的路徑來顯示動態gif,如果沒有CF_BITMAP,就當作傳輸文件。

由於CF_BITMAP其實對QQ沒什麼用,估計是IDataObject介面里只是當作標誌位判斷下,所以其實創建一張1像素的Bitmap就可以了。(我的chrome插件的實現里就是這樣)

插件地址: copygif.zip | 新浪微盤


  1. Chrome 23 之後在新標籤打開的圖片由於添加了[-webkit-user-select: none;] 無法選中圖片了。

  2. 安裝插件太煩。

  3. 那就直接拖動到聊天窗口吧,請看動畫演示:

    http://img02.taobaocdn.com/tps/i2/T1NhmJXqJcXXbyGVMq-499-359.gif

至於為什麼不能複製 GIF 呢?因為 Windows 的剪切板是不支持複製動態的 GIF的,IE之所以支持複製動態的 GIF是因為用了專門的 dll 文件進行處理,在複製 GIF 的時候其實是拷貝了很多相關的信息。


安裝一個插件IETab

https://chrome.google.com/webstore/detail/ie-tab/hehijbfgiekmjfkfjpbkbammjbdenadd

複製的時候在GIF圖片上右鍵選擇「在新標籤頁中打開圖片」

然後在新打開的標籤頁中啟用IETab

由於IE內核的瀏覽器可以直接複製GIF圖片,這個時候就可以直接在chrome上用右鍵複製GIF圖片了

此時(chrome23)是無法選中該圖片的,

而直接在網頁中選取,如果GIF圖片的周圍比較清爽那還好,要是還有一些雜七雜八的文字或別的東西

選中的時候就可能選中一些垃圾內容了,而且貌似還需要緩衝一段時間才能把GIF圖片完全複製下來


選取gif圖片,直接熱鍵ctrl+C即可複製全幀


2個最簡單的方法:

1.直接把GIF拖到QQ

2.先選中gif(跟複製文字時反色選中那樣),然後ctrl+c, 然後在目的地ctrl+v。


神特么的知乎,怎麼什麼都知道啊,然而我還是不明覺厲


要選中複製就沒問題了,如果只是單純右鍵複製就只能複製的靜態的。(選文字一樣的選中。)http://www.gifcool.com 你可以去這裡試試


推薦閱讀:

為什麼時常會遇到 Chrome 死機的情況?
Chrome 如何修改字體?
為什麼 IE、Firefox、Chrome 等瀏覽器一直不默認支持滑鼠手勢?
為什麼喜歡用 Google Chrome 瀏覽器?與 Internet Explorer 相比呢?
為什麼谷歌要支持 Chromium 這個 Chrome 對應的開源項目?

TAG:GoogleChrome | GIF |