1. ホーム
  2. Web制作
  3. html5

キャンバスを使用して、実装の画像にタイル状の透かしを追加することを教える手

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';

次に、完成品をご覧ください。

素晴らしい作品です。

この記事が参考になれば幸いです。また、スクリプト・ハウスを応援していただけると幸いです。