首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将.png转换为.svg文件的Shell函数

将.png转换为.svg文件的Shell函数
EN

Code Review用户
提问于 2018-10-27 11:29:15
回答 1查看 190关注 0票数 4

我需要将一些.png格式的自定义图标转换为.svg格式,并且不想为此使用在线转换器。

我在网上找不到开箱即用的解决方案,所以我用我能找到的东西创建了自己的解决方案。

出于好奇心和学习意愿,以及可能服务于其他人的需要,试图完成同样的任务,我在这里上传它作为我的第一篇文章。

我对图像格式的知识充其量是最低限度的。我对shell脚本的了解还处于初级阶段。我的编码知识总体上是爱好水平。

I希望任何评论都能帮助

  1. 提高代码的整体质量和可读性(也有利于未来的维护)
  2. 提高了实际转换的质量,使其降低了损耗。
  3. 如果可能的话,可以删除任何不必要的依赖项,因为当前使用的是默认情况下未安装在我的arch系统上的potrace。

My当前工作设置

代码语言:javascript
复制
function png_to_svg() {

    ### First use convert to convert to .pnm format ###

    number_of_dots_in_filepath=$(echo "$1" | grep -o "\." | wc -l)
    pnm_filepath=""
    for i in $(seq 1 $number_of_dots_in_filepath); do 
        pnm_filepath="$pnm_filepath.$(echo "$1" | cut -f $i -d '.')"
    done

    remove_leading_space=${pnm_filepath#?}
    pnm_filepath="$remove_leading_space.pnm"
    command="convert \"$1\" \"$pnm_filepath\""

    eval "$command"

    ### Second use potrace to convert .pnm to .svg file ###

    svg_filepath="$remove_leading_space.svg"
    command="potrace \"$pnm_filepath\" -s -o \"$svg_filepath\""
    eval "$final_command"

    ### Third and last: remove temporary .pnm file ###

    eval "rm \"$pnm_filepath\""

}

第一次回复后的Edited设置

代码语言:javascript
复制
function png_to_svg() {

    ### First use convert to convert to .pnm format ###

    pnm_filepath=${1%.*}.pnm
    convert "$1" "$pnm_filepath"

    ### Second use potrace to convert .pnm to .svg file ###

    svg_filepath=${1%.*}.svg
    potrace "$pnm_filepath" -s -o "$svg_filepath"

    ### Third and last: remove temporary .pnm file ###

    rm "$pnm_filepath"

}
EN

回答 1

Code Review用户

发布于 2018-10-27 16:55:49

你不需要eval。例如,

代码语言:javascript
复制
eval "rm \"$pnm_filepath\""

是相同的

代码语言:javascript
复制
rm "$pnm_filepath"

但后者的可读性更强。

对于使用eval的其他两种情况也是如此。

我不知道在文件路径中循环点的目的是什么。请注意,目录名也可以有点。获得具有不同扩展名的文件名的最佳方法是使用${x%.*} (参见这里):

代码语言:javascript
复制
pnm_filepath=${1%.*}.pnm

(我猜你用的是Bash)。

票数 4
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/206376

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档