纹理文本

前面的话

  本文将通过多种方式实现纹理文本的效果

背景裁切

  对于实现纹理文本的效果,脑海中最直接能想到的办法可能是背景裁切background-clip

  使用线性渐变来填充文本背景

<style>
.box-with-text { background-image: linear-gradient(135deg,hsl(50, 100%, 70%), hsl(320, 100%, 50%)); -webkit-text-fill-color: transparent; -webkit-background-clip: text; background-size: cover;font:bolder 100px/100px Impact;position:absolute;}
</style>
<div class="box-with-text">match</div>

  下面使用一张枫叶的背景,来制作纹理文本

<style>
.box-with-text { background-image: url(http://7xpdkf.com1.z0.glb.clouddn.com/runjs/img/leaf.jpg); -webkit-text-fill-color: transparent; -webkit-background-clip: text; background-size: cover;font:bolder 100px/100px Impact;position:absolute;}
</style>
<div class="box-with-text">match</div>

  当然了,放一张动态gif图,也是没问题的

<style>
.box-with-text { background: url(http://7xpdkf.com1.z0.glb.clouddn.com/runjs/img/fire.gif) 0 -130px /cover; -webkit-text-fill-color: transparent; -webkit-background-clip: text; font:bolder 100px/100px Impact;position:absolute;}
</style>
<div class="box-with-text">match</div>

  如果想要让填充动起来,可以通过animation移动背景的位置和尺寸来添加动画

<style>
@keyframes stripes {100% {background-position: 0 -50px;}}
.box-with-text {animation: stripes 2s linear infinite;background:linear-gradient(crimson 50%, #aaa 50%) 0 0/ 100% 50px ; -webkit-text-fill-color: transparent; -webkit-background-clip: text; font:bolder 100px/100px Impact;position:absolute;}
</style>
<div class="box-with-text">match</div>

  使用background-clip背景裁切的技术,文本可以被选中。但是,由于只有webkit内核的浏览器支持,因此并不是跨浏览器的好方案

SVG

  如果要对文本纹理做更精密的设置,且考虑浏览器兼容性,最好的方案还是使用SVG文本

  首先,可以通过SVG动画,来实现文本纹理的动态效果

<svg height="100" xmlns="http://www.w3.org/2000/svg" id="svg">
  <defs>
    <style>
     .text{font:bolder 100px/100px Impact;}
    </style>
    <radialGradient id="Gradient1">
      <animate attributeName="r" values="0%;150%;100%;0%" dur="5" repeatCount="indefinite" />
      <stop offset="0%" stop-color="#fff">
        <animate attributeName="stop-color" values="#333;#FFF;#FFF;#333" dur="5" repeatCount="indefinite" />
      </stop>
      <stop offset="100%" stop-color="rgba(55,55,55,0)"/>
    </radialGradient>
  </defs>
  <text class="text" dominant-baseline="hanging" y="10" x="0" fill="url(#Gradient1)">match</text>
</svg>

  使用SVG图案pattern,可以实现更精细的纹理动画效果

<svg height="100" xmlns="http://www.w3.org/2000/svg" id="svg">
  <defs>
    <style>
      .text{font:bolder 100px/100px Impact;}
      @keyframes stroke {
        50% {
          stroke-width:30;
          stroke-opacity: .5;
        }
      }
      .g-spots circle{stroke-width: 0;animation: stroke 2s infinite;}
      .g-spots circle:nth-child(1) {animation-delay: -0.4s;}
      .g-spots circle:nth-child(2) {animation-delay: -1.2s;}
    </style>
  <pattern id="p-spots" width="0.12" height="0.2">
    <g class="g-spots">
      <circle r="10" cx="10" cy="5" fill="#3F0B1B" stroke="#3F0B1B" />
      <circle r="10" cx="25" cy="20" fill="#CF423C" stroke="#CF423C"/>
    </g>
  </pattern>
  </defs>
  <text class="text" dominant-baseline="hanging" y="10" x="0" stroke="url(#p-spots)" fill="none" stroke-width="5" stroke-opacity="0.5">match</text>
</svg>

  如果想实现虚线动画的效果,则需要使用SVG文本的虚线描边

<svg height="100" xmlns="http://www.w3.org/2000/svg" id="svg">
  <defs>
    <style>
      @keyframes stroke {100% { stroke-dashoffset: -400;}}
      .text{font:bolder 100px/100px Impact;}
      .use-text{fill: none;stroke-width: 6;stroke-dasharray: 70 330;stroke-dashoffset: 0;animation: stroke 6s infinite linear;}
      .use-text:nth-child(5n+1){stroke: pink;animation-delay: -1.2s;}
      .use-text:nth-child(5n+2){stroke: lightblue;animation-delay: -2.4s;}
      .use-text:nth-child(5n+3){stroke: lightgreen;animation-delay: -3.6s;}
      .use-text:nth-child(5n+4){stroke: orange;animation-delay: -4.8s;}
      .use-text:nth-child(5n+5){stroke: tan;animation-delay: -6s;}
    </style>
  </defs>
  <symbol id="s-text">
    <text class="text" dominant-baseline="hanging" y="10" x="0" >match</text>
  </symbol>
  <use xlink:href="#s-text" class="use-text"></use>
  <use xlink:href="#s-text" class="use-text"></use>
  <use xlink:href="#s-text" class="use-text"></use>
  <use xlink:href="#s-text" class="use-text"></use>
  <use xlink:href="#s-text" class="use-text"></use>
</svg>

混合模式

  使用CSS3的新属性混合模式中的元素混合mix-blend-mode属性也可以实现类似的效果。元素混合mix-blend-mode应用于两个元素之间的混合,这时就需要将文字和纹理效果分开为两个元素

<style>
.box-with-text { background-image: linear-gradient(135deg,hsl(50, 100%, 70%), hsl(320, 100%, 50%)); background-size: cover;font:bolder 100px/100px Impact;position:absolute;}
.text{mix-blend-mode: lighten; background:white;}
</style>
<div class="box-with-text"><span class="text">match</span></div>

  关于背景为图片的效果就不再赘述,和backgroung-clip方法类似

  但是,由于它是两个元素的混合,而不仅仅是应用背景样式。因此,其甚至可以将视频作为纹理

<style>
.box{position:relative;height:100px;overflow: hidden;}
.box-with-text { mix-blend-mode: lighten; background:white;font:bolder 100px/100px Impact;position:absolute;height: 200px;width: 280px;}
</style>
<div class="box">
  <video class="box-with-text" src="http://7xpdkf.com1.z0.glb.clouddn.com/runjs/img/sunshine.mp4" width="280" height="100" autoplay loop></video>
  <div class="box-with-text">match</div>
</div>

  当然,还可以是有声动画

<style>
.box{position:relative;height:100px;overflow: hidden;}
.box-with-text { mix-blend-mode: lighten; background:white;font:bolder 100px/100px Impact;position:absolute;height: 176px;width: 320px;}
</style>
<div class="box">
  <video id="video1" class="box-with-text" src="http://7xpdkf.com1.z0.glb.clouddn.com/mov.mp4" width="320" height="100" loop></video>
  <div class="box-with-text">match</div>
</div>
<button onclick = ‘video1.play()‘>播放</button>
<button onclick = ‘video1.pause()‘>暂停</button>  

  虽然混合模式有更大的自由度,但是由于其是CSS3的属性,IE浏览器、android4.4-不支持,safari和IOS需要添加-webkit-前缀。浏览器兼容性并不是很好

  

时间: 2024-12-21 15:05:04

纹理文本的相关文章

ActionScript3游戏中的图像编程(连载九十二)

总目录:http://blog.csdn.net/iloveas2014/article/details/38304477 4.5.6 卷积运算对像素的影响机制 在外力影响较小的情况下,物质间会不断地均匀扩散着(包括固体也能扩散,只是固体分子的距离较小,引力较大,所以一般感觉不出来,比如煤炭放墙边一段时间后,墙也会慢慢变黑,哈,扯远了),而我们也知道,外力无时无刻不在影响着这个世界.比如,人会往高处走,水会往低处流.而在社会学上,囤积居奇,劫贫济富这样的不道德行为我们也都司空见惯了.所以,处理图

Cocos2d-x 3.0final 终结者系列教程23CocosStudio UI组件使用大全Cocos2d-x3.2使用

最近忙死了,得空发表一篇关于所有的Cocostudio中的UI组件使用的教程,其实是对所有UI组件的Api介绍,作为手册收藏下吧!! CocosStudio UI组件 按钮UIButton 复选框UICheckBox 滑块UISlider 图片UIImageView 进度条UILoadingBar 纹理文本 UITextAtlas 字体文本 UIText 图片字体文本 UITextBMFont 文本区域 UITextField 布局组件 UILayout 滚动组件 UIScrollView 页面

background-clip指定背景绘制区域

语法:background-clip: 值 可取值:(1)border-box 背景绘制,背景从边缘处展开,无剪切 (2)padding-box 背景绘制,背景从内边距开始展开 ,剪切掉边框 (3)content-box 背景绘制,背景从实际内容处展开 ,剪切掉内边距和边框 具体例子与效果图: 第一种:background-clip:border-box: <div class="div1"> <p>border-box</p> <p>b

matlab实现MSER(最大极值稳定区域)来进行文本定位

一.自然场景文本定位综述   场景图像中文本占据的范围一般都较小,图像中存在着大范围的非文本区域.因此,场景图像文本定位作为一个独立步骤越来越受到重视.这包括从最先的CD和杂志封面文本定位到智能交通系统中的车牌定位.视频中的字幕提取,再到限制条件少,复杂背景下的场景文本定位.与此同时文本定位算法的鲁棒性越来越高,适用的范围也越来越广泛.文本定位的方式一般可以分为三种,基于连通域的.基于学习的和两者结合的方式.基于连通域的流程一般是首先提取候选文本区域,然后采用先验信息滤除部分非文本区域,最后根据

一种基于连通分量的文本区域定位方法

本文通过比较基于纹理的方法和基于连通分量的方法发现对于复杂的背景使用基于连通分量的方法较好. 一.基于连通分量的方法和基于纹理的方法比较如下: 基于纹理的方法:将图像分割成块,然后提取块的纹理特征,并用分类器确认. 基于连通分量的方法:它是假设同一文本区域的字符具有相同的颜色,根据字符颜色的一致性及字符与背景有较大的颜色差来分割图像,提取连通分量,对连通分量利用几何约束关系得到文本区域. 基于纹理的方法的鲁棒性对于定位小字符的文本区域具有较好的效果,对噪声具有较高的抑制性.但是当定位大字符时,由

Ogre 渲染目标解析与多文本合并渲染

实现目标 因为需求,想找一个在Ogre中好用的文本显示,经过查找和一些比对.有三种方案 一利用Overlay的2D显示来达到效果. http://www.ogre3d.org/tikiwiki/tiki-index.php?page=MovableTextOverlay 二重写Renderable与MovableObject,利用对应字体查找到每个字符元素纹理坐标. http://www.ogre3d.org/tikiwiki/tiki-index.php?page=MovableText 三利

纹理绘制和细节雕刻工具3D.Brush.v2.03.SP2 1CD

CopyCAD v3.11 (中文 培训教程) CopyCAD 培训教程(中文) PowerMill v9.0.03 SP2 Full-ISO 1DVD(多国语言正式版,包括简.繁体中文) PowerMill v9 SP5 1CD PowerMILL2VERICUT1300 1CD PowerMill v5.0最新中文教程 PowerMill v5.0.05英文教程和练习数模 1CD PowerMill training(中文电子文档) 1CD Delcam DentCAD v8.1.12 SP

用 SDL2 在屏幕上打印文本

打印完图片,是时候打印文字了.这里引用了SDL的字体扩展库,SDL2_ttf.lib,需要包含相应的头文件. 环境:SDL2 + VC++2015 下面的代码将在窗口打印一段文字,并对相应的操作做出响应. 这次把错误处理给精简掉了,代码看起来更清爽. 1 #include <iostream> 2 #include "SDL.h" 3 #include "SDL_ttf.h" 4 5 int main(int argc, char** argv) 6 {

自然场景文本识别:基于笔画宽度变换的文本检测

最近在学习自然场景(Natural Scenes)的文本识别(Text Recognition)问题,这一问题也是时下一个非常热门的亟待解决的问题.在阅读学习了一定量的文献资料之后,有了一定收获,本文提到的基于"笔画宽度变换"(Stroke Width Transform)的方法,是目前个人看到比较认同的方法. 对于自然场景的文本识别,一个很重要的问题就在于如何从自然场景的图片中检测与定位出文本信息,考虑到文本的结构.像素.几何变形.背景复杂度.图像分辨率等多种问题带来的干扰,对于文本