python实现svg图片转换为png和gif

2025-04-24 17:50

本文主要是介绍python实现svg图片转换为png和gif,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《python实现svg图片转换为png和gif》这篇文章主要为大家详细介绍了python如何实现将svg图片格式转换为png和gif,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下...

python实现svg图片转换为png和gif

实现代码

import cairosvg
import imageio
from PIL import Image
import io
import os


def svg_to_png(svg_path, png_path):
    try:
        cairosvg.svg2png(url=svg_path, write_to=png_path)
        print(f"成功将 {svg_path} 转换为 {png_path}")
    except Exception as e:
        print(f"转换为 PNG 时出错: {e}")


def svg_to_gif(svg_path, gif_path):
    try:
        # 将 SVG 转换为 PNG 图像
        png_bytes = cairosvg.svg2png(url=svg_path)
        image = Image.open(io.BytesIO(png_bytes))

        # 将 PNG 图像保存为 GIF
        image.save(gif_path, save_all=True, append_images=[image], duration=100, loop=0)
        print(f"成功将 {svg_path} 转换为 {gif_path}")
    except Exception as e:
        print(f"转换为 GIF 时出错: {e}")


if __name__ == "__main__":
    current_directory = os.getcwd()
    input_directory = current_directory#os.path.join(current_directory, 'input_svgs')
    output_directory = os.path.join(current_directory, 'output_images')

    if not os.path.exists(output_directory):
        os.makedirs(output_directory)

    for filename in os.listdir(input_directory):
        if filename.endswith('.svg'):
            svg_file = os.path.join(input_directory, filename)
            base_name = os.path.splitext(filename)[0]
            png_file = os.path.join(output_directory, f'{base_name}.png')
            gif_file = os.path.join(output_directory, f'{base_name}.gif')

            svg_to_png(svg_file, png_file)
            svg_to_gif(svg_file, gif_file)

python实现图片格式之间的相互转换

1.概要

图片一般有多种格式,常见的图片格式包括:

  • JPEG(.jpg 或 .jpeg):一种广泛使用的有损压缩格式,适用于摄影图像和网页上的图片。
  • PNG(.png):一种无损压缩格式,支持透明度和更好的图像质量,常用于图标、图形和需要透明背景的图片。该图片是4通道的,外加一个透明通道。如截屏
  • GIF(.gif):一种支持动画和透明度的格式,常用于简单的动画和图标。
  • BMP(.bmp):一种无损格式,存储图像的原始数据,文件大小通常较大,常用于位图处理和打印。
  • TIFF(.tiff 或 .tif):一种高质量的无损格式,支持多页和多种图像深度,常用于印刷和出版。

除了这些常见的格式,还有其他一些图片格式,如 WebP、SVG 等,每种格式都有其特定的用途和优缺点。

图片格式之间的转换涉及到通道数和格式的转换,无尺寸的变换

2.具体代码

from PIL import Image
 
def convert_image(input_path, output_path, output_format):
    # 打开原始图片
    image = Image.open(input_path)
 
    # 获取图片格式
    img_format = image.format
   # 获取通道数
    channels = image.mode
    # 获取尺寸
    width, height = image.size
 
    # 将JPG图片转换为RGB模式(如果图片不是RGB模式)
    if image.mode != "RGB":
        image = image.convert("RGB")
    # 将图片保存为指定格式
    image.save(output_path, format=output_format)
    
    # print(f'Epoch: {best_epoch}, Fold: {best_fold}')
    print(f'输入图片格python式:{img_format}, 输入图片的通道数: {channels}, 输入图片的尺寸: {(width,height)}')
    print("转换完成!")
    print(f'输出图片格式:{output_image_format}, 输出图片的通道数: {image.mode}, 输出图片的尺寸: {(width,height)}')
 
# 设置输入图片路径
input_image_path = "example.jpg"
 
# 设置输出图片路径和格式
output_image_path = "output.png"
output_image_format = "PNG"
 
