2010-11-18 21 views
4

透明性を備えたPNG画像をシルエットのように完全に黒く見せるためにCSSを取得できる方法を知っている人は誰ですか?これにシルエットCSSを使用したPNG画像

http://susanbuck.net/upenn/examples/images/apple.jpg

alt text

それは私がしたい理由は、画像の多くのためだ、このような何かから行く他のwords- で

Photoshopを使用しないでください。

+1

は、私は、これは、それらの「CSSはそれを行うことはできません」例の一つであるかなり確信しています。あなたはちょうどPhotoshopに行く必要があります(実際にはかなり簡単、2分以上かかるはずはありません:) – Kyle

答えて

0

私はあなたがシルエットを得るためにfilter: contrast(0%) brightness(50%)のようなイメージのスタイルに適用することができます多分あなたはリンゴ

<img id="canvasSource" src="apple.jpg" /> 

<br /> 

<canvas id="area" width="264" height="282"></canvas> 

<!-- Javascript Code --> 
<script type="text/javascript"> 
    window.onload = function() { 
     var canvas = document.getElementById("area"); 
     var context = canvas.getContext("2d"); 
     var image = document.getElementById("canvasSource"); 
     context.drawImage(image, 0, 0); 

     var imgd = context.getImageData(0, 0, 264, 282); 
     var pix = imgd.data; 
     var blackpixel = 21; 
      for (var i = 0, n = pix.length; i < n; i += 4) { 

      //console.log(pix[i], pix[i+1], pix[i+2]); 
      if (i > 3) { 
       if ((Math.abs(pix[i-3] - pix[i]) > 10) && 
        (Math.abs(pix[i-2] - pix[i+1]) > 10) && 
        (Math.abs(pix[i-1] - pix[i+2]) > 10) 
       ) { 

        pix[i ] = blackpixel; 
        pix[i+1] = blackpixel; 
        pix[i+2] = blackpixel; 

       } 
      } 
      else { 
       if (pix[i] < 250 && pix[i+1] < 250 && pix[i+2] < 250) { 
        pix[i ] = blackpixel; 
        pix[i+1] = blackpixel; 
        pix[i+2] = blackpixel; 
       } 
     } 

     } 
     context.putImageData(imgd, 0, 0);  

    }; 
</script> 
+0

Rad溶液、fcalderan! var blackpixel = 0を追加するだけでした。 (このコードにつまずいた人のためのfyi)。 – Susan

4

私はそれが純粋なCSSでどうやってできるのか分かりません。 Javascriptはそれを達成できるかもしれませんが、代わりにサーバーサイドプログラミングの使用を検討することがあります。 PHPを使用すると、元のPNGの複製をサーバー上に作成し、非透明ピクセルを単一の色に置き換えることができます。これは透かし機能に似ています。

+0

JavaScript経由で方法を考えることはできますか?これは私のクラスの1人の学生のためのものであり、私たちはクライアント側のコードを使って作業しています。私はPHP GDでそれを理解することができましたが、使用している技術に適したソリューションを見つけようとしています。 – Susan

+0

Susan、私はサーバーの処理に依存しない方法を見つけることができませんでした。ソリューションを作成する場合は、ここにリンクを投稿してください。 – Dylan

9

内部の軽いピクセルで、特にそれを絞り込むことができ、キャンバスを使用してこのコードを試してみました。接頭辞を忘れないでください。

0

Nowdaysは、フィルタは、あまりにも行うことができ、ブレンドモードを混在させる組み合わせ:

span {/* to be used to lay the 'blender mask' over img */ 
 
    position: relative; 
 
    display: inline-block; 
 
    overflow:hidden; 
 
} 
 

 
span img { 
 
    display: block;/* erase gap */ 
 
    max-width:45vw; 
 
    filter: contrast(150%); 
 
} 
 
span + span img { 
 
    filter: contrast(120%) saturate(0%);/* saturate(0%) is similar to grayscale(100%) */ 
 
} 
 

 
span:before { 
 
    content: ''; 
 
    z-index: 1; 
 
    height: 100%; 
 
    background: white; 
 
    position: absolute; 
 
    top: 0; 
 
    width: 100%; 
 
    display: block; 
 
    filter: contrast(10000%) brightness(0) saturate(100%) grayscale(100%); 
 
    mix-blend-mode: color-burn;/* bake it to black */ 
 
    animation : span 2s infinite alternate; 
 
} 
 
@keyframes span { 
 
    from{ 
 
    transform:translate(-100%,0) 
 
    } 
 
    25%,50% { 
 
    transform:translate(0,0); 
 
    } 
 
    to{ 
 
    transform:translate(100%,0) 
 
    } 
 
}
<span><img src="https://i.stack.imgur.com/somZ7.jpg"/></span> 
 
<span><img src="https://i.stack.imgur.com/somZ7.jpg"/></span>

関連する問題