基于paint.net制作的C#PSD图层提取工具。核心代码是photoshop插件开源提供的, 感谢photoshop插件开源提供作者。

网上关于photoshop的图层提取代码好少,找了好久都没找到。最后不得不花了时间研究了下paint.net的老版本源码。终于成功实现了这个功能,记录一下。可输出图层及各图层在原PSD中的位置和大小等信息。先上图,看看是不是你想要的。

 /// <summary>/// 输出PSD图层/// </summary>/// <param name="psdfilepath"></param>/// <param name="targetDir"></param>private void OutputPSDLayers(string psdfilepath, string targetDir){if (!System.IO.File.Exists(psdfilepath)) return;if (!System.IO.Directory.Exists(targetDir)) return;PaintDotNet.Document document;using (var stream = System.IO.File.Open(psdfilepath, System.IO.FileMode.Open)){document = PaintDotNet.Data.PhotoshopFileType.PsdLoad.Load(stream);}PhotoshopFile.PsdFile psdfile = new PhotoshopFile.PsdFile(psdfilepath, new PhotoshopFile.LoadContext());if (document != null){//BitmapLayer的大小一直都跟整幅PSD图像一致,需要利用从PsdFile的层中读取到的Rect数据来提取实际像素foreach (PaintDotNet.BitmapLayer layer in document.Layers){ //图层顺序号int order = document.Layers.IndexOf(layer);//实际存在像素画面边界Rectangle rect = psdfile.Layers[order].Rect;//图层分组或一些不可见或无像素的层直接跳过if (!document.Bounds.Contains(rect)) continue;if (rect.Width == 0 || rect.Height == 0) continue;//从BitmapLayer中提取实际图层像素部分var img = layer.Surface.CreateAliasedBitmap(rect);//图层位置、大小、名称、顺序等信息可被记录 可在自己程序画布中复原 //此处随意记录到文件名上,但正确的做法是记录到自己的图层模型类中string rectstr = rect.X + "-" + rect.Y + "-" + rect.Width + "-" + rect.Height;string canvassize = document.Width + "-" + document.Height;string filename = order + "[" + rectstr + "]" + "[" + canvassize + "]"+ layer.Name + ".png";img.Save(targetDir + "\\"+ filename, System.Drawing.Imaging.ImageFormat.Png);img.Dispose();layer.Dispose();}System.Diagnostics.Process.Start(targetDir);}}

工具
https://download.csdn.net/download/qq_19319497/12318060
整个工程源码
https://download.csdn.net/download/qq_19319497/12318064

