|
本帖最后由 snljty 于 2022-2-17 16:43 编辑
这些功能用Linux下的convert命令等都能转换,但后者有些涉及图片大小变换等功能设置不合适的时候往往会很慢。VideoMach可以把多帧图片做成动画,但免费版有水印。另外ffmpeg也是一个选择,暂且不提。
两者分别需要imageio和pillow库,可以用pip install imageio pillow或者如果有conda,使用conda install imageio pillow也可以。注意没有管理员权限的时候要在管理员权限的cmd做(这两个脚本Linux下使用也没有问题)。
第一个脚本是将当前目录下所有的bmp文件按照文件名顺序制作成动画。
- #! /usr/bin/env python3
- # -*- Coding: UTF-8 -*-
- import imageio
- import os, sys
- import argparse
- parser = argparse.ArgumentParser(description = "Convert all bmp files to a gif animation.")
- parser.add_argument("--duration", type = float, default = 0.1, help = "Duration of each frame")
- parser.add_argument("--reverse", type = bool, default = False, help = "Whether reverse the animation or not")
- parser.add_argument("--loop", type = int, default = 1, help = "Loop how many times, 0 for infinite")
- parser.add_argument("--output", type = str, default = "out.gif", help = "Whether loop the animation or not")
- args = parser.parse_args()
- images = [imageio.imread(filename) for filename in sorted((fn for fn in os.listdir(".") if fn.endswith(".bmp")), reverse = args.reverse)]
- imageio.mimsave(args.output if args.output.endswith(".gif") else ".".join([args.output, "gif"]), images, duration = args.duration, loop =args.loop)
复制代码
有几个参数,用诸如python bmp2gif_animation.py --help可以查看参数用法。具体是--duration指定每帧时长,--reverse指定是否反转动画,--loop指定是循环次数,0是无限循环。--output指定输出文件名。
gif格式动画默认会被输出为工作目录下的out.gif,用浏览器等即可查看。
bmp2gif_animate.py
(916 Bytes, 下载次数 Times of downloads: 16)
另一个脚本是将当前目录下的部分或全部bmp格式图片转化为png格式。bmp通常是未压缩格式,诸如VMD结合Tachyon渲染出的图片,体积很大(尤其有成百上千图片的时候)。png是无损压缩格式,体积小得多。将此脚本保存成bmp2png.py,在有bmp文件的目录下配置好python环境,执行这个脚本,默认转换当前目录下的所有bmp文件,也可以命令行参数指定只转换哪些文件,比如python bmp2png.py 1.bmp 2.bmp只转换1.bmp和2.bmp。
转换完的文件名非拓展名部分和转换前相同,后缀变成png。
- #! /usr/bin/env python3
- # -*- Coding: UTF-8 -*-
- r"""
- Convert all or part of bmp files to png format in current directory.
- """
- import os
- import sys
- from PIL import Image
- fnlist = [_ for _ in os.listdir() if _.endswith('.bmp')] if (len(sys.argv) == 1) else sys.argv[1:].copy()
- for l in fnlist:
- print('Procesing %s ...' % l)
- im = Image.open(l)
- im.save(os.path.splitext(l)[0] + '.png', 'png')
- im.close()
复制代码
bmp2png.py
(467 Bytes, 下载次数 Times of downloads: 11)
|
评分 Rate
-
查看全部评分 View all ratings
|