1. Blob のメディア タイプは、「image/svg xml
」である必要があります。
2. svg 要素が必要です
3. の中に # を挿入します。 svg要素 ##foreignObject Element
nbsp;html> <meta> <title>Document</title> <canvas> </canvas> <script> var canvas = document.getElementById('canvas'); var ctx = canvas.getContext('2d'); var data = '<svg xmlns="http://www.w3.org/2000/svg" width="200" height="200">' + '<foreignObject width="100%" height="100%">' + '<div xmlns="http://www.w3.org/1999/xhtml" >' + '<em>I like ' + '<span >' + 'cheese' + '' + '' + ''; var DOMURL = window.URL || window.webkitURL || window; var img = new Image(); var svg = new Blob([data], {type: 'image/svg+xml'}); var url = DOMURL.createObjectURL(svg); img.onload = function() { ctx.drawImage(img, 0, 0); DOMURL.revokeObjectURL(url); } img.src = url; </script>コードをコピーして実行します。すごいですね。ブラウザ上に 2 行のクールなワード アートが表示されます。 えっと、dom を Canvas に変換するのはとても簡単だということがわかりましたか?次に
document.body.innerHTML を使用して本文内の DOM をすべて取り出して、foreignObject 要素に配置します。これでページ全体がインターセプトされます。
nbsp;html> <meta> <title>Document</title> <style> .container { color: red; } </style> <div> Hello World! </div> <canvas> </canvas> <script> var canvas = document.getElementById('canvas'); var ctx = canvas.getContext('2d'); var data = '<svg xmlns="http://www.w3.org/2000/svg" width="200" height="200">' + '<foreignObject width="100%" height="100%">' + '<div xmlns="http://www.w3.org/1999/xhtml" >' + document.querySelector('.container').innerHTML + '' + '' + ''; var DOMURL = window.URL || window.webkitURL || window; var img = new Image(); var svg = new Blob([data], {type: 'image/svg+xml'}); var url = DOMURL.createObjectURL(svg); img.onload = function() { ctx.drawImage(img, 0, 0); DOMURL.revokeObjectURL(url); } img.src = url; </script>外部スタイルは有効にならないため、JS を通じてすべての dom 要素をトラバースし、element.style オブジェクトを通じてすべてのスタイルをインライン スタイルに追加できます。このアイデアは良さそうですが、外部スタイルをインライン スタイルに変換する関数を実際に書くことはできません。需要は逼迫しており、あれこれいじる時間はあまりないので、既製のライブラリを探したいと思います。そこで、もう一度Googleに行きました。幸いなことに、すぐに html2canvas というライブラリを見つけました。これは素晴らしいライブラリで、非常に強力ですが、使い方はとても簡単です。このような簡単な方法で、ページ全体のスクリーンショットを撮ることができます:
function convertHtml2Canvas() { html2canvas(document.body, { allowTaint: false, taintTest: true }).then(function(canvas) { document.body.appendChild(canvas); }).catch(function(e) { console.error('error', e); }); }Currentlyもう 1 つ問題があり、このメソッドはデフォルトでページ全体をインターセプトします (つまり、innerHeight と innerWidth を境界として使用し、多くの空白スペースが発生します)。ただし、私のデッキはごく一部しか占めていません。ページのデッキ部分だけが欲しいです。実際、キャンバスがすでにある場合は、それを加工することができるので、扱いが簡単です。一般的な考え方は次のとおりです。 1. 上記で取得した Canvas オブジェクトを Blob に変換し、それを img 要素に置きます。次に、img.src をキャンバスに描画します。現時点では、
canvas.drawImage メソッドを呼び出すと、必要なコンテンツをインターセプトできます。次の 2 つの関数は、キャンバスを画像に、またはその逆に変換します。
// Converts canvas to an image function convertCanvasToImage(canvas) { var image = new Image(); image.src = canvas.toDataURL("image/png", 0.1); return image; } // Converts image to canvas; returns new canvas element function convertImageToCanvas(image, startX, startY, width, height) { var canvas = document.createElement("canvas"); canvas.width = width; canvas.height = height; canvas.getContext("2d").drawImage(image, startX, startY, width, height, 0, 0, width, height); return canvas; }次に、上で書いた ConvertHtml2Canvas を次のように変更します。
function convertHtml2Canvas() { html2canvas(document.body, { allowTaint: false, taintTest: true }).then(function(canvas) { var img = convertCanvasToImage(canvas); document.body.appendChild(img); img.onload = function() { img.onload = null; canvas = convertImageToCanvas(img, 0, 0, 384, 696); img.src = convertCanvasToImage(canvas).src; $(img).css({ display: 'block', position: 'absolute', top: 0, left: 400 + 'px' }); } }).catch(function(e) { console.error('error', e); }); }この時点で、ページのコンテンツの一部が傍受される可能性があります。この効果は、デッキ共有テスト ページのようなものです。ページの左側は DOM 構造、右側は html2canvas を使用して変換された画像です。
以上がJavaScriptを使用してスクリーンショット機能を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。
声明
この記事は亿速云で複製されています。侵害がある場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事
R.E.P.O.説明されたエネルギー結晶と彼らが何をするか(黄色のクリスタル)
3週間前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最高のグラフィック設定
3週間前By尊渡假赌尊渡假赌尊渡假赌
アサシンのクリードシャドウズ:シーシェルリドルソリューション
2週間前ByDDD
R.E.P.O.誰も聞こえない場合はオーディオを修正する方法
3週間前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:Myriseのすべてのロックを解除する方法
3週間前By尊渡假赌尊渡假赌尊渡假赌

ホットツール

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

WebStorm Mac版
便利なJavaScript開発ツール

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター
