在之前的几篇文章中,介绍了业界中比较火爆的图片技术SVG(Scalable Vector Graphics),比如 Iconfont(矢量图标)+iconmoon(图标svg互转)配合javascript来打造属于自己的个性化社交分享系统 ,我们可以使用svg来打造精美炫酷的分享小图标(icon),这一次我们使用python来将普通的静态的网站logo图片转换为带路径(path)的svg图片,这样就可以让网站logo能够变成动态的,作为一名不折腾不舒服斯基,一枚炫酷自带动画的网站logo自然能够满足我们的折腾欲,同时亦能击中我们的虚荣心。

首先第一步,先要将静态图做一步转换,以本站的logo作为例子,原理就是在普通的RGB图像阵列中将其像素进行转码操作,并且输出为svg特有的路径属性,当然了使用python进行图像操作少不了会用到鼎鼎大名的pillow模块import sys

import os

from PIL import Image

def convertPixel(r, g, b, a=1):

color = "#%02X%02X%02X" % (r, g, b)

opacity = a

return (color, opacity)

for r in sys.argv[1:]:

root, ext = os.path.splitext(r)

image = Image.open(r)

mode = image.mode

pixels = image.load()

width, height = image.size

print(image.mode)

if "RGB" in mode:

output = "" % (width, height, width, height)

for r in range(height):

for c in range(width):

color, opacity = convertPixel(*pixels[c, r])

output += "" % (c, r, color, opacity)

output += ""

with open(root + ".svg", "w") as f:

f.write(output)

写好脚本,只需要执行该脚本,参数作为图片名称,就可以生成一个同名的svg图片python3 png_to_svg.py logo.png

需要注意一点,这里有一个坑,在进行像素点矢量转换的时候,图片模式只支持RGB三色模式,以png为例子,如果是全彩的24位图是支持的,但是8位的png图显然无法进行转换,因为它的图片模式是P模式,在这种情况下,使用python脚本对图片进行转换之前,建议用photoshop对图片进行简单的模式转换

OK,我们转换好图片之后,可以用编辑器打开svg格式的图片

width="255.000000pt" height="200.000000pt" viewBox="0 0 255.000000 200.000000"

preserveAspectRatio="xMidYMid meet">

fill="#2b2b2b" stroke="none">

可以看到一个复杂的png位图已经被我们分解成为了n个path路径,这些路径可以被随意的加上选择器,根据选择器我们就可以动态的为其加上炫酷的动画。

有的人说了,我不懂python,有没有别的方法进行图片转换,答案是可以的,比如adobe旗下的Illustrator可以做手动勾勒一个图片的路径,然后进行转换,还有一个在线转换平台:convertio.co,也可以做类似的操作。

图片处理好之后,我们就可以发挥想象力给logo加上喜欢的动画了,郭富城怎么唱的来着?动起来~~动起来~~

这里值得一提的是,svg的path标签完全支持css3的transform动画,二者结合起来简直天衣无缝

利用transform属性可以做一些小特效,比如我想让logo悬停的时候改变颜色,并且发生纵向位移.v3u-icon-group{

pointer-events: fill;

}

.v3u-icon1 {

transition: 600ms all;

}

.v3u-icon-group:hover .v3u-icon1 {

transform:translateY(-100px);

fill: #4099ff;

}

效果是这样的:

有没有很炫酷的感觉,亦或者,你想让它变瘦一点.v3u-icon-group{

pointer-events: fill;

}

.v3u-icon1 {

transition: 600ms all;

}

.v3u-icon-group:hover .v3u-icon1 {

transform: rotateY(80deg);

fill: #4099ff;

}

或者干脆想翻个跟头.v3u-icon-group{

pointer-events: fill;

}

.v3u-icon1 {

transition: 600ms all;

}

.v3u-icon-group:hover .v3u-icon1 {

fill: #4099ff;

transform:rotate(45deg);

}

当然了,这些都是相对简单的动画,更加有意思的特效还需要进行组合和设计,这里只是抛砖引玉,值得一提的是,我们用到了一个很有意思的属性:pointer-events

pointer-events是CSS和SVG同时都具有的属性。它的初始值是auto,效果和没有定义pointer-events属性相同,鼠标不会穿透当前层。在SVG中,该值和visiblePainted的效果相同。在SVG2.0标准文档中新添加了pointer-events的值为bounding-box这个属性,当它的值为bounding-box时,在围绕元素的矩形区域也能接收定义好的事件交互,不过浏览器支持还不是很好,到目前为止还只有chrome65以上才支持。当pointer-events的值为none,即表示元素不再是鼠标事件的目标,鼠标不再监听当前层而去监听下面的层中的元素。但是如果它的子元素设置了pointer-events为其它值,比如auto,鼠标还是会监听这个子元素的,说白了,就是防止悬停元素触发动画时,在执行动画运动过程中二次触发,导致“抖动”的情况。

结语:使用python3结合svg,可以让你的网站更加生动有趣,现在浏览器对SVG支持的越来越好,可以放心大胆的使用pointer-events,也可以很好的改善SVG的交互体验

