热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

psd.js中文文档(译)

PSD.js翻译自:www.npmjs.compackagepsd概述这是一个用Coffeescript编写的通用PSD解析器,基于PSD.rb
PSD.js

翻译自:www.npmjs.com/package/psd

概述

这是一个用Coffeescript编写的通用PSD解析器,基于PSD.rb(用ruby写的PSD解析器)。

它让你可以用可管理的树结构来处理Photoshop文档,并得到关键数据,例如:

  • 文件结构
  • 文件大小
  • 图层/目录大小+定位
  • 图层/目录名
  • 图层/目录可见性和不透明度
  • 字体数据(通过psd-enginedata)
    • 文本内容
    • 字体种类,大小,颜色
  • 颜色模式和相应数值
  • 矢量蒙版数据
  • 平面图像数据
  • 图层组合


PSD.js可以在NodeJS和浏览器中运行(使用browserify)。PSD.rb中仍然存在一些缺陷,例如没有图层压缩过滤,内置渲染器和许多图层块的信息。PSD.js会和PSD.rb的内容同步匹配。


安装

PSD.js没有原生依赖项,只需要将它加到你的package.json文件或者直接在命令行执行npm install psd就可以。


文档

带注释的源代码文档可以点击这里得到。
如果你还想深入理解怎么从图层访问各种元数据,你可以看看文档。


用法

PSD.js在浏览器和NodeJS环境中的用法大致相同。

NodeJS示例

var PSD = require('psd');
var psd = PSD.fromFile("path/to/file.psd");
psd.parse();console.log(psd.tree().export());
console.log(psd.tree().childrenAtPath('A/B/C')[0].export());//你也可以用promise语法执行打开和解析的操作
PSD.open("path/to/file.psd").then(function (psd) {return psd.image.saveAsPng('./output.png');
}).then(function () {console.log("Finished!")
});


浏览器示例

var PSD = require('psd');//从URL加载
PSD.fromURL("/path/to/file.psd").then(function(psd) {document.getElementById('ImageContainer').appendChild(psd.image.toPng());
});//从事件加载,比如:拖放
function onDrop(evt) {PSD.fromEvent(evt).then(function(psd) {console.log(psd.tree().export());});
}

遍历文档

使用 psd.tree() 获取根节点,以树结构的形式访问文档。

使用以下的这些方法可以处理树:

  • root(): 在树的任意位置都可以获取根节点
  • isRoot(): 判断是不是根节点
  • children(): 获取节点的所有直系子节点
  • hasChildren(): 判断节点有没有子节点
  • childless(): 得到与hasChildren()相反的结果
  • ancestors(): 获取节点的所有祖先节点(不包含当前节点)
  • siblings(): 获取所有兄弟树节点,包括当前节点(例如文件夹中的所有图层)
  • nextSblings(): 获取当前节点后的所有兄弟节点
  • prevSblings(): 获取当前节点前的所有兄弟节点
  • hasSiblings(): 判断是否有兄弟节点
  • onlyChild(): 得到与hasSiblings()相反的结果
  • descendants(): 获取当前节点外的所有后代节点
  • subtree(): 获取包括当前节点的所有后代节点
  • depth(): 计算当前节点的深度(根节点为0)
  • path(): 获取当前节点的路径


如果你知道树中组或者图层的路径,就能用路径搜索。需要注意的是,通过这种方式返回的一定是数组,因为图层/组的命名不必是唯一的。这种搜索同样作用于当前节点的后代。


psd.tree().childrenAtPath('Version A/Matte');
psd.tree().childrenAtPath(['Version A', 'Matte']);


访问图层数据

获取图层的命名或者尺寸等信息:


node = psd.tree().descendants()[0];
node.get('name');
node.get('width');


PSD文件还存储各种信息在“图层信息”块。查看此文档,了解更多关于PSD.js解析图层信息块的信息(在LAYER_INFO对象中)。图层之间存在不同,你能通过以下方法访问它们:


node = psd.tree().descendants()[0]
node.get('typeTool').export()
node.get('vectorMask').export()


导出数据

使用树结构时,可以递归地将任何节点导出到指定对象。 这不会转存所有内容,但它包含最常访问的信息。


console.log(psd.tree().export());


提供的访问信息类似如下:


{ children: [ { type: 'group',visible: false,opacity: 1,blendingMode: 'normal',name: 'Version D',left: 0,right: 900,top: 0,bottom: 600,height: 600,width: 900,children: [ { type: 'layer',visible: true,opacity: 1,blendingMode: 'normal',name: 'Make a change and save.',left: 275,right: 636,top: 435,bottom: 466,height: 31,width: 361,mask: {},text: { value: 'Make a change and save.',font: { name: 'HelveticaNeue-Light',sizes: [ 33 ],colors: [ [ 85, 96, 110, 255 ] ],alignment: [ 'center' ] },left: 0,top: 0,right: 0,bottom: 0,transform: { xx: 1, xy: 0, yx: 0, yy: 1, tx: 456, ty: 459 } },image: {} } ] } ],document: { width: 900,height: 600,resources: { layerComps: [ { id: 692243163, name: 'Version A', capturedInfo: 1 },{ id: 725235304, name: 'Version B', capturedInfo: 1 },{ id: 730932877, name: 'Version C', capturedInfo: 1 } ],guides: [],slices: [] } } }


您还可以将PSD导出为平面图像。但需要注意的是,这种操作不是所有图像类型和深度都支持。


png = psd.image.toPng(); //获取PNG对象
psd.image.saveAsPng('path/to/output.png').then(function () {console.log('Exported!');
});


这使用Photoshop提供的全栅格化预览。 如果在启用兼容模式的情况下未保存文件,则会返回空图像。


转:https://juejin.im/post/5d099a9de51d4556bb4cd393



推荐阅读
  • 本文介绍了使用哈夫曼树实现文件压缩和解压的方法。首先对数据结构课程设计中的代码进行了分析,包括使用时间调用、常量定义和统计文件中各个字符时相关的结构体。然后讨论了哈夫曼树的实现原理和算法。最后介绍了文件压缩和解压的具体步骤,包括字符统计、构建哈夫曼树、生成编码表、编码和解码过程。通过实例演示了文件压缩和解压的效果。本文的内容对于理解哈夫曼树的实现原理和应用具有一定的参考价值。 ... [详细]
  • 使用nodejs爬取b站番剧数据,计算最佳追番推荐
    本文介绍了如何使用nodejs爬取b站番剧数据,并通过计算得出最佳追番推荐。通过调用相关接口获取番剧数据和评分数据,以及使用相应的算法进行计算。该方法可以帮助用户找到适合自己的番剧进行观看。 ... [详细]
  • Android系统移植与调试之如何修改Android设备状态条上音量加减键在横竖屏切换的时候的显示于隐藏
    本文介绍了如何修改Android设备状态条上音量加减键在横竖屏切换时的显示与隐藏。通过修改系统文件system_bar.xml实现了该功能,并分享了解决思路和经验。 ... [详细]
  • 本文总结了在开发中使用gulp时的一些技巧,包括如何使用gulp.dest自动创建目录、如何使用gulp.src复制具名路径的文件以及保留文件夹路径的方法等。同时介绍了使用base选项和通配符来保留文件夹路径的技巧,并提到了解决带文件夹的复制问题的方法,即使用gulp-flatten插件。 ... [详细]
  • 本文介绍了在使用vue和webpack进行异步组件按需加载时可能出现的报错问题,并提供了解决方法。同时还解答了关于局部注册组件和v-if指令的相关问题。 ... [详细]
  • 浏览器中的异常检测算法及其在深度学习中的应用
    本文介绍了在浏览器中进行异常检测的算法,包括统计学方法和机器学习方法,并探讨了异常检测在深度学习中的应用。异常检测在金融领域的信用卡欺诈、企业安全领域的非法入侵、IT运维中的设备维护时间点预测等方面具有广泛的应用。通过使用TensorFlow.js进行异常检测,可以实现对单变量和多变量异常的检测。统计学方法通过估计数据的分布概率来计算数据点的异常概率,而机器学习方法则通过训练数据来建立异常检测模型。 ... [详细]
  • 本文讨论了在使用PHP cURL发送POST请求时,请求体在node.js中没有定义的问题。作者尝试了多种解决方案,但仍然无法解决该问题。同时提供了当前PHP代码示例。 ... [详细]
  • 本文介绍了闭包的定义和运转机制,重点解释了闭包如何能够接触外部函数的作用域中的变量。通过词法作用域的查找规则,闭包可以访问外部函数的作用域。同时还提到了闭包的作用和影响。 ... [详细]
  • 本文介绍了brain的意思、读音、翻译、用法、发音、词组、同反义词等内容,以及脑新东方在线英语词典的相关信息。还包括了brain的词汇搭配、形容词和名词的用法,以及与brain相关的短语和词组。此外,还介绍了与brain相关的医学术语和智囊团等相关内容。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 本文记录了在vue cli 3.x中移除console的一些采坑经验,通过使用uglifyjs-webpack-plugin插件,在vue.config.js中进行相关配置,包括设置minimizer、UglifyJsPlugin和compress等参数,最终成功移除了console。同时,还包括了一些可能出现的报错情况和解决方法。 ... [详细]
  • VueCLI多页分目录打包的步骤记录
    本文介绍了使用VueCLI进行多页分目录打包的步骤,包括页面目录结构、安装依赖、获取Vue CLI需要的多页对象等内容。同时还提供了自定义不同模块页面标题的方法。 ... [详细]
  • Android日历提醒软件开源项目分享及使用教程
    本文介绍了一款名为Android日历提醒软件的开源项目,作者分享了该项目的代码和使用教程,并提供了GitHub项目地址。文章详细介绍了该软件的主界面风格、日程信息的分类查看功能,以及添加日程提醒和查看详情的界面。同时,作者还提醒了读者在使用过程中可能遇到的Android6.0权限问题,并提供了解决方法。 ... [详细]
  • 本文介绍了H5游戏性能优化和调试技巧,包括从问题表象出发进行优化、排除外部问题导致的卡顿、帧率设定、减少drawcall的方法、UI优化和图集渲染等八个理念。对于游戏程序员来说,解决游戏性能问题是一个关键的任务,本文提供了一些有用的参考价值。摘要长度为183字。 ... [详细]
  • 本文讨论了在使用Git进行版本控制时,如何提供类似CVS中自动增加版本号的功能。作者介绍了Git中的其他版本表示方式,如git describe命令,并提供了使用这些表示方式来确定文件更新情况的示例。此外,文章还介绍了启用$Id:$功能的方法,并讨论了一些开发者在使用Git时的需求和使用场景。 ... [详细]
author-avatar
醉苏芳华
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有