CamanJS を使用したカスタム画像エディターの開発: 拡張フィルター オプションとブレンド モード
CamanJS 画像エディター シリーズの最初のチュートリアルでは、画像の編集に組み込みフィルターのみを使用します。これにより、明るさ、コントラストなどのいくつかの基本的な効果と、ヴィンテージ、日の出などの他の 18 個のより複雑なフィルターに制限されます。これらはすべて簡単に適用できますが、編集する画像の個々のピクセルを完全に制御することはできません。
この 2 番目のチュートリアルでは、編集中の画像をより詳細に制御できるレイヤーとブレンド モードについて学びました。たとえば、新しいレイヤーをキャンバスに追加し、色または画像で塗りつぶしてから、それを親レイヤー上に配置して、描画モードを適用できます。ただし、まだ独自のフィルターを作成しておらず、適用できるブレンド モードは CamanJS によってすでに提供されているものに限られています。
このチュートリアルの目的は、独自のブレンド モードとフィルターを作成する方法を説明することです。また、ライブラリに存在するいくつかのバグと、独自のプロジェクトで CamanJS を使用するときにそれらにパッチを適用する方法についても説明します。
新しいブレンド モードを作成する
デフォルトでは、CamanJS は 10 個のブレンディング モードを提供します。それらは、標準、乗算、マスク、加算、差分、加算、除外、ソフトライト、明るく、暗くします。このライブラリでは、独自のブレンド モードを登録することもできます。このようにして、現在のレイヤーと親レイヤーの対応するピクセルをどのようにブレンドして最終結果を生成するかを制御できます。
Caman.Blender.register("blend_mode", callback); を使用して、新しいブレンド モードを作成できます。ここで、
blend_mode は、作成しているブレンド モードを識別するために使用する名前です。コールバック関数は、現在のレイヤー上の異なるピクセルと親レイヤー上の対応するピクセルの RGB 値を含む 2 つのパラメーターを受け取ります。この関数は、
rgb チャネルの最終値を含むオブジェクトを返します。
maxrgb です。
リーリー
minrgb という名前が付けられています。
リーリー
新しいピクセルベースのフィルターを作成する
CamanJS には 2 つの主要なタイプのフィルターがあります。画像全体を一度に 1 ピクセルずつ操作することも、コンボリューション カーネルを使用して画像を変更することもできます。コンボリューション カーネルは、周囲のピクセルに基づいてピクセルの色を決定するマトリックスです。このセクションでは、ピクセルベースのフィルターに焦点を当てます。カーネルの操作については次のセクションで説明します。
ピクセルベースのフィルターは、RGB チャンネル値を一度に 1 ピクセルずつ与えます。その特定のピクセルの最終的な RGB 値は、周囲のピクセルの影響を受けません。
Caman.Filter.register("filter_name", callback); を使用して独自のフィルターを作成できます。作成するフィルターはすべて、
process() メソッドを呼び出す必要があります。このメソッドは、フィルター名とコールバック関数をパラメーターとして受け取ります。
リーリー
同様の方法でしきい値フィルターを作成できます。今回は、ユーザーがしきい値を通過できるようにします。特定のピクセルの明るさがユーザー指定の制限よりも高い場合、ピクセルは白になります。特定のピクセルの明るさがユーザー指定の制限を下回ると、そのピクセルは黒になります。リーリー
演習として、独自のピクセルベースのフィルターを作成してみるとよいでしょう。たとえば、すべてのピクセルで特定のチャネルの値を増やします。CamanJS では、現在のピクセルの色を操作するのではなく、絶対的および相対的に配置されたピクセルの色を設定することもできます。残念ながら、この動作には少しバグがあるため、いくつかのメソッドをオーバーライドする必要があります。ライブラリのソース コードを見ると、
getPixel() や
putPixel() などのメソッドが
this## の メソッドを呼び出していることがわかります。 ## と <code class="inline"> の
# と 。ただし、これらのメソッドはプロトタイプでは定義されず、クラス自体で定義されます。
このライブラリのもう 1 つの問題は、putPixelRelative()
newLoc ではなく変数名
nowLoc を 2 つの異なる場所で使用していることです。次のコードをスクリプトに追加することで、両方の問題を解決できます。
Caman.Pixel.prototype.coordinatesToLocation = Caman.Pixel.coordinatesToLocation Caman.Pixel.prototype.locationToCoordinates = Caman.Pixel.locationToCoordinates Caman.Pixel.prototype.putPixelRelative = function (horiz, vert, rgba) { var newLoc; if (this.c == null) { throw "Requires a CamanJS context"; } newLoc = this.loc + (this.c.dimensions.width * 4 * (vert * -1)) + (4 * horiz); if (newLoc > this.c.pixelData.length || newLoc < 0) { return; } this.c.pixelData[newLoc] = rgba.r; this.c.pixelData[newLoc + 1] = rgba.g; this.c.pixelData[newLoc + 2] = rgba.b; this.c.pixelData[newLoc + 3] = rgba.a; return true; };
更正代码后,您现在应该能够创建依赖于 putPixelRelative()
的过滤器,没有任何问题。这是我创建的一个这样的过滤器。
Caman.Filter.register("erased", function (adjust) { this.process("erased", function (rgba) { if(Math.random() < 0.25) { rgba.putPixelRelative(2, 2, { r: 255, g: 255, b: 255, a: 255 }); } }); return this; });
此过滤器将当前像素向上两行和右侧两列的像素值随机设置为白色。这会擦除部分图像。这就是过滤器名称的由来。
创建新的基于内核操作的过滤器
正如我之前提到的,CamanJS 允许您创建自定义滤镜,其中当前像素的颜色由其周围的像素决定。基本上,这些滤镜会遍历您正在编辑的图像中的每个像素。图像中的一个像素将被其他八个像素包围。图像中这九个像素的值乘以卷积矩阵的相应条目。然后将所有这些乘积加在一起以获得像素的最终颜色值。您可以在 GIMP 文档中更详细地了解该过程。
就像基于像素的过滤器一样,您可以使用 Caman.Filter.register("filter_name", callback);
定义自己的内核操作过滤器。唯一的区别是您现在将在回调函数内调用 processKernel()
。
这是使用内核操作创建浮雕过滤器的示例。
Caman.Filter.register("emboss", function () { this.processKernel("emboss", [ -2, -1, 0, -1, 1, 1, 0, 1, 2 ]); });
以下 CodePen 演示将展示我们在本教程中创建的所有过滤器的实际操作。
最终想法
在本系列中,我几乎涵盖了 CamanJS 在基于画布的图像编辑方面提供的所有内容。您现在应该能够使用所有内置滤镜、创建新图层、在这些图层上应用混合模式以及定义您自己的混合模式和滤镜功能。
您还可以浏览 CamanJS 网站上的指南,以了解我可能错过的任何内容。我还建议您阅读该库的源代码,以了解有关图像处理的更多信息。这也将帮助您发现库中的任何其他错误。
以上がCamanJS を使用したカスタム画像エディターの開発: 拡張フィルター オプションとブレンド モードの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

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

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









WordPressは、初心者が簡単に始めることができます。 1.バックグラウンドにログインした後、ユーザーインターフェイスは直感的であり、シンプルなダッシュボードは必要なすべての関数リンクを提供します。 2。基本操作には、コンテンツの作成と編集が含まれます。 WysiWygエディターは、コンテンツの作成を簡素化します。 3.初心者は、プラグインとテーマを介してウェブサイトの機能を拡張でき、学習曲線は存在しますが、練習を通じて習得できます。

wordpressisisgoodforvirtalayanywebprojectoitsversitilityasacms.itexcelsin:1)ユーザーフレンドリー、柔軟性と柔軟性と顧客化の維持、およびプルージンの数値化; 3)seooptimization;

WIXは、プログラミングの経験がないユーザーに適しており、WordPressは、よりコントロールと拡張機能を必要とするユーザーに適しています。 1)WIXはドラッグアンドドロップエディターとリッチテンプレートを提供しているため、Webサイトをすばやく構築できます。 2)オープンソースのCMSとして、WordPressには巨大なコミュニティとプラグインエコシステムがあり、詳細なカスタマイズと拡張をサポートしています。

WordPress自体は無料ですが、使用するには余分な費用がかかります。1。WordPress.comは、無料から支払いまでの範囲のパッケージを提供し、価格は月あたり数ドルから数十ドルまでの範囲です。 2。WordPress.orgでは、ドメイン名(年間10〜20米ドル)とホスティングサービス(月額5〜50米ドル)を購入する必要があります。 3.ほとんどのプラグインとテーマは無料で、有料価格は数十から数百ドルです。適切なホスティングサービスを選択し、プラグインとテーマを合理的に使用し、定期的に維持および最適化することにより、WordPressのコストを効果的に制御および最適化できます。

人々は、その力と柔軟性のためにWordPressを使用することを選択します。 1)WordPressは、さまざまなWebサイトのニーズに適した、使いやすさとスケーラビリティを備えたオープンソースのCMSです。 2)豊富なテーマとプラグイン、巨大なエコシステム、強力なコミュニティサポートがあります。 3)WordPressの作業原則は、テーマ、プラグイン、コア関数に基づいており、PHPとMySQLを使用してデータを処理し、パフォーマンスの最適化をサポートします。

WordPressはコンテンツ管理システム(CMS)です。コンテンツ管理、ユーザー管理、テーマ、プラグイン機能を提供して、Webサイトコンテンツの作成と管理をサポートします。その実用的な原則には、ブログから企業Webサイトまで、さまざまなニーズに適したデータベース管理、テンプレートシステム、プラグインアーキテクチャが含まれます。

WordPressのコアバージョンは無料ですが、使用中に他の料金が発生する場合があります。 1。ドメイン名とホスティングサービスには支払いが必要です。 2。高度なテーマとプラグインが充電される場合があります。 3.プロフェッショナルサービスと高度な機能が請求される場合があります。

3日以内にWordPressを学ぶことができます。 1.テーマ、プラグインなどのマスター基本知識。2。インストールや作業原則などのコア関数を理解します。 3.例を使用して、基本的および高度な使用法を学びます。 4.デバッグテクニックとパフォーマンスの最適化の提案を理解します。
