音视频理论(3)- 视频中图片和文字渲染坐标问题
目录
前言
图片和文字是我们日常生活与工作中接触到的最普遍的视觉元素,每天任何时间任何地点几乎都能看到它们。其实,图片和文字又是视频的组成部分,在接触过程中你没有想过它们是如何展示的,特别是在网页中是如何渲染的呢?
图片和文字渲染坐标问题揭秘
当我们在画布 canvas 上渲染图片和文字水印时,一般会有 x 坐标、y 坐标、大小等相关参数,它们是怎么使用的呢?我们都知道,屏幕显示渲染内容的坐标原点在左上角,那么文字和图片在屏幕渲染时的机制是否完全一样呢?如果不一样,又有什么不同呢?今天我们就带大家来一探究竟。
图片水印
如果渲染图片水印的话,一般会有 x 坐标、y 坐标、宽、高等参数,具体含义我们都比较好理解。
canvas 渲染图片相关的参数可以参考下面的内容:
1)img,规定要使用的图像、画布或视频。
2)sx,可选,开始剪切的 x 坐标位置。
3)sy,可选,开始剪切的 y 坐标位置。
4)swidth,可选,被剪切图像的宽度。
5)sheight,可选,被剪切图像的高度。
6)x,在画布上放置图像的 x 坐标位置。
7)y,在画布上放置图像的 y 坐标位置。
8)width,可选,要使用的图像的宽度。(伸展或缩小图像)
9)height,可选,要使用的图像的高度。(伸展或缩小图像)
先来看一张图片水印的效果图,我们在左上角(10,10)的位置放了一个宽和高都是 50 像素的 logo 图片,如下图所示:
PS:左上角的 logo 是我 CSDN 账号的头像,是不是很可爱?太自恋了。。。
文字水印
如果渲染文字水印的话,一般会有 x 坐标、y 坐标、fontSize(字体大小)等参数,这些参数也很好理解。
canvas 渲染文字相关的参数可以参考下面的表格:
再来看一张文字水印的效果图,我们在左上角(10,10)的位置放了一个大小 10 像素的单词(hello),如下图所示:
注意:这里添加的文字和图片都是硬水印,不是传统的软水印,有很高的安全性。具体实现可以参考另一篇文章(https://xie.infoq.cn/article/1b78d8b2c3c45a10edf283128)。
二者的区别
那么图片和文字二者的渲染机制有什么不同呢?因为控制参数基本一样,几乎看不出有什么区别。接下来看一个实验,我们在同一个位置,同时渲染文字和图片水印,如下图所示:
怎么样?有没有发现问题?是的,图片和文字居然没有相互叠加!!!,我们可是选择的相同位置呀!是的,这就引出了二者渲染机制上一个非常大的区别。
比如我们选择了(10,10)坐标点,开始渲染图片和文字。其中,文字在该坐标点的上侧,图片在该坐标点的下测,如下图所示:
其实,二者的不同主要体现在渲染方向上,文字的渲染方向是从左下角向右上角,图片的渲染方向是从左上角向右下角。
形象一点的话,可以看下图:
好了,我们再进一步验证上面的结论,我们保持文字和图片水印的位置不变,把文字大小从 10px 增大到 50px,图片宽高从 50px 增大到 100px。按照上面的结论,我们可以猜测图片水印大小扩大一倍且展示完全;文字水印也变大了,但是因为渲染方向的缘故,我们只能看到 hello 单词的下半部分,因为上半部分被隐藏了。那事实是不是这样呢?我们看一下效果吧:
赞,我们的结论是正确的。
综上所述
图片和文字水印在渲染方向上有本质的不同,前者向右下角生长,后者向右上角生长。知道了这些区别,在今后的编码过程中就会懂得如何处理二者的布局处理,更好的展示出我们想要的视频效果。
PS:说到这里,让我想到了堆和栈,一个向高地址增长,一个向低地址增长。
版权声明: 本文为 InfoQ 作者【liuzhen007】的原创文章。
原文链接:【http://xie.infoq.cn/article/5f533bf3948465baaf9e6113c】。文章转载请联系作者。
评论