# 进行图片格式转换
convert_image(input_image_path, output_image_path, output_image_format)

延展:基于Python的图片格式转换工具

介绍

本教程将指导如何使用 Python 编写的图片格式转换工具 IMACon_ter.py,该工具能够将图片从一种China编程格式转换为另一种格式。支持的格式包括:eps, jpeg, jpg, pdf, pgf, png, ps, raw, rgba, svg, svgz, tif, tiff。

安装依赖

在使用工具之前,请确保已安装 matplotlib。可以使用以下命令进行安装:

pip install matplotlib

工具代码

以下是 ImaCon_ter.py 代码:

# version 1.2
# This software is to convert images to other formats.
# Contact: PersusXie@outlook.com if in doubt

import sys
import matplotlib.pyplot as plt
import os

class ImageConverter:
    def __init__(self, filename, new_format="png"):
        '''
        Initialize the class and call the conversion method
        '''
        self.filename = filename
        self.new_format = new_format
        self.convert()

    def convert(self):
        '''
        Convert the image to the specified format.
        Supported formats: eps, jpeg, jpg, pdf, pgandroidf, png, ps, raw, rgba, svg, svgz, tif, tiff
        '''
        if not os.path.isfile(self.filename):
            print(f"Error: {self.filename} not found in the specified path.")
            return
        
        old_format = self.filename.split(".")[-1]
        if self.new_format == old_format:
            print("The input format is the same as the output format. No conversion needed.")
            return

        supported_formats = ['eps', 'jpeg', 'jpg', 'pdf', 'pgf', 'png', 'ps', 'raw', 'rgba', 'svg', 'svgz', 'tif', 'tiff']
        if self.new_format not in supported_formats:
            print(f"This format is not supported. Supported formats are: {', '.join(supported_formats)}")
            return

        img = plt.imread(self.filename)
        height, width = img.shape[:2]
        dpi = 100

        fig = plt.figure(figsize=(width / dpi, height / dpi), dpi=dpi)
        plt.imshow(img)
        plt.axis('off')
        
        new_filename = f"{os.path.splitext(self.filename)[0]}.{self.new_format}"
        plt.savefig(new_filename, format=self.new_format)
        print(f"The new file has been created: {new_filename}")
        plt.close()

def display_help():
    '''
    Display the help message
    http://www.chinasem.cn'''
    print("Usage: python ImaCon_ter.py <filename> <new_format>")
    print("Example: python ImaCon_ter.py image.png svg")
    print("Supported formats: eps, jpeg, jpg, pdf, pgf, png, ps, raw, rgba, svg, svgz, tif, tiff")
    print("Use -h or --help for this help message.")

def main():
    argvs = sys.argv
    if len(argvs) != 3 or argvs[1] in ["-h", "--help"]:
        display_help()
        return
    
    filename = argvs[1]
    new_format = argvs[2]
    ImageConverter(filename, new_format)

if __name__ == "__main__":
    main()

使用方法

保存脚本:将上述代码保存为 ImaCon_ter.py 文件。

打开终端:在终端中导航到保存脚本的目录。

运行工具: 使用以下格式运行脚本:

www.chinasem.cn
python ImaCon_ter.py <filename> <new_format>

例如,将 image.png 转换为 svg 格式:

python ImaCon_ter.py image.png svg

查看结果:转换完成后,新的图片文件将与原文件位于同一目录下,文件名格式为 <原文件名>.<新格式>。

注意事项

确保输入文件的路径正确,且文件格式支持转换。

支持的输出格式有:eps, jpeg, jpg, pdf, pgf, png, ps, raw, rgba, svg, svgz, tif, tiff。

若遇到任何问题,可以查看错误消息,确保输入正确,并参考支持的格式列表。

到此这篇关于python实现svg图片转换为png和gif的文章就介绍到这了,更多相关python svg图片转换内容请搜索China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程China编程(www.chinasem.cn)!

这篇关于python实现svg图片转换为png和gif的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1154355

相关文章

