Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >图片和文字展示时也有是坐标系的呦!

图片和文字展示时也有是坐标系的呦!

作者头像
liuzhen007
发布于 2021-06-29 07:48:13
发布于 2021-06-29 07:48:13
9300
举报
文章被收录于专栏:流媒体音视频流媒体音视频

目录

前言

图片和文字渲染坐标问题揭秘

图片水印

文字水印

二者的区别

综上所述



前言

图片和文字是我们日常生活与工作中接触到的最普遍的视觉元素,每天任何时间任何地点几乎都能看到它们,在接触过程中你没有想过它们是如何展示的,特别是在网页中是如何渲染的?

图片和文字渲染坐标问题揭秘

当我们在画布canvas上渲染图片和文字水印时,一般会有x坐标、y坐标、大小等相关参数,它们是怎么使用的呢?我们都知道,屏幕显示渲染内容的坐标原点在左上角,那么文字和图片在屏幕渲染时的机制是否完全一样呢?如果不一样,又有什么不同呢?今天我们就带大家来一探究竟。

图片水印

如果渲染图片水印的话,一般会有x坐标、y坐标、宽、高等参数,具体含义我们都比较好理解。

canvas渲染图片相关的参数可以参考下面的表格:

参数

描述

img

规定要使用的图像、画布或视频。

sx

可选。开始剪切的 x 坐标位置。

sy

可选。开始剪切的 y 坐标位置。

swidth

可选。被剪切图像的宽度。

sheight

可选。被剪切图像的高度。

x

在画布上放置图像的 x 坐标位置。

y

在画布上放置图像的 y 坐标位置。

width

可选。要使用的图像的宽度。(伸展或缩小图像)

height

可选。要使用的图像的高度。(伸展或缩小图像)

先来看一张图片水印的效果图,我们在左上角(10,10)的位置放了一个宽和高都是50像素的logo图片,如下图所示:

PS:左上角的logo是我CSDN账号的头像,是不是很可爱?太自恋了。。。

文字水印

如果渲染文字水印的话,一般会有x坐标、y坐标、fontSize(字体大小)等参数,这些参数也很好理解。

canvas渲染文字相关的参数可以参考下面的表格:

描述

font-style

规定字体样式。可能的值:normalitalicoblique

font-variant

规定字体变体。可能的值:normalsmall-caps

font-weight

规定字体的粗细。可能的值:normalboldbolderlighter100300500700900

font-size / line-height

规定字号和行高,以像素计。

font-family

规定字体系列。

caption

使用标题控件的字体(比如按钮、下拉列表等)。

icon

使用用于标记图标的字体。

menu

使用用于菜单中的字体(下拉列表和菜单列表)。

message-box

使用用于对话框中的字体。

small-caption

使用用于标记小型控件的字体。

status-bar

使用用于窗口状态栏中的字体。

  • normal
  • italic
  • oblique

font-variant规定字体变体。可能的值:

  • normal
  • small-caps

font-weight规定字体的粗细。可能的值:

  • normal
  • bold
  • bolder
  • lighter
  • 100
  • 300
  • 500
  • 700
  • 900

font-size / line-height规定字号和行高,以像素计。font-family规定字体系列。caption使用标题控件的字体(比如按钮、下拉列表等)。icon使用用于标记图标的字体。menu使用用于菜单中的字体(下拉列表和菜单列表)。message-box使用用于对话框中的字体。small-caption使用用于标记小型控件的字体。status-bar使用用于窗口状态栏中的字体。

再来看一张文字水印的效果图,我们在左上角(10,10)的位置放了一个大小10像素的单词(hello),如下图所示:

注意:这里添加的文字和图片都是硬水印,不是传统的软水印,有很高的安全性。

二者的区别

那么图片和文字二者的渲染机制有什么不同呢?因为控制参数基本一样,几乎看不出有什么区别。接下来看一个实验,我们在同一个位置,同时渲染文字和图片水印,如下图所示:

怎么样?有没有发现问题?是的,图片和文字居然没有相互叠加!!!,我们可是选择的相同位置呀!是的,这就引出了二者渲染机制上一个非常大的区别。

比如我们选择了(10,10)坐标点,开始渲染图片和文字。其中,文字在该坐标点的上侧,图片在该坐标点的下面,如下图所示:

其实,二者的不同主要体现在渲染方向上,文字的渲染方向是从左下角向右上角,图片的渲染方向是从左上角向右下角。

形象一点的话,可以看下图:

好了,我们再进一步验证上面的结论,我们保持文字和图片水印的位置不变,把文字大小从10px增大到50px,图片宽高从50px增大到100px。按照上面的结论,我们可以猜测图片水印大小扩大一倍且展示完全;文字水印也变大了,但是因为渲染方向的缘故,我们只能看到hello单词的下半部分,因为上半部分被隐藏了。那事实是不是这样呢?我们看一下效果吧:

漂亮!我们的结论是正确的。

综上所述

图片和文字水印在渲染方向上有本质的不同,前者向右下角生长,后者向右上角生长。

PS:说到这里,让我想到了堆和栈,一个向高地址增长,一个向低地址增长。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-02-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 玩转音视频 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
黑客帝国中代码雨如何实现?用 canvas 轻松实现代码雨炫酷效果!
演示地址:https://www.albertyy.com/2020/7/codeRain.html
AlbertYang
2020/09/08
2.9K0
黑客帝国中代码雨如何实现?用 canvas 轻松实现代码雨炫酷效果!
自定义 View 系列(一)-坐标系和视图坐标系
View是Android所有控件的基类,接下来借鉴网上的一张图片让大家一目了然(图片出自:http://blog.51cto.com/wangzhaoli/1292313)
Android技术干货分享
2019/03/26
9800
自定义 View 系列(一)-坐标系和视图坐标系
JAVA通过BufferedImage进行图片的绘制,缩放,裁剪,水印等操作
最近开发当中,通过JAVA对图片进行了很多的操作,之前很少接触这方面的知识,特此记录下来
海加尔金鹰
2020/06/08
13.5K0
LiveNVR监控流媒体Onvif/RTSP视频流上面如何叠加水印叠加动态图片示例
监控视频平台播放视频监控的时候,除了满足正常视频播放外,有时还需要方便标记或者防盗用等添加视频水印。有些视频在原始摄像头端就可以添加OSD水印,这种方式最好。 但是有些原始视频没有水印,但是平台端播放的时候又希望有水印,下面介绍下LiveNVR Onvif/RTSP流媒体服务器中如何给监控视频添加水印的。
Marvin1311
2022/07/27
7840
LiveNVR监控流媒体Onvif/RTSP视频流上面如何叠加水印叠加动态图片示例
06. Web大前端时代之:HTML5+CSS3入门系列~HTML5 画布(下)
矩 阵 变 化 其实像 translate(移动),scale(缩放),rotate(旋转)都是特殊的矩阵变换 transform(m11,m12,m21,m22,dx,dy) 替换当前的变换矩阵(transform() 允许您缩放、旋转、移动并倾斜当前的环境) http://www.w3school.com.cn/tags/canvas_transform.asp 参数图解 本质公式 参数详解 水平缩放绘图 m11 水平倾斜绘图 m12 垂直倾斜绘图 m21 垂直缩放绘图 m22 水平移动绘图 dx 垂直
逸鹏
2018/04/09
1.5K0
图形化界面的开发(GUI)_Tkinter库的使用-5(Menu+Canvas+Scale+Scrollbar)
本篇文章主要介绍python第三方库Tkinter库的使用,包括Menu(菜单)控件,Canvas(画布)控件和Scale(滑动)控件以及Scrollbar(滚动条)控件,它们的常用属性和方法以及具体的示例和相应的效果图。
laity
2025/02/27
6300
图形化界面的开发(GUI)_Tkinter库的使用-5(Menu+Canvas+Scale+Scrollbar)
python图形用户界面(六):可视化给图片添加上文字
本系列课程是针对无基础的,争取用简单明了的语言来讲解,学习前需要具备基本的电脑操作能力,准备一个已安装python环境的电脑。如果觉得好可以分享转发,有问题的地方也欢迎指出,在此先行谢过。
叶子陪你玩
2020/04/08
1.6K0
python图形用户界面(六):可视化给图片添加上文字
Java上传图片同时后台直接给MultipartFile对象添加文字水印
现在基本上都是使用Spring、SpringMVC开发JavaWeb项目了,所以这里笔者就以SpringMVC上传为例进行示范。 首先,用你最熟悉的IDE工具(Eclipse、IDEA等)打开你的JavaWeb工程,新建一个util工具类。
游离于山间之上的Java爱好者
2022/08/09
1.6K0
Java上传图片同时后台直接给MultipartFile对象添加文字水印
我见过最好的.NET/C#图片工具(裁剪、缩放、与加水印)
支持.Net Core(2.0及以上)与.Net Framework(4.5及以上)
郑子铭
2023/09/19
3810
我见过最好的.NET/C#图片工具(裁剪、缩放、与加水印)
iOS坐标系探究
APP 在渲染视图时,需要在坐标系中指定绘制区域。这个概念看似乎简单,事实并非如此。
落影
2018/11/01
3K0
【Android UI】Canvas 画布 ④ ( Canvas 坐标系 | Canvas 自身坐标系 | Canvas 绘图坐标系 )
Canvas 状态保存机制 中 , 存在两个栈结构 , 分别是 状态栈 和 图层栈 ;
韩曙亮
2023/03/30
1.8K0
轻松生成小程序分享海报
小程序分享到朋友圈只能使用小程序码海报来实现,生成小程序码的方式有两种,一种是使用后端方式,一种是使用小程序自带的canvas生成;后端的方式开发难度大,由于生成图片耗用内存比较大对服务端也是不小的压力;所以使用小程序的canvas是一个不错的选择,但由于canvas水比较深,坑比较多,还有不同海报需要重现写渲染流程,导致代码冗余难以维护,加上不同设备版本的情况不一样,因此小程序海报生成组件的需求十分迫切。
honey缘木鱼
2018/09/26
2.6K0
轻松生成小程序分享海报
图像处理库Pillow(PIL)的使用-3(实例+详细注释+图片脚本)
Pillow 通过 ImageFilter 类来实现图像的增强效果,该类中集成了不同种类的滤波器,可以通过调用它们从而实现图像的平滑、锐化、边界增强等图像增强操作
laity
2025/02/25
5020
图像处理库Pillow(PIL)的使用-3(实例+详细注释+图片脚本)
H5和微信小游戏 Canvas API 整理前言
这段时间闲下来,系统学习了微信小程序和微信小游戏,发现还是挺有意思的。现在微信小游戏的开发都离不开游戏引擎,用原生小游戏开发工具开发的很少很少。但是毕竟我不是专业游戏开发,所有游戏引擎就不搞了,我们就单纯来看原生微信小游戏开发。
大公爵
2018/10/10
3K0
H5和微信小游戏 Canvas API 整理前言
FFmpeg 滤镜相关
FFmpeg 除了具有强大的封装/解封装、编/解码功能外,还包含了一个非常强大的组建—滤镜avfilter。avfilter组建经常用于进行多媒体的处理与编辑,FFmpeg中包含多种滤镜。
码客说
2019/10/21
2.8K0
音视频八股文(4)--ffmpeg常见命令(3)
按照处理数据的类型,通常多媒体的filter分为:● 音频filter ● 视频filter ● 字幕filter
福大大架构师每日一题
2023/06/09
6070
音视频八股文(4)--ffmpeg常见命令(3)
Android自定义控件坐标系解析
自定义控件要想彻底的把握,掌握Android各种坐标系及一些API的坐标含义毫无疑问是不可忽视的技能,对于控件的摆放位置、触摸点、控件绘制等都离不开坐标系,所以学习自定义控件之前我们就先来谈一下Android坐标系。
SoullessCoder
2021/05/20
9000
音视频八股文(4)--ffmpeg常见命令(3)
● intrafilters: used while encoding (and are thus an integral part of a video codec)
福大大架构师每日一题
2023/04/23
1.1K0
Canvas系列(5):绘制文字
通过前面的学习,我们已经可以绘制简单的图形了。这篇文章主要讲的是,canvas绘制文字,那我们开始吧。
kai666666
2020/10/19
3.6K0
Canvas系列(5):绘制文字
Canvas基础教程(章节1)
  这是我的第一篇Canvas 基础教程,我先简述一下什么是Canvas 。   H5 新增内容,允许脚本语言动态渲染图像,是由 HTML 代码配合高度和宽度属性而定义出的可绘制区域。JavaScript 代码可以访问该区域,类似于其他通用的二维 API,通過一套完整的绘图函数来动态生成图形。一些可能的用途,包括使用 Canvas 构造图形,动画,游戏和图片。 Canvas 对象的属性 height 属性:   画布的高度。和一幅图像一样,这个属性可以指定为一个整数像素值或者是窗口高度的百分比。当这个值改变的时候,在该画布上已经完成的任何绘图都会擦除掉。默认值是 150。 width 属性:   画布的宽度。和一幅图像一样,这个属性可以指定为一个整数像素值或者是窗口宽度的百分比。当这个值改变的时候,在该画布上已经完成的任何绘图都会擦除掉。默认值是 300。 那Canvas 绘制的图形或动画有哪些优点呢?
我不是费圆
2020/10/10
1.3K0
Canvas基础教程(章节1)
推荐阅读
相关推荐
黑客帝国中代码雨如何实现?用 canvas 轻松实现代码雨炫酷效果!
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档