首页 > 其他分享 >改变上传的svg颜色并生成新的svg文件,再上传或者更新至服务器上

改变上传的svg颜色并生成新的svg文件,再上传或者更新至服务器上

时间:2023-12-19 17:34:20浏览次数:19  
标签:translateY svg transform let file 服务器 上传

最近有个需求,就是把上传的svg改颜色,并生成新的svg图片上传值服务器上

<!DOCTYPE html>
<html>

<head>
    <title>上传svg并修改颜色得到新的svg文件</title>
    <style>
        #svgContainer{
            padding: 50px;
            display: inline-block;
        }
        .shake{
            animation: shake 1s infinite;
        }
        .diffusion{
            animation: diffusion 1s infinite;
        }

        @keyframes shake {
            0% { transform: translateY(0); }
            10%,90% { transform: translateY(-2px); }
            20%, 80% { transform: translateY(-4px); }
            30%,70% { transform: translateY(-6px); }
            40%,60% { transform: translateY(-8px); }
            50% { transform: translateY(-10px); }
            100% { transform: translateY(0); }
        }
        @keyframes diffusion {
            0% { transform:  scale(1)}
            10%,90% { transform: scale(1.1); }
            20%, 80% { transform: scale(1.2); }
            30%, 70% { transform: scale(1.3); }
            40%,60% { transform: scale(1.4); }
            50% { transform: scale(1.5); }
            100% { transform: scale(1); }
        }
    </style>
</head>

<body>
    <input type="file" id="svgUpload" accept=".svg">
    <button id="uploadButton">随机颜色</button>
    <button id="beatBtn" onclick="changeClassFn('shake')">跳动</button>
    <button id="diffusionBtn" onclick="changeClassFn('diffusion')">扩散</button>
    <br />
    <div id="svgContainer"></div> <!-- 用于显示 SVG -->
</body>
<script src="./index.js"></script>
</html>

index.js中的代码如下:

 const getRandomHexColor = () => {  // 生成随机颜色
        let letters = '0123456789ABCDEF';
        let color = '#';
        for (var i = 0; i < 6; i++) {
            color += letters[Math.floor(Math.random() * 16)];
        }
        return color;
    }
    document.getElementById('svgUpload').addEventListener('change', (ev) => {
        let file = ev.target.files[0];
        if (file) {
            console.log(file, '上传成功的文件')
            let reader = new FileReader();
            reader.onload = (e) => {
                document.getElementById('svgContainer').innerHTML = e.target.result;
            }
            reader.readAsText(file);
        }
    })
    document.getElementById('uploadButton').addEventListener('click', () =>{
        changeClassFn('')
        let fileInput = document.getElementById('svgUpload');
        let file = fileInput.files[0];
        if (file) {
            let reader = new FileReader();
            reader.onload = (e) => {
                document.getElementById('svgContainer').innerHTML = e.target.result;
                // 在这里可以添加修改 SVG 颜色的代码
                changeSvgColor(getRandomHexColor()); 
            };
            console.log(file, '修改后的svg文件')
            reader.readAsText(file);
        // 上传新的文件至服务器 uploadFile(file); } }); const uploadFile = (file) => { let formData = new FormData(); formData.append('file', file); console.log(formData) fetch('上传图片地址', { method: 'POST', body: formData, }).then((response) => response.json()).then((result) => { console.log("Success:", result); }) } const changeSvgColor = (color) => { let svg = document.getElementById('svgContainer').querySelector('svg'); if (svg) { // 修改 SVG 所有路径的填充颜色 svg.querySelectorAll('path').forEach((path) => { path.style.fill = color; }); } } const changeClassFn = (className) => { document.getElementById('svgContainer').className = className; }

 

标签:translateY,svg,transform,let,file,服务器,上传
From: https://www.cnblogs.com/huchangjun/p/17914285.html

相关文章

  • 恒创科技:云服务器1核2G和2核4G差距大吗?
    ​云服务器是运行在云计算平台上的虚拟服务器,当您创建云服务器时,云提供商会为您分配一定数量的虚拟化硬件,例如CPU、内存等,而在这些分配的配置中,1核2G和2核4G通常算是主流的选择,那么,这些配置参数到底是什么意思呢?它们之间差距大吗?本文主要从处理器核心数量、内存容量、建站选......
  • 物联网架构实例—解决Linux(Ubuntu)服务器最大TCP连接数限制
    1.前言:在对物联网网关进行压测的时候,发现在腾讯云部署网关程序,设备接入数量只能达到4000多个长连接,之后就再也无法接入终端了。之前在阿里云部署的时候明明可以到达2万左右,而且腾讯云的这个服务器比阿里云的硬件配置还要高上不少,不至于那么差,随后查阅大量资料终于完美解决。2.解......
  • ​物理服务器
    物理服务器物理服务器是一种独立的、非虚拟化的计算机设备,它通常被用作高性能应用、数据库、存储和网络等关键业务应用的运行平台。物理服务器可以提供更高的处理能力、更好的安全性和可靠性,但需要用户自行维护和管理。物理服务器的形式多种多样,常见的有塔式服务器、机架服务器和......
  • C语言实现TCP CS模型代码,客户端服务器
    服务端将接受客户端发送的数据并将其转换成大写形式,然后再发送给客户端,客户端将发送一个字符串给服务器,并显示来自服务器的响应内容。服务器点击查看代码#include<stdio.h>#include<stdlib.h>#include<string.h>#include<sys/socket.h>#include<netinet/in.h>#......
  • 解决Windows服务器远程桌面连接无法连接的问题
    远程桌面连接是Windows服务器中一种常用的远程管理方式,但有时候我们可能会遇到无法连接到远程桌面的问题。本文将介绍一些常见的解决方法,帮助您解决Windows服务器远程桌面连接无法连接的问题。1.确保远程桌面服务已启用:首先,我们需要确保Windows服务器上的远程桌面服务已启用。可以......
  • springboot 记录使用log4j与logback发送日志到syslog服务器
    Linux服务器配置编辑/etc/rsyslog.conf文件。(我的在这里,根据自己系统查看)#取消注释这几行$ModLoadimudp$UDPServerRun514#ProvidesTCPsyslogreception$ModLoadimtcp$InputTCPServerRun514..........#末位追加:local2.info/var/log/login_info.log......
  • Vue+Node实现大文件上传和断点续传
    源代码断点续传、分片上传、秒传、重试机制文件上传是开发中的难点,大文件上传及断点续传难点中的细节及核心技术点。 element-ui框架的上传组件,是默认基于文件流的。数据格式:form-data;传递的数据:file文件流信息;filename文件名字通过fileRead.readAsDataURL(file)......
  • WPF使用SVG
    使用svg创建path<Window.Resources><Geometryx:Key="Icon-Close">M512.72533385.12c235.3920426.538667191.146667426.538667426.581333s-191.146667426.581333-426.538667426.581334c-235.4346670-426.581333-191.146667-426.581......
  • Python获取服务器IP地址
    一、依赖importsocket二、获取#获取计算机名称hostname=socket.gethostname()#获取本机IPip=socket.gethostbyname(hostname)三、结果......
  • Vue 大文件上传和断点续传的实现
    实现Vue大文件上传和断点续传需要掌握以下几个步骤:分片:将大文件分割成若干个小块,便于上传。一般采用Blob对象或ArrayBuffer来实现。上传:将分片文件上传到服务器。可以使用XMLHttpRequest、Fetch等工具进行上传。断点续传:如果上传失败或上传过程中断开连接,需要记录已上......