基于paint.net制作的C#PSD图层提取工具相关推荐

  1. ps保存psd后图层全没了_怎么利用ps把psd图层单独导出为一张张的图片?

    在平时使用的时候我们用ps制作出了一些图层,如果想要把它用在其它的软件中的话,你可能会发现当你导入psd文件的时候,它在显示的只是一张图片,如果是想要它在ps中进行导出的时候就是把每一个图层都作为一张 ...

  2. WPF学习12:基于MVVM Light 制作图形编辑工具(3)

    本文是WPF学习11:基于MVVM Light 制作图形编辑工具(2)的后续 这一次的目标是完成 两个任务. 本节完成后的效果: 本文分为三个部分: 1.对之前代码不合理的地方重新设计. 2.图形可选 ...

  3. vue canvas插件_基于vue.js 制作在线桌椅定制选择交互特效源码

    码农那点事儿 关注我们,一起学习进步 基于vue.js写的在线桌子椅子垫子选择拼成的自己理想的书桌椅图像,这是一款交互式的课桌椅在线定制选择功能.非常不错,感兴趣的朋友前来下载使用. 下载源码(提取码 ...

  4. html5微课程制作,翟猛老师《微课开发及制作-基于H5课件制作模式》

    微课开发及制作-基于H5课件制作模式 --明确微课内涵 掌握制作方法 完成课程呈现-- [课程介绍] 随着VUCA时代的到来,人们的学习方式也迅速迎来了全新的打开方式.翻转课堂.混合式教学.自主式学习 ...

  5. 基于Android Tv制作一个Tv桌面(二)

    标题基于Android Tv制作一个Tv桌面(二) 这里是获取APP的各种信息,不知道为什么这一步只能在主类MainActivity 上进行,不能在其他的类进行此操作,也许是我见识短浅的原因吧,因为其 ...

  6. TIA博途_基于SCL语言制作模拟量输入输出全局库的具体方法

    TIA博途_基于SCL语言制作模拟量输入输出全局库的具体方法 一. 模拟量输入块:创建FB,定义块的接口,如下图所示: 程序中包含了高报警,低报警,一般上位机报警需要这个变量. 极性选择,适合更广的应 ...

  7. 基于Vue.js制作的仿车轮驾考通APP端页面

    背景:学习完Vue,老师要求期末作业以Vue技术做一个手机端或者PC端的前端小项目.期末临近,周围的同学有的仿微信APP端,有的仿QQAPP端.小萍去年考科目一用了车轮驾考通刷题,然后她最后决定基于V ...

  8. 基于STC89C52RC单片机制作的红外循迹小车(4个传感器)

    单片机:基于STC89C52RC单片机制作的红外循迹小车(4个传感器) 个人感觉红外循迹小车和那些遥控小车的区别就是信号发射不同:遥控小车是通过遥控器发出信号执行相应的动作,而红外循迹是通过红外传感器 ...

  9. vue学习:基于本地应用制作的记事本

    基于本地应用制作的记事本 功能 1.新增 2.删除 3.统计 4.清空 5.隐藏 逻辑 新增 1.生成列表结构(v-for 数组):建立一个字符串数组用于统计用户输入内容,并且用于新增数据内容. 2. ...

最新文章

  1. 微服务框架-Spring Cloud简介(一)
  2. php 取绝对值(php自带函数可以直接取)
  3. js中对日期进行加减
  4. DNN架构解析(收集)
  5. python删除字符串中重复字符_从Python中删除字符串标点符号的最佳方法
  6. Linux time()函数解析
  7. VDI序曲二 RemotoAPP部署
  8. 智能排班系统、班次、班表、考勤、年假、调休、审批、请假、培训、值班、换班、加班、工时、自动排班、智能预测、人力需求预测、授权、团队、锁定量排、规则权重设置、菜单、角色、数据监控、工作台、axure
  9. 一个空值_3秒快速、大批量删除或修改Excel中的空值 | 学术小课堂
  10. UVA10162 Last Digit【数学规律】
  11. 在字符串中标红_在C ++中标记字符串
  12. PHP踩坑:对象的引用
  13. 训练集、验证集、测试集的作用
  14. Flash课堂计分板
  15. 火星坐标系(高德)和84坐标系互换
  16. 华为可信专业级认证是什么?
  17. 佳佳mpg格式转换器免费版 v12.4.0.0
  18. 数据安全合格有哪些要求
  19. 窄带传输与LoRa扩频传输技术应用方案对比
  20. echarts中中国地图飞机路线使用

热门文章

  1. 【mind+】机器人对话互动游戏编程
  2. 三极管工作原理_「硬见小百科」半导体三极管的工作原理
  3. C语言文本处理——郑码与拼音兼容的输入法实现
  4. 工程电磁场导论第三章总结
  5. 运筹学计算机求解运输,运筹学上机报告运输问题的计算机求解.doc
  6. excel成本统计:如何进行区域筛选,多条件求和?
  7. [转] 什么是BGP双线机房
  8. oracle2018补丁下载,下载 | Oracle补丁2018年4月重要补丁更新cpuapr2018-3678067 绿盟科技发布安全威胁通告...
  9. 将“心”比心:心情好坏心脏知
  10. PLSQL连接 ORACLE11g详解