一篇文章带你了解SVG 转换知识

简介: 一篇文章带你了解SVG 转换知识

SVG 转换在SVG图像中创建的形状。例如,移动,缩放和旋转形状。这是显示垂直或对角线文本的便捷方法。

一、转换简单示例

例:

<svg xmlns="http://www.w3.org/2000/svg"
   xmlns:xlink="http://www.w3.org/1999/xlink">

   <rect x="50" y="50" height="110" width="110"
         style="stroke:#ff0000; fill: #ccccff" transform="translate(30) rotate(45 50 50)">
   </rect>
   <text x="70" y="100" transform="translate(30) rotate(45 50 50)"
   >nhooo.com</text>
</svg>

运行效果:

注:

元素的transform 和 的transform属性。

该属性指定要应用于形状的变换。在此示例中,应用了平移和旋转。两者都将在本文后面解释。

二、哪些元素可以转换?

可以将变换应用于所有SVG形状。还可以将变换应用于 元素,从而一次性有效地变换整个元素组。也可以变换渐变和填充图案。

三、转换函数

转换函数不会自行转换SVG形状,而是会转换该形状的基础坐标系。因此,即使宽度以倍数显示,宽度20乘以2的形状在逻辑上仍具有20的宽度。

1. 移动 translate()

translate()函数移动形状。将x 和 y 值传递给translate()的函数。

translate(50,25)

将形状沿x轴移动50个单位,并沿y轴移动25个单位。显示了两个位置相等且大小相等的形状,有无平移。

例:

<svg width="500" height="150">
<rect x="20" y="20" width="50" height="50" style="fill: #cc3333" />
<rect x="20" y="20" width="50" height="50" style="fill: #3333cc" transform="translate(75,25)">
</rect>
</svg>

运行效果:

与第一个(红色)形状相比,第二个(蓝色)形状沿x轴移动75个单位,沿y轴移动25个单位。

2. 旋转 rotate()

rotate()函数围绕点0,0旋转形状。

显示一个矩形(轮廓)和旋转15度后的相等矩形(实心)。

<svg width="500" height="150">
<rect x="20" y="20" width="40" height="40" style="stroke: #3333cc; fill:none;"></rect>

<rect x="20" y="20" width="40" height="40" style="fill: #3333cc" transform="rotate(15)"></rect>
</svg>

运行效果:

如果要绕除0,0以外的其他点旋转,则将该点的x和y坐标传递给transform函数。

显示了一个非旋转的矩形(轮廓)和一个相等的矩形(实心)围绕其中心旋转15度。

例:

<svg width="500" height="150">
<rect x="20" y="20" width="40" height="40"
     style="stroke: #3333cc; fill:none;"
      ></rect>

<rect x="20" y="20" width="40" height="40"
     style="fill: #3333cc"
     transform="rotate(15, 40, 40)"
      ></rect>
</svg>

运行效果:

所有旋转都是顺时针旋转,其度数从0到360。如果要逆时针旋转,请将负的度数传递给rotate()函数。

3. 缩放 scale()

3.1 scale()函数简介

scale()函数按比例放大或缩小形状。scale()函数可缩放形状尺寸及其位置坐标。因此,以20乘以2的比例缩放的宽度为20且高度为30的矩形位于20,20处,其宽度为40且高度为60。

scale()函数还可以缩放形状的笔触宽度。

3.2 案例

显示了一个位于10,0处,宽度为20且高度为20的矩形(蓝色),以及一个等比例的矩形(黑色),其缩放比例为2。

<svg width="500" height="150">
<rect x="10" y="10" width="20" height="30" style="stroke: #3333cc; fill:none;"></rect>

<rect x="10" y="10" width="20" height="30" style="stroke: #000000; fill:none;" transform="scale(2)"></rect>
</svg>

运行效果:

注意

矩形的位置和大小是如何缩放的。

可以在x轴和y轴上按其他因子缩放形状。为此,可以向scale()函数提供x-scale和y-scale参数。

如下所示:

scale(2,3);

将沿x轴将形状缩放2倍,沿y轴将形状缩放3倍。

例:

<svg width="500" height="150">
<rect x="10" y="10" width="20" height="30" style="stroke: #3333cc; fill:none;"></rect>

<rect x="10" y="10" width="20" height="30" style="stroke: #000000; fill:none;" transform="scale(2,3)"></rect>
</svg>

运行效果:

注意:

缩放后的矩形(黑色)的笔划宽度也是如何缩放的,并且在x轴和y轴上的缩放比例不同。

4. 偏斜 skew()

skewX()和skewY()函数偏斜x轴和y轴。实际上,这些函数会根据以度为单位指定的某个角度来倾斜给定的轴。

显示具有不同skewX()值的矩形的一些示例。

<svg width="500" height="150">
      <rect x="10" y="10" width="20" height="30" style="stroke: #3333cc; fill:none;" />

      <rect x="50" y="10" width="20" height="30" style="stroke: #000000; fill:none;" transform="skewX(10)" />
      <rect x="100" y="10" width="20" height="30" style="stroke: #000000; fill:none;" transform="skewX(45)" />
      <rect x="150" y="10" width="20" height="30" style="stroke: #000000; fill:none;" transform="skewX(60)" />
    </svg>

运行效果:

skewX()函数使垂直线看起来像是按给定角度旋转了。

因此,skewY()函数使水平线看起来像是旋转了给定角度。

例:

<svg width="500" height="150">
      <rect x="10" y="10" width="20" height="30" style="stroke: #3333cc; fill:none;" />

      <rect x="50" y="10" width="20" height="30" style="stroke: #000000; fill:none;" transform="skewY(60)" />
      <rect x="100" y="10" width="20" height="30" style="stroke: #000000; fill:none;" transform="skewY(45)" />
      <rect x="150" y="10" width="20" height="30" style="stroke: #000000; fill:none;" transform="skewY(10)" />
</svg>

四、总结

本文基于HTML基础,介绍了图像的转换。详细的介绍了如何运用转换函数,进行图像移动、缩放、转动、拉长或拉伸等一系列操作。通过案例的分析,丰富的效果图,能够让读者更好的理解。

希望能够帮助你更好的理解SVG中图像转换。

想学习更多前端、Python爬虫、大数据等计算机知识,请前往:http://pdcfighting.com/

相关文章
|
SQL 关系型数据库 MySQL
docker(15):以docker 方式启动 单机版 tidb
1,关于tidb tidb 其灵感来自于 Google 的 F1 和 Google spanner, TiDB 支持包括传统 RDBMS 和 NoSQL 的特性。 sql 完全支持mysql,同时人家还是一个分布式数据库。 什么分库分表都弱爆了,这个直接分,超级方便。而且还是开源的。 是国内的 技术大牛 黄东旭 的公司 pincap 开发的。 就是之前写 codi
7365 0
[simulink] --- simulink模块(二)
[simulink] --- simulink模块(二)
2809 0
|
存储 编解码 vr&ar
用C++实现视频编码器:FFmpeg与SDL技术结合,轻松编写高效编解码器
用C++实现视频编码器:FFmpeg与SDL技术结合,轻松编写高效编解码器
1723 0
|
4月前
|
机器学习/深度学习 人工智能 自然语言处理
UI-Ins:让 GUI 智能体真正“看懂”用户指令的新范式
通义实验室联合人大发布全新GUI Grounding模型UI-Ins,首创“指令即推理”范式,通过多视角动态推理实现SOTA性能,在五大基准全面领先,支持开源复现与应用。
746 1
|
4月前
|
存储 数据采集 机器学习/深度学习
104_持续预训练与领域适应:大模型专业能力提升指南
在人工智能领域快速发展的今天,大语言模型(LLM)已经成为自然语言处理的核心驱动力。随着GPT系列、PaLM、LLaMA等模型的涌现,大模型的通用能力得到了显著提升。然而,在实际应用中,我们经常面临一个关键挑战:如何使通用大模型更好地适应特定领域的专业知识和任务需求?持续预训练(Continual Pre-training)与领域适应(Domain Adaptation)技术正是解决这一问题的关键路径。
|
7月前
|
存储 人工智能
想让小模型‘偷师’大模型,如何选择合适的知识蒸馏技术?
本文三桥君围绕知识蒸馏技术展开。在人工智能领域,训练大模型面临挑战,知识蒸馏让小模型 “偷师” 大模型。文中介绍其两阶段(预训练、后训练 / 微调)及三种常用技术(软标签、硬标签、协同蒸馏),总结优缺点,助你理解应用该技术。
330 0
|
缓存 Java Linux
如何解决 Linux 系统中内存使用量耗尽的问题?
如何解决 Linux 系统中内存使用量耗尽的问题?
1246 59
|
安全 网络安全 开发者
OpenWRT搭建个人web站点并结合内网穿透实现公网远程访问
OpenWRT搭建个人web站点并结合内网穿透实现公网远程访问
|
传感器 缓存 芯片
IMU调试方案
本文是关于IMU(惯性测量单元)QMI8658C型号的调试方案,包括I2C和SPI通信协议的详细介绍、接线方法、工作原理以及优缺点分析,并提供了相关的数据手册和开发资源链接。
433 4
IMU调试方案
|
机器学习/深度学习 人工智能 安全
北大领衔,多智能体强化学习研究登上Nature子刊
【10月更文挑战第1天】近日,北京大学领导的研究团队在《Nature》子刊上发表了一篇关于多智能体强化学习的论文,提出了一种高效且可扩展的框架,解决了大规模网络控制系统中的决策问题。该框架通过局部通信避免了集中式和独立学习的缺点,在交通、电力等领域的实验中展现了卓越性能。然而,其在更复杂系统中的效果及计算复杂度仍需进一步验证。论文链接:https://www.nature.com/articles/s42256-024-00879-7。
336 3