【问题标题】:Imitate Photoshop blend effects like multiply, overlay etc模仿 Photoshop 混合效果,如乘法、叠加等
【发布时间】:2013-07-27 18:26:08
【问题描述】:

我正在制作一个带有整页背景图片的网站。我想为侧栏创建一个背景图像,该图像的作用类似于 Photoshop 图层,并使用乘法作为混合模式。它只是一个蓝色表面,具有 Photoshop 多层的“行为”。

无法合并叠加层和图像,因为当网站以其他屏幕比例/尺寸打开时,背景可能会发生变化。

关于 SO 有很多解决方案,但它们仅适用于将 2 个具有固定位置的图像相乘,而不是具有可变位置/背景的彩色表面。

有没有什么技巧可以做到这一点?

【问题讨论】:

  • 你为什么不用css rgba(0, 65, 131, .8)来设置你的侧栏的背景色?
  • 这只会创建一个透明的蓝色背景,但我想要像在 Photoshop 中一样具有乘法效果。 (2 层:1. 图像,2. 纯蓝色,混合模式为“正片叠底”)
  • 啊,我明白了。有趣的问题:) +1
  • 您是否可以选择使用 html5 画布,还是需要向后兼容旧版浏览器?
  • 尝试使用这篇文章进行混合stackoverflow.com/questions/3648312/… 并使用来自en.wikipedia.org/wiki/Blend_modes#Multiply 的方程来获得你的混合方程。

标签: css overlay photoshop blend


【解决方案1】:

jsBin demo

使用 CSS3 属性 mix-blend-mode MDN Docs
(对于后备,请使用带有一点 alpha 透明度的 rgbahsla 颜色。)

将所需的 blend-* 类分配给您的元素,例如:

/* ::: BLEND MODE CLASSES */

.blend-normal{ mix-blend-mode: normal; }
.blend-multiply{ mix-blend-mode: multiply; }
.blend-screen{ mix-blend-mode: screen; }
.blend-overlay{ mix-blend-mode: overlay; }
.blend-darken{ mix-blend-mode: darken; }
.blend-lighten{ mix-blend-mode: lighten; }
.blend-colordodge{ mix-blend-mode: color-dodge; }
.blend-colorburn{ mix-blend-mode: color-burn; }
.blend-hardlight{ mix-blend-mode: hard-light; }
.blend-softlight{ mix-blend-mode: soft-light; }
.blend-difference{ mix-blend-mode: difference; }
.blend-exclusion{ mix-blend-mode: exclusion; }
.blend-hue{ mix-blend-mode: hue; }
.blend-saturation{ mix-blend-mode: saturation; }
.blend-color{ mix-blend-mode: color; }
.blend-luminosity{ mix-blend-mode: luminosity; }


/* ::: SET HERE YOUR INITIAL COLORS */
div{  
  background: rgba(0, 80, 200, 0.8);
  color:      #fff;
}
div span{
  color:#000;
}


/* ::: FOR DEMO ONLY */
html, body{margin:0; height:100%;font:100%/1 sans-serif;}
body{background: url(http://i.stack.imgur.com/cBy6q.jpg)fixed 50%/cover;}
div{font-size:2.2em; padding:20px; margin:15px;}
div:first-of-type{margin-top:150px;}
div:last-of-type{margin-bottom:150px;}
<div class="">(rgba) <span>(rgba)</span></div>
<div class="blend-normal">normal <span>normal</span></div>
<div class="blend-multiply">multiply <span>multiply</span></div>
<div class="blend-screen">screen <span>screen</span></div>
<div class="blend-overlay">overlay <span>overlay</span></div>
<div class="blend-darken">darken <span>darken</span></div>
<div class="blend-lighten">lighten <span>lighten</span></div>
<div class="blend-colordodge">color-dodge <span>color-dodge</span></div>
<div class="blend-colorburn">color-burn <span>color-burn</span></div>
<div class="blend-hardlight">hard-light <span>hard-light</span></div>
<div class="blend-softlight">soft-light <span>soft-light</span></div>
<div class="blend-difference">difference <span>difference</span></div>
<div class="blend-exclusion">exclusion <span>exclusion</span></div>
<div class="blend-hue">hue <span>hue</span></div>
<div class="blend-saturation">saturation <span>saturation</span></div>
<div class="blend-color">color <span>color</span></div>
<div class="blend-luminosity">luminosity <span>luminosity</span></div>

【讨论】:

    【解决方案2】:

    我是一名设计师,遇到了同样的问题,在将 psd 交给开发团队之前寻找解决方案 - 你可以试试this js 和/或http://css-tricks.com/basics-css-blend-modes/

    jsfiddle 代码:

    #kitten:hover {
        filter:url(#multiply);
    }
    
    <svg width="200" height="200" viewBox="10 10 280 280">
        <filter id="multiply">
            <feBlend mode="multiply"/>
        </filter>
        <image id="kitten" x="0" y="0" width="300" height="300" xlink:href="http://placekitten.com/300" />
    </svg>
    

    希望它对您或这里的其他人有用。 :)

    【讨论】:

    • 这和tnt的入口有什么不同?
    【解决方案3】:

    简单一点 SVG:

    <svg width="200" height="200" viewBox="10 10 280 280">
        <filter id="multiply">
            <feBlend mode="multiply"/>
        </filter>
        <image id="kitten" x="0" y="0" width="300" height="300" xlink:href="http://placekitten.com/300" />
    </svg>
    

    还有一些 CSS:

    #kitten:hover {
        filter:url(#multiply);
    }
    

    小提琴:http://jsfiddle.net/7uCQQ/

    【讨论】:

      【解决方案4】:

      正如 FC 所说,您可以使用 CSS3 自定义过滤器或 SVG/Canvas。

      但是如果你需要一个跨浏览器的混合图层的解决方案,你必须使用 JS 方法。例如来自 Pixastic 的 JS 图像处理脚本:http://www.pixastic.com/lib/docs/actions/blend/

      此外,它还有很多其他的视觉效果,如模糊、噪点、裁剪、马赛克等。

      我之前在几个项目中使用过这个脚本,效果非常好:)

      希望对你有帮助)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-05
        • 2015-06-14
        • 2011-08-15
        • 1970-01-01
        相关资源
        最近更新 更多