如何将eps文件转换为具有维护名称的png文件?

时间:2014-05-05 10:22:55

标签: python linux bash png

在Linux上的某个文件夹中,我有文件* .eps,我想将它们转换为* .png并保留名称,例如:ball.eps to ball.png。我试着这样做:

convert *.eps *.png

但结果并不令人满意。要做到这一点,我需要用Python或bash编写一些简单的脚本,那么如何从文件夹中获取文件名,例如在Python?感谢。

3 个答案:

答案 0 :(得分:2)

编辑:如果您希望文件名相同,我甚至不认为您需要循环。你可以这样做:

mkdir backup_directory && cp *.eps backup_directory
mogrify -format png *.eps

mogrifyconvert类似,但它会就地修改文件,因此如果您不想丢失原件,则需要在执行此操作之前将其备份到其他位置。


使用循环,您可以在bash中执行此操作:

for f in *.eps; do b=$(basename "$f" .eps); convert "$f" "$b".png; done

您尝试中的通配符*将扩展到您使用它的所有文件的列表,这不是您想要的。通过使用循环变量"$f"而不是一次只使用一个文件。

您也可以避免拨打basename并使用:

for f in *.eps; do convert "$f" ${f%eps}png; done

这会从文件名末尾切断eps并向其添加png

答案 1 :(得分:2)

尝试以下脚本:

#!/bin/bash

for file in *.eps
do
    filename=$(basename "$file")
    filename=${filename%.*}
    convert $file $filename.png
done

希望它适合你。

  1. for file in *.eps提供扩展名为.eps的所有文件的列表
  2. filename=$(basename "$file")提供文件的原始名称
  3. filename=${filename%.*}删除扩展名.eps
  4. convert $file $filename.png将文件转换为.png扩展名

答案 2 :(得分:0)

由于我在寻找一种解决方法convert: not authorized的同时登陆而又不放松整个系统的安全策略,因此我不妨对@ vaibhav-jain的答案进行一些改进。

首先,如果要将EPS光栅化为PNG,以下是跳过ImageMagic并直接转到Ghostscript的方法:

#!/bin/sh

for file in *.eps; do
    gs -dSAFER -dEPSCrop -r300 -sDEVICE=pngalpha -o "${file%.*}.png" "$file"
done
  • -dSAFER将Ghostscript置于沙盒模式,其中Postscript代码只能与您在命令行上指定的文件进行交互。 (是的,后记is turing-complete。)
  • -dEPSCrop要求Ghostscript不要将其填充到可打印页面的大小。 (details
  • 如果要光栅化EPS,则可能不希望使用默认值72 DPI,因此-r300指定300 DPI。 (details
  • -sDEVICE是选择输出格式的方式(其他选择请参见手册的Devices section。)
  • -o-dBATCH -dNOPAUSE -sOutputFile=details)的简写

其他更改:

  • 除非在希望输出文件与输入文件位于同一文件夹的情况下,否则不必剥离开头的路径... ,但是,您可以将$(basename "$file")替换为${file##*/}(直到最后一个/的带状字符)以坚持使用shell内置。
  • 如果您使用的是Zsh,并且想编写一次性的单行代码,则Zsh允许嵌套替换,因此${${file##*/}%.*}是有效的。
  • 就样式而言,我更喜欢for ...; do而不是将do放在自己的行上。
  • 脚本中的任何内容都不需要bash,因此在这种情况下使用#!/bin/sh可以在基于Debian的系统上获得更轻便的运行时环境(dash),并且与不需要的BSD兼容默认情况下安装/bin/bash