Copy image to clipboard

后端 未结 7 2399
抹茶落季
抹茶落季 2020-11-27 16:14

Seemingly, you can\'t (yet) programmatically copy an image to the clipboard from a JavaScript web app?

I have tried to copy a text in clipboard , and it\'s worked.<

7条回答
  •  挽巷
    挽巷 (楼主)
    2020-11-27 17:01

    Well, this is my first post in here with an answer i guess :)

    Actually i'm currently using cefsharp web browser component one of my project, cefsharp run on chrome based browser and i want to copy img element one of webpage

    With cefsharp you can manipulate browser only javascript, so i think we can handle it with using canvas element.

    /*
      'cause of lorempixel timeout, i used img onload function.
    */
    
    function copyImage() {
      var imgCap = document.getElementById('imgCap');
      var imgCanvas = document.createElement('canvas');
    
      imgCanvas.id = 'imgCanvas';
      imgCanvas.height = 40;
      imgCanvas.width = 120;
    
      document.body.appendChild(imgCanvas);
      var originalContext = imgCanvas.getContext('2d');
      originalContext.drawImage(imgCap, 0, 0);
    
      //return imgCanvas.toDataURL();
    }
    
    //document.onload = copyImage();

    with return imgCanvas.toDataURL(); you can get base64 encoded value and use wherever you want.

    this is my cefsharp code, it's working.

            string copyImageOtClipboardScript = "(function(){ try{var imgCap = document.getElementById('imgCap'); var imgCanvas = document.createElement('canvas'); imgCanvas.id = 'imgCanvas'; imgCanvas.height = 40; imgCanvas.width = 120; document.body.appendChild(imgCanvas); var originalContext = imgCanvas.getContext('2d'); originalContext.drawImage(imgCap, 0, 0); return imgCanvas.toDataURL();  }catch(e){ alert(e); } })();";
    
            var task = chromeBrowser.EvaluateScriptAsync(copyImageOtClipboardScript).ContinueWith(x =>
            {
                var resp = x.Result;
    
                if (resp.Success)
                {
                    this.Invoke((MethodInvoker)delegate
                    {
                        Bitmap bmp = null;
                        string captchaResult = "", captchaBase64;
    
                        var bytes = Convert.FromBase64String(resp.Result.ToString().Replace("data:image/png;base64,", ""));
                        using (var imageFile = new FileStream("temp_captcha.png", FileMode.Create))
                        {
                            imageFile.Write(bytes, 0, bytes.Length);
                            imageFile.Flush();
                        }
    
                    });
                }
            });
    

提交回复
热议问题