SpringBoot集成redisson实现延时队列教程

《SpringBoot集成redisson实现延时队列教程》文章介绍了使用Redisson实现延迟队列的完整步骤,包括依赖导入、Redis配置、工具类封装、业务枚举定义、执行器实现、Bean创建、消费... 目录1、先给项目导入Redisson依赖2、配置redis3、创建 RedissonConfig 配

Python的Darts库实现时间序列预测

《Python的Darts库实现时间序列预测》Darts一个集统计、机器学习与深度学习模型于一体的Python时间序列预测库,本文主要介绍了Python的Darts库实现时间序列预测,感兴趣的可以了解... 目录目录一、什么是 Darts?二、安装与基本配置安装 Darts导入基础模块三、时间序列数据结构与

Python正则表达式匹配和替换的操作指南

《Python正则表达式匹配和替换的操作指南》正则表达式是处理文本的强大工具,Python通过re模块提供了完整的正则表达式功能,本文将通过代码示例详细介绍Python中的正则匹配和替换操作,需要的朋... 目录基础语法导入re模块基本元字符常用匹配方法1. re.match() - 从字符串开头匹配2.

Python使用FastAPI实现大文件分片上传与断点续传功能

《Python使用FastAPI实现大文件分片上传与断点续传功能》大文件直传常遇到超时、网络抖动失败、失败后只能重传的问题,分片上传+断点续传可以把大文件拆成若干小块逐个上传,并在中断后从已完成分片继... 目录一、接口设计二、服务端实现(FastAPI)2.1 运行环境2.2 目录结构建议2.3 serv

C#实现千万数据秒级导入的代码

《C#实现千万数据秒级导入的代码》在实际开发中excel导入很常见,现代社会中很容易遇到大数据处理业务,所以本文我就给大家分享一下千万数据秒级导入怎么实现,文中有详细的代码示例供大家参考,需要的朋友可... 目录前言一、数据存储二、处理逻辑优化前代码处理逻辑优化后的代码总结前言在实际开发中excel导入很

通过Docker容器部署Python环境的全流程

《通过Docker容器部署Python环境的全流程》在现代化开发流程中,Docker因其轻量化、环境隔离和跨平台一致性的特性,已成为部署Python应用的标准工具,本文将详细演示如何通过Docker容... 目录引言一、docker与python的协同优势二、核心步骤详解三、进阶配置技巧四、生产环境最佳实践

Python一次性将指定版本所有包上传PyPI镜像解决方案

《Python一次性将指定版本所有包上传PyPI镜像解决方案》本文主要介绍了一个安全、完整、可离线部署的解决方案,用于一次性准备指定Python版本的所有包,然后导出到内网环境,感兴趣的小伙伴可以跟随... 目录为什么需要这个方案完整解决方案1. 项目目录结构2. 创建智能下载脚本3. 创建包清单生成脚本4

SpringBoot+RustFS 实现文件切片极速上传的实例代码

《SpringBoot+RustFS实现文件切片极速上传的实例代码》本文介绍利用SpringBoot和RustFS构建高性能文件切片上传系统,实现大文件秒传、断点续传和分片上传等功能,具有一定的参考... 目录一、为什么选择 RustFS + SpringBoot?二、环境准备与部署2.1 安装 RustF

Nginx部署HTTP/3的实现步骤

《Nginx部署HTTP/3的实现步骤》本文介绍了在Nginx中部署HTTP/3的详细步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录前提条件第一步:安装必要的依赖库第二步:获取并构建 BoringSSL第三步:获取 Nginx

MyBatis Plus实现时间字段自动填充的完整方案

《MyBatisPlus实现时间字段自动填充的完整方案》在日常开发中,我们经常需要记录数据的创建时间和更新时间,传统的做法是在每次插入或更新操作时手动设置这些时间字段,这种方式不仅繁琐,还容易遗漏,... 目录前言解决目标技术栈实现步骤1. 实体类注解配置2. 创建元数据处理器3. 服务层代码优化填充机制详