キャンバスを使用して、実装の画像にタイル状の透かしを追加することを教える手
2022-01-29 21:08:45
最近、あるプロジェクトで、画像にタイル状の透かしを入れるという要件に出くわしました。
このような効果
キャンバスを触ったことがなかったので、この機能をやるときは一歩一歩勉強しながらやったのですが、その過程もやはりなかなかいい感じでしたね。
この機能はcanvasの基本的なapiが必要で、原理は関係ないので、ここにjsのコードを掲載することにします
var img = new Image();
// Because the business in my project is to add watermarks to Taobao images, so here's a Taobao product's main image
img.src = 'https://gd4.alicdn.com/imgextra/i3/155/O1CN01XKkJqL1D11wYZbeI2_! ! 155-0-lubanu.jpg_400x400.jpg';
img.onload = () => {
// Prepare the canvas environment
var canvas = document.getElementById("myCanvas");
var ctx = canvas.getContext("2d");
// Draw the image to the canvas first
ctx.drawImage(img, 0, 0, 200, 200);
// draw the watermark to the canvas
for (let i = 0; i < 20; i++) {
ctx.rotate((-45 * Math.PI) / 180); // initial watermark deflection angle
ctx.font = "20px microsoft yahei";
ctx.fillStyle = "rgba(0,0,0,0.5)";
ctx.fillText("mmmmmmmmmmmmmmmmmmmmmmmmmmmm",-300,i * 25);
ctx.rotate((45 * Math.PI) / 180); // adjust the watermark deflection angle to the original, otherwise he will keep turning
}
html
<canvas
height="200"
id="myCanvas"
width="200"
>Your browser does not support watermarks, please open </canvas>. with Google Chrome;
この時、試してみて、エラーが報告された場合
Failed to execute 'toDataURL' on 'HTMLCanvasElement': Tainted canvases may not be exported.
ググってみたところ、画像のクロスドメインの問題が原因だと判明したのですが、どうすれば直るのでしょうか?
新規に作成したimgに属性を追加するだけです。
img.setAttribute("crossorigin", "crossorigin");
つまり、新しいimgのコードのjsの部分は次のようになります。
var img = new Image();
// Since my business in the project is to add watermarks to Taobao images, here's the main image of a Taobao product
img.setAttribute("crossorigin", "crossorigin");// This code is to solve the cross-domain problem, if your image is your own, there is no cross-domain problem can be removed
img.src = 'https://gd4.alicdn.com/imgextra/i3/155/O1CN01XKkJqL1D11wYZbeI2_! !155-0-lubanu.jpg_400x400.jpg';
次に、完成品をご覧ください。
素晴らしい作品です。
この記事が参考になれば幸いです。また、スクリプト・ハウスを応援していただけると幸いです。
関連
-
window.postMessage を用いた html5 のクロスドメインデータインタラクション
-
シェアボタン付きAmazeUIボトムナビゲーションバー用サンプルコード
-
HTML5ジャンプアプレット wx-open-launch-weapp サンプルコード
-
音声付き動画の自動再生機能の実装方法
-
画像処理におけるキャンバスの活用
-
html5で漢字にピンインを付加するプログレスバーコード
-
入力ボックスの種類が数字のときに上下の矢印を消すHTML5メソッド
-
data:画像データのurlファイルをBlobアップロードバックエンドメソッドに渡す。
-
画像リソースが同一ドメイン下にないために、キャンバスがクロスドメインで汚染される場合の解決策
-
モバイル開発 HTML5 ボタンをクリックすると、ページがちらついたり、背景が黒くなったりする問題
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
html+cssでメニューバーのスロードロップダウン効果を実現するコード例
-
html5ジャンプアプレット wx-open-launch-weappは落とし穴に踏み込んだ
-
AmazeUIのJSフォーム検証フレームワークの動作を公開
-
キャンバス描画の解像度が拡大され、ぼやけた状態になる
-
4種類のプログラムの画面適応に応じたモバイルh5ページを説明する。
-
HTML5でオプションのスタイルシートを使ってWebサイトやアプリケーションにダークモードを追加する方法を解説
-
HTML5新フォームコントロールとフォームプロパティのサンプルコード詳細
-
html5 canvasによる画像圧縮のサンプルコード
-
HTML5 モバイルポップアップアニメーション効果
-
キャンバスでDVDスタンバイのアニメーションを作成するコード