如何将EPS文件转换为PNG文件并保持文件名?

3
在Linux的某个文件夹中,我有一些*.eps文件,我想将它们转换成*.png格式并保持原来的文件名,例如:ball.eps转换为ball.png。我尝试执行以下命令:
convert *.eps *.png

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

3个回答

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
自从我在寻找修复“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代码只能与您在命令行中指定的文件交互。(是的,Postscript是图灵完备的。)
  • -dEPSCrop 要求Ghostscript不要将其填充到可打印页面的大小。(详见详情
  • 如果您正在栅格化EPS,则可能不希望默认使用72 DPI,因此-r300 指定了300 DPI。(详见详情
  • -sDEVICE 是选择输出格式的方法(请参阅手册的设备部分以获取其他选项。)
  • -o-dBATCH -dNOPAUSE -sOutputFile= 的简写形式。(详见详情
关于其他更改:
  • 除非你希望输出文件不放在与输入文件相同的文件夹中,否则无需去掉前导路径... 在这种情况下,你可以将 $(basename "$file") 替换为 ${file##*/}(删除包括最后一个 / 在内的所有字符)以保持 shell 内置。
  • 如果你使用 Zsh 并想编写一行命令,Zsh 允许嵌套替换,因此 ${${file##*/}%.*} 是有效的。
  • 作为样式问题,我更喜欢使用 for ...; do 而不是将 do 放在自己的一行上。
  • 脚本中没有需要 bash 的内容,因此在这种情况下使用 #!/bin/sh,你将得到一个更轻量的运行时环境(dash)在基于 Debian 的系统上,并且兼容不默认安装 /bin/bash 的 BSD。

2

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

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

mogrify类似于convert,但它会直接修改文件,因此如果您不想丢失原始文件,需要在执行此操作之前将其备份到其他位置。


使用循环,您可以在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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接