html5でcanvasを使用した場合に赤い背景に文字の形に透明くり抜きを行いたいです。
ctx.fillStyle = "rgb(200, 0, 0)";
ctx.fillRect(0, 0, 100, 100);
ctx.clearRect(20, 30, 60, 40); ★ここがRectでなく文字の切り抜きにしたい。
イメージ的にはclearText()というのがあればいいのになぁ、という感じです。
パスをmoveToで文字の形にうごかして、clipしなさーい
という回答はご勘弁を(^^;)
No.3ベストアンサー
- 回答日時:
.globalCompositeOperationを使ってみてください。
<script>
//前略
ctx.fillStyle = "rgb(200, 0, 0)";
ctx.fillRect(0, 0, 100, 100);
//マスキング(?)してテキスト描画
ctx.globalCompositeOperation='destination-out';
ctx.fillText('Hello world', 20, 30);
ctx.globalCompositeOperation='source-over'; //マスクを戻す
ctx.clearRect( 50, 50, 10, 10);//透過確認用
//後略
</script>
<p style="background-color:blue;">canvasを透過して背景が見える
<canvas id="mycanvas"></canvas>
</p>
シャギーや半透明を細かく制御したいなら、ブラウザに任せるのではなくNo.1のような方法で自分で作らないとダメだと思います。
>パスをmoveToで文字の形にうごかして、clipしなさーい
ある意味そういうことになりますが。(幅1px長さ1pxのパスを1つずつ処理していると考えて)
まさにやりたい通りのことができました!!
globalCompositeOperationですかぁ~
勉強するようにします!!o(`・д・´)o
No.2
- 回答日時:
>パスをmoveToで文字の形にうごかして、clipしなさーい
それが本来の方法であることはご理解されているようです。
inkscapeなどで画像をトレースしたり、直接SVGにするのが良いと思いますけど・・・
SVGからHTML5のcanvasにコンバートする
Ink2canvas, a new SVG to HTML5 Canvas converter | Libre Graphics World ( http://libregraphicsworld.org/blog/entry/ink2can … )
もあります。
No.1
- 回答日時:
canvasは使ったことがほとんどありませんが、単純に背景色と文字色とで構成されているものなら、描いた後でcanvasを走査して、色によって透明にするという案ではどうでしょうか?
参考にしたサイト
http://www.html5.jp/canvas/index.html
(全角空白は半角に)
<!DOCTYPE HTML>
<html lang="ja">
<head>
<title>sample</title>
</head>
<body>
<canvas id="canvas" width="500" height="300"></canvas>
<script>
var canvas = document.getElementById("canvas");
if(canvas && canvas.getContext){
var ctx = canvas.getContext("2d");
testDraw();
transparent(0, 100, 260, 120);
}
//矩形と文字を書いてみる
function testDraw(){
ctx.fillStyle = "rgb(200, 0, 0)";
ctx.fillRect(0, 0, 500, 300);
ctx.font = "100px 'MS Pゴシック'";
ctx.fillStyle = "rgb(0, 0, 0)";
ctx.fillText("テストText", 20, 200);
}
//矩形範囲を指定:(背景色以外の色を透明にする)
//
// 指定色だけ透明にしてみたら、エッジの中間色が残るようだ
// それなので、背景色以外は透明に→エッジが少々ジャギる
// エッジを半透明にするとか滑らかにするのは適当に修正してちょ
function transparent(x, y, w, h){
var imageData = ctx.getImageData(x, y, w, h);
var d = imageData.data, i;
for(i=0; i<d.length; i+=4)
if(d[i]!=200 || d[i+1]!=0 || d[i+2]!=0) d[i+3] = 0;
ctx.putImageData(imageData, x, y);
}
</script>
</body>
</html>
ご指定の方法でうまくいきました(p゜∀゜q)
今回はNo3さんの方法でやってみますが、この方法もその内役立たせていただきますm(。v_v。)m
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) 次に、楽天のアジャイル就活に参加して、1日で内定を獲得できる。私は大企業に就職できる? 2 2022/04/17 13:38
- Illustrator(イラストレーター) イラストレーターで文字の背景に自動で入れた長方形の左側の角だけ丸く(右側だけ直角に)する方法 4 2023/04/21 11:08
- その他(クラウドサービス・オンラインストレージ) Canva(キャンバ サムネイル作るサイト)での加工について(人物だけ、光沢感あるグラデーション) 1 2023/04/01 22:09
- 高校 図書館や学習プラザでは消しゴム禁止にしませんか? 5 2023/05/08 18:36
- 政治 私の発明した「二階建て漢字」は使えるでしょうか? 3 2023/02/08 16:40
- Photoshop(フォトショップ) MacでPhotoshopに使い方 教えて! 2 2023/07/08 08:24
- Excel(エクセル) こんなことできますか?例えば、sheetに貼り付けた図形のタイトルを、セルA1の文字で表示する。 5 2022/04/22 15:25
- 書道・茶道・華道 こないだ、イスラーム美術を展示するミュージアムに 2 2022/06/23 16:39
- Visual Basic(VBA) VBA初心者です 検索した数字の行に色をつける 5 2023/02/13 14:22
- Visual Basic(VBA) エクセル VBA 条件付き書式 簡略化したい 2 2022/06/02 17:46
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
HTMLですCSSです 画像のように...
-
スタイルシートで画面を上下に...
-
大分類・中分類・小分類
-
CSS <div>の入れ子が反映さ...
-
htmlのstyleのposition:relativ...
-
フッター上部に謎の隙間
-
SafariでもBGMを流す方法という...
-
[CSS] 常にフッターは下部に表...
-
スクロール可能なチェックボックス
-
2つのDIVを中央と右に横並びに...
-
Ctrl+F(検索)の窓を出したいの...
-
文字をクリックしたら別の文字...
-
textareaで入力した文字を改行...
-
youtubeをHPに載せたいです。
-
チェックボックスの背景色って...
-
HTMLですCSSです この画像のよ...
-
Flickity で画像にリンクを貼る...
-
フッターの位置を一番下に表示...
-
MAX関数を使ってからLEFT JOIN...
-
javascriptで毎月替わる画像
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
CSS <div>の入れ子が反映さ...
-
フッター上部に謎の隙間
-
Ctrl+F(検索)の窓を出したいの...
-
【CSS】floatで左右に並べた...
-
css固定したフッターが本文と重...
-
HTMLですCSSです 画像のように...
-
htmlのstyleのposition:relativ...
-
HTMLですCSSです この画像のよ...
-
Flickity で画像にリンクを貼る...
-
画像の特定の座標にカーソルが...
-
チェックボックスの背景色って...
-
html スクロール要素を下から表...
-
レイアウトが崩れないようにす...
-
スクロール可能なチェックボックス
-
リンクで違うページの指定箇所...
-
オンマウス時に別画像を上に重...
-
フッターの下に隙間ができてしまう
-
スタイルシート(CSS)で、高さ...
-
かなり困っています。知恵を貸...
-
離れた場所にマウスオーバーで...
おすすめ情報