ホームページ  >  記事  >  ウェブフロントエンド  >  HTML5実践 - グレーピクチャギャラリーの実装方法

HTML5実践 - グレーピクチャギャラリーの実装方法

黄舟
黄舟オリジナル
2017-03-23 16:06:221954ブラウズ

以前は、Web 上でグレースケール画像を表示したい場合は、画像ソフトウェアを使用して手動で変換する必要がありました。しかし現在、このプロセスは、画像編集ソフトウェアを必要とせずに、html5canvasの助けを借りて実現できます。この機能の実装方法を示すために、html5 と jquery を使用してデモを作成しました。

目的

このデモでは、HTML5 と jquery を使用して、マウスが画像の外に移動したときにグレースケール画像と元の画像を切り替える方法を示します。 HTML5 が登場する前は、この機能を実装するには、グレースケール画像とオリジナル画像の 2 つの画像を用意する必要がありました。しかし、グレースケール画像が元の画像上に直接生成されるため、HTML5 の助けを借りて、より速く簡単に実現できるようになりました。このjsコードがファイルや画像表示関数を作成する際の参考になれば幸いです。

レンダリング

jqueryコード

以下のjqueryコードは、ターゲット画像を見つけて、グレースケールバージョンを生成します。画像の上にマウスを移動すると、グレースケール画像が原色に変わります。

<script src="jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">    
    // 设置 window load事件是为了等待所有图片加载完毕之后才行运行
    $(window).load(function(){        
        // 使图片渐入,这样有颜色的原图就不会显示出来了,然后再执行window load 事件
        $(".item img").fadeIn(500);        
        // 复制图片
        $(&#39;.item img&#39;).each(function(){            
        var el = $(this);
            el.css({"position":"absolute"}).wrap("<p class=&#39;img_wrapper&#39; 
            style=&#39;display: inline-block&#39;>").clone().addClass(&#39;img_grayscale&#39;)
            .css({"position":"absolute","z-index":"998","opacity":"0"}).insertBefore(el).queue(function(){                
            var el = $(this);
                el.parent().css({"width":this.width,"height":this.height});
                el.dequeue();
            });            
            this.src = grayscale(this.src);
        });        
        // 使图片渐入 
        $(&#39;.item img&#39;).mouseover(function(){
            $(this).parent().find(&#39;img:first&#39;).stop().animate({opacity:1}, 1000);
        })
        $(&#39;.img_grayscale&#39;).mouseout(function(){
            $(this).stop().animate({opacity:0}, 1000);
        });        
    });    
    // 使用canvas制作灰色图片
    function grayscale(src){        
    var canvas = document.createElement(&#39;canvas&#39;);        
    var ctx = canvas.getContext(&#39;2d&#39;);        
    var imgObj = new Image();
        imgObj.src = src;
        canvas.width = imgObj.width;
        canvas.height = imgObj.height; 
        ctx.drawImage(imgObj, 0, 0); 
        var imgPixels = ctx.getImageData(0, 0, canvas.width, canvas.height);        
        for(var y = 0; y < imgPixels.height; y++){            
        for(var x = 0; x < imgPixels.width; x++){                
        var i = (y * 4) * imgPixels.width + x * 4;                
        var avg = (imgPixels.data[i] + imgPixels.data[i + 1] + imgPixels.data[i + 2]) / 3;
                imgPixels.data[i] = avg; 
                imgPixels.data[i + 1] = avg; 
                imgPixels.data[i + 2] = avg;
            }
        }
        ctx.putImageData(imgPixels, 0, 0, 0, 0, imgPixels.width, imgPixels.height);        
        return canvas.toDataURL();
    }        
</script>

使い方

以下の手順に従ってください:

jquery.jsを参照

上記のコードをコピー

ターゲット画像を設定します(例:.post-imgimg.gallery imgなど)

速度も設定できますアニメーション (つまり . 1000 = 1 秒)

互換性

Chrome、Safari、Firefox など、HTML5 と Canvas をサポートするすべてのブラウザを試しました。 HTML5 をサポートしていないブラウザの場合は、元の画像のみが使用され、グレースケール画像は生成されません。

注: ローカル HTML ファイルが Firefox および Chrome で実行できない場合は、HTML ファイルをサーバーにデプロイする必要があります。

自己練習

チュートリアルに従って自分でテストしたところ、Firefox を使用してページを開くとプログラムが正しく実行できませんが、関連するコードをデプロイすると実行できるようになります。サーバー。

ローカルの写真である必要があります。そうでない場合は、セキュリティ エラーが報告されます。

その理由:

Canvas は HTML5 標準の Canvas 要素であり、2D および 3D 画像の描画に使用できます

しかし、デバッグ中にセキュリティ エラーの問題が発生しやすいです。渡されたものは主に toDataURL() と src に表示されます。

セキュリティ エラーは、このコードにセマンティック上の問題はないが、セキュリティ上の理由により正常に実行できないことを意味します。

throw セキュリティ エラー:

の使用Canvas のドメイン画像
  1. ローカルのサーバーレス環境でのデバッグ
  2. 現在のドメインと画像の間の関係を取得できません
  3. stackoverflow で見つかるいくつかのソリューションでは、通常、クロスドメインの問題を解決できます。
しかし、実際には、この問題はローカルでデバッグするときにサーバー ソフトウェアを使用しない場合にも発生します。

例: ローカルでデバッグするときに toDataURL 関数を使用すると、Chrome と Firefox ではローカルの画像ファイルが使用されます。まだセキュリティ エラーがスローされます。

一般的な解決策は、サーバー環境をローカルにセットアップするか、デバッグのためにコンテンツをサーバーに送信することです。

以上がHTML5実践 - グレーピクチャギャラリーの実装方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。