python图片转svg_Python3.7将普通图片(png)转换为SVG图片格式并且让你的网站Logo(图标)从此”动”起来...相关推荐

  1. Python3.7将普通图片(png)转换为SVG图片格式并且让你的网站Logo(图标)从此”动”起来

    在之前的几篇文章中,介绍了业界中比较火爆的图片技术SVG(Scalable Vector Graphics),比如Iconfont(矢量图标)+iconmoon(图标svg互转)配合javascrip ...

  2. Inkscape如何将png图片转换为svg图片并且不失真

    前言 最近迷上了作图,png图片转成svg图片切不失真 操作如下: 转换图片格式的软件相信大家也用过不少个吧,转换图片格式的目的主要就是为了让经过制作以后的图片能在更多平台或软件里面用其不同的格式展现 ...

  3. Web前端笔记-HTML加载SVG图片及简单修改

    加载的用img标签,就可以了,就把他当成普通图片即可,如: <img src="icon/cash-coin.svg" /> 图片是这样的: 在前端的效果就这样了. 简 ...

  4. 【解决方案】LaTeX插入svg图片

    LaTeX插入svg图片的解决方案 今天在写论文时,想在论文里插入svg图片,遇到了问题,百度了一下方法,发现LaTeX不支持插入svg图片,在捣鼓了一下之后,发现基本的方法不是失效就是比较麻烦,本文 ...

  5. python使用fpdf创建页眉、页脚并嵌入图片

    python使用fpdf创建页眉.页脚并嵌入图片 pip install fpdf FPDF类附带了页眉和页脚函数,但是接口本身不做任何事情. 用户必须扩展这些类并为它们实现自己的函数. from f ...

  6. 使用python中的socket实现服务器和客户端,并完成图片的传输

    使用python中的socket实现服务器和客户端,并完成图片的传输. 2018年03月09日 16:05:23 阅读数:301 socket服务器代码: [python] view plaincop ...

  7. python贴吧爬虫-Python 爬虫练习: 爬取百度贴吧中的图片

    背景:最近开始看一些Python爬虫相关的知识,就在网上找了一些简单已与练习的一些爬虫脚本 实现功能:1,读取用户想要爬取的贴吧 2,读取用户先要爬取某个贴吧的页数范围 3,爬取每个贴吧中用户输入的页 ...

  8. 通过python建立一个web服务查看服务器上的文本、图片、视频等文件

    通过python建立一个web服务查看服务器上的文本.图片.视频等文件 文章目录: 1 在服务器端开启一个服务 2 在本地浏览器中输入服务器的ip地址 1 在服务器端开启一个服务 python -m ...

  9. Python语言学习:利用python获取当前/上级/上上级目录路径(获取路径下的最后叶目录的文件名、合并两个不同路径下图片文件名等目录/路径案例、正确加载图片路径)之详细攻略

    Python语言学习:利用python获取当前/上级/上上级目录路径(获取路径下的最后叶目录的文件名.合并两个不同路径下图片文件名等目录/路径案例.正确加载图片路径)之详细攻略 目录 利用python ...

  10. Python之tkinter:动态演示调用python库的tkinter带你进入GUI世界(Button展示图片事件)

    Python之tkinter:动态演示调用python库的tkinter带你进入GUI世界(Button展示图片事件) 导读 动态演示调用python库的tkinter带你进入GUI世界(Button ...

最新文章

  1. vue连线 插件_【Vue CLI】手把手教你撸插件
  2. 上市 10 天就遭破解!AirTag 还能买吗?
  3. 批量单变量求解 office wps 单变量求解比较
  4. android 使用以太网共享4g网络_案例 | 东土科技Aquam系列重新定义列车骨干网络!...
  5. boost::geometry::partition用法的测试程序
  6. Oracle 11g中文版高清视频教程
  7. Hibernate【inverse和cascade属性】知识要点
  8. E. Company(Codeforces Round #520 (Div. 2))
  9. python第九天(9-33)
  10. java map的应用_JAVA map的简单应用
  11. Redis Cluster部署、管理和测试
  12. 复旦提出LReasoner: 用于文本逻辑推理的逻辑驱动上下文扩展和数据增强方法
  13. JSP简介以及各种内置对象的用法
  14. 谷歌研发开源协议,助听器有望原生支安卓系统
  15. win10有源信号分辨率怎么调_示波器高灵敏度小信号测量的注意事项
  16. java 可以做前端么_java怎么做前端?Java web前端必备技术
  17. python水仙花数的代码_Python水仙花数的编程代码写法
  18. window10安装vnc无法使用,window10安装vnc无法使用的原因和解决办法
  19. CSS - 选择器优先级介绍
  20. 网络是怎样连接的?从浏览器输入URL开始

热门文章

  1. go语言编程前景怎么样?国内Go语言布道师许式伟这样说
  2. WiFi 802.11可调参数说明---电源管理调整(聆听间隔/DTIM/ATIM)
  3. Visual Studio 2017 下创建ASP.NET网站程序详细步骤
  4. 如何在Outlook上正确设置雅虎邮箱
  5. 解决登录雅虎邮箱提示您在所用浏览器上启用Javascript 功能
  6. 微信开放平台应用申请
  7. navicat导数据速度_快速解决mysql导数据时,格式不对、导入慢、丢数据的问题
  8. STM8 GPIO输入输出模式
  9. 草料二维码生成怎么用php代码实现
  10. 手机内存垃圾不会清理?学会删除这几个文件夹,瞬间腾出几个G