画像にタイル状の透かしを追加するためのhtml5キャンバス
2022-01-29 23:35:09
最近、あるプロジェクトで、画像にタイル状の透かしを入れるという要件に出くわしました。
このような効果
というのも、私はそれまでcanvasを触ったことがなかったからです。ですから、この作業をするときは、一歩一歩、理解しながら学んでいくプロセスでした。それでも、この機能を実装するために一歩一歩私についてきて、canvasの落とし穴をいくつか発見するというのは、かなりいいプロセスだったと思います。
この機能は、canvasの基本的なapiが必要で、原理は関係ないので、jsのコードをここに掲載します。
var img = new Image();
// Because the business in my project is to add a watermark 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"
>
お使いのブラウザはウォーターマークをサポートしていません。Google Chromeで開いてください </canvas>
この時、試してみて、エラーが報告された場合
HTMLCanvasElement' で 'toDataURL' の実行に失敗しました。汚染されたキャンバスはエクスポートされない可能性があります。
ググってみたところ、画像のクロスドメインの問題が原因らしいのですが、どうすれば直るのでしょうか?
新規に作成した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';
次に、完成品をご覧ください。
概要
上記は、画像にタイル状の透かしを追加するための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 実装 サイバーパンク風ボタン
おすすめ
-
html5 直交ハート型曲線の実装
-
ログイン期限切れでIframフレームワークから飛び出す方法を説明する
-
動画下の自動再生プロパティが無効な場合の解決方法(ミュートプロパティを追加する)。
-
携帯電話のHtml5を達成するためにカメラのメソッドを呼び出すには
-
iPhoneXの画面適応 WeChatアプリとH5でセーフエリア下部の小さな黒いバー
-
モバイルやWeChatでHTML5の音声が自動再生されない問題を解決。
-
ページ上部へのスムーズなスクロールを実現する3つの方法
-
キャンバスアプレットでテキストのアンカーポイントを中央に設定する
-
モバイルウェブの画像プリロード方式について簡単に紹介します。
-
HTML5によるメッセージ通知の利用(Web Notification)