我需要将 Photoshop 中的矢量路径提取为 SVG 格式(或 Inkscape 可以使用的任何其他格式)。
我没有 Illustrator,购买它只是为了转换文件格式似乎很愚蠢。
那么如何将路径从 Photoshop 转换为 SVG?
如果需要,我可以编写一些代码来直接操作文件,但我什至不确定从哪里开始获取路径。
我需要将 Photoshop 中的矢量路径提取为 SVG 格式(或 Inkscape 可以使用的任何其他格式)。
我没有 Illustrator,购买它只是为了转换文件格式似乎很愚蠢。
那么如何将路径从 Photoshop 转换为 SVG?
如果需要,我可以编写一些代码来直接操作文件,但我什至不确定从哪里开始获取路径。
我意识到这是一个 2012 年的问题……但在 2018 年……
从 Photoshop 导出为 SVG .. 路径将在那里。
您可能需要删除一堆光栅填充,但路径都将在那里。
编辑:
本教程似乎有效,它适用于 Mac,但您可能可以替换 Win 的中间步骤。
我自己没有尝试过,但这些资源可能会对您有所帮助:
适用于 Adobe Photoshop 和 Adobe Photoshop Elements 的 SVG Kit 2.0.1 - 功能齐全的免费试用版
SVG Import/Export Converter 1.6.7 - 未指定 PSD,但它似乎免费且开放,因此值得一试。
还有一个名为 psd.js 的 Github 项目,但显然它已被“转移”到 twitpic。压缩文件在这里。
这个图像转换器似乎在列表中有 PSD 和 SVG。
如果他们中的任何一个有帮助或者您找到了替代方法,请将其发布以供将来参考:)
GIMP 可以做到这一点。打开 .psd 并转到路径选项卡,右键单击任何路径,然后有一个导出选项。
Photoshop 可以像@Scott 提到的那样导出 SVG。但是,这对您的工作流程来说可能是也可能不是一个好的举措,因为您可能需要从一个非常大的东西列表中找到路径。也可以使用脚本读取路径信息,除了允许您选择要导出的内容之外,还允许您自定义导出器,并且它适用于更旧版本的 PS。
因为我已经在这里完成了,所以我将把它逐字粘贴在这里:
// jooExportSVGScaffold.jsx
#target photoshop
main();
function ppos(point){
return ""+point[0]+" "+point[1]
}
function handlePath(path) {
var out = "";
var pnts = path.pathPoints;
var ipos = pnts[0].anchor;
var pos = pnts[0].leftDirection;
var pos2, pos3;
out="M"+ppos(ipos);
for (var p=1; p<pnts.length; p++){
pos2 = pnts[p].rightDirection;
pos3 = pnts[p].anchor;
out += "C"+ppos(pos)+" "+ppos(pos2)+" "+ppos(pos3);
pos = pnts[p].leftDirection;
}
if (path.closed){
pos2 = pnts[0].rightDirection;
pos3 = pnts[0].anchor;
out += "C"+ppos(pos)+" "+ppos(pos2)+" "+ppos(pos3)+"Z";
}
return out;
}
function main() {
var sel = app.activeDocument.selection;
var file = File.saveDialog('save svg path', 'SVGPath:*.svg');
file.open('w');
file.writeln('<?xml version="1.0" encoding="utf-8"?>');
file.writeln('<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">');
file.writeln('<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"');
file.writeln('width="595.28px" height="841.89px" viewBox="0 0 595.28 841.89" enable-background="new 0 0 595.28 841.89" xml:space="preserve">');
var doc = app.activeDocument;
var paths = doc.pathItems;
for (var i=0; i<paths.length; i++){
var subpaths = paths[i].subPathItems;
for (var j=0; j<subpaths.length; j++){
data=handlePath(subpaths[j]);
file.writeln('<path fill="none" stroke="black" d="'+data+'"/>');
}
}
file.writeln('</svg>');
file.close();
}
您可以根据需要更改脚本。例如,不是写入文件,而是将其显示在文本框中或复制到剪贴板,而是根据路径名等放置一个 Id。毕竟我不知道它是您的工作流程。