HTML5/CSS/JavaScript のみを使用して、Flash/ActionScript のように画像の色を変更する方法はありますか?
Flash での例を次に示します: http://www.kirupa.com/developer/actionscript/color.htm 編集: これは、複製したいプロセスです。
私はこのようなことを達成しようとしています(色の変化、照明と影の維持): http://www.acura.com/ExteriorColor.aspx?model=TL毎回新しい画像を読み込んで置き換えずに; 単純に色調を変更できるようにしたい (つまり、純粋な HTML5/CSS/JS メソッドを実行する)。編集:これは私が達成したい結果であり、プロセスではありません。
基本的に、画像の他の側面 (グラデーション、照明など) を維持しながら、画像のパレット/トーンを変更したいと考えています。近づきましたが、十分に近づいていません。イメージ マスクを使用して、元のイメージの上に合成するところまで来ました (透明なイメージ オーバーレイのようなものです)。以下にいくつかのサンプル コードを示します (これは単なるスニペットであるため、動作する場合と動作しない場合があることに注意してください。サンプル コードのみを表示しているので、何をしようとしているのかがわかります)。
<div id='mask'>
<canvas id='canvas' width='100' height='100'></canvas>
</div>
<button data-rgba='255,0,0,0.5'>red</button>
<button data-rgba='0,255,0,0.5'>green</button>
<script>
foo = {};
foo.ctx = jQuery('#canvas')[0];
foo.ctx_context = foo.ctx.getContext('2d');
foo.mask = jQuery('#mask')[0];
foo.img = new Image();
foo.img_path = '/path/to/image_mask.png'; // 100px x 100px image
foo.changeColor = function(rgba){
foo.ctx_context.clearRect(0, 0, 100, 100);
foo.ctx_context.fillStyle = 'rgba(' + rgba + ')';
foo.ctx_context.fillRect(0, 0, 100, 100);
foo.ctx_context.globalCompositeOperation = 'destination-atop';
foo.ctx_context.drawImage(foo.img, 0, 0);
foo.ctx_context.css({'background-image': "url(" + foo.ctx.toDataURL("image/png") + ")"});
};
jQuery("button").click(function(){
foo.changeColor(jQuery(this).attr('data-rgba'));
});
</script>
このアプローチを使用する際の主な問題は、画像が非常に平坦に見えることです。他に欠けているものがあるか、使用しているマスク (白一色の不規則な形の画像) が間違ったアプローチです。