psd-tools

psd-tools是处理Photoshop的psd文件的python库。

源码地址:https://github.com/psd-tools/psd-tools
文档地址:https://psd-tools.readthedocs.io/en/latest/

一、安装:

pip install psd-tools
#这个包里需求了 Pillow(用于将图像导出到PNG,处理它们),所以安装时会自动安装,不需要额外安装

为了从32位PSD文件中提取图像,PIL/Pillow必须使用LITTLECMS或LITTLECMS2支持来构建(apt-get install liblcms2-2或brew install little-cms2)

为了用完整的图层图像合成功能,也可以安装NumPy/SciPy:

pip install numpy scipy

以下情况Numpy是必要的:

  • 使用正常模式以外的混合模式;
  • 使用渐变填充。

二、使用

0/ 示例

from psd_tools import PSDImagepsd = PSDImage.open('example.psd')
psd.compose().save('example.png')for layer in psd:print(layer)

1.操作一个PSD文件

#可在源码的psd_image.py中看到PSDImage类1/ 打开一个文件from psd_tools import PSDImage
psd = PSDImage.open('my_image.psd')
#返回一个PSDImage类型的对象#psd_tools中的大多数数据结构都支持在IPython环境中进行漂亮的打印。#  In [1]: PSDImage.open('example.psd')
#  Out[1]:
#  PSDImage(mode=RGB size=101x55 depth=8 channels=3)
#    [0] PixelLayer('Background' size=101x55)
#    [1] PixelLayer('Layer 1' size=85x46)##############################################################
2/ psd的属性(可在源码的psd_image.py中看到PSDImage类)
有些无意义的属性也定义了,为了和layer一样可以,如:visible直接返回Ture。这里列出一些有意义,一般会用到的属性:
psd.width #宽
psd.height #高
psd.size #(width, height) tuple
psd.offset #(left, top) tuple
psd.left #0
psd.right #self.width
psd.top #0
psd.bottom #self.height
psd.viewbox #(left, top, right, bottom) `tuple`psd.bbox #能包围住所有可见的层的最小的方框(x,y,z,w)
psd.color_mode #颜色模式,如RGB,GRAYSCALE
psd.channels #颜色通道数量
psd.depth #像素深度位数
psd.version #文件版本 psd是1,psb是2.
psd.has_preview #Returns if the document has real merged data. When True, `topil()`returns pre-composed data.
psd.has_thumbnail #是否有缩略图
psd.thumbnail #返回   PIL.Image格式的缩略图这里列出一些无意义的为了可以和layer一样操作的属性:
psd.is_visible() #True
psd.visible #True
psd.parent #None
psd.name   #'Root'
psd.kind #'psdimage'print(str(psd.is_group()))#是否是组 psd文件直接传进去也是组
psd文件的层可以遍历:
for layer in psd:
print(layer)
if layer.is_group():for child in layer:print(child)child = psd[0][0]
#迭代顺序是从背景到前景,与1.7.x之前的版本相反。使用reverse (list(psd))从前台到后台进行迭代。##############################################################
3/ 保存psd文件:
psd.save('output.psd')4/ 用psd文件获取PIL Image.
psd.topil(channel=None, **kwargs)
#channel:0为R,1为G,2为B,-1为A,根据constants.py中ChannelID类。5/ 合并psd文件.
psd.compose(force = False,bbox=None,**kwargs)6/ 用PIL Image生成一个PSDImage对象
from psd_tools import PSDImage
psd = PSDImage.frompilfrompil(image,compression=<Compression.PACK_BITS: 1>)

2.操作一个PSD图层

#可在源码的layers.py中看到Layer类##############################################################
1/Layer的属性(可在源码的layers.py中看到Layer类)layer.name #层的名字(可写)
layer.kind #层的类别(字符串)#(group(图层组), pixel(普通图层), shape, type(文本图层), smartobject,or psdimage(psd本身))
#shape绘制矢量形状,形状信息存储在vector_mask和origination属性中。其他图层也可以有形状信息作为蒙版:
#smartobject为非破坏性编辑嵌入或链接外部文件。文件内容可以通过smart_object属性访问。layer.layer_id #Layer ID.
layer.visible #层本身是否勾选可见(可写)
layer.is_visible() #层是否可见,受父物体影响。(父物体不可见,这个层就算勾选了可见这个也是False)layer.opacity #透明度 [0,255](可写)
layer.parent #Parent of this layer.
layer.is_group #是否是个组
layer.blend_mode #混合模式(可写),返回Constants.py中的BlendMode
layer.has_mask #是否有mask
layer.left #左坐标(可写)
layer.top  #顶坐标(可写)
layer.right #右坐标
layer.bottom #底坐标
layer.width #层的宽
layer.height #层的高
layer.offset #(left, top) tuple. (可写)
layer.size #(width, height) tuple.
layer.bbox #(left, top, right, bottom) tuple.
layer.has_pixels() #是否有像素
layer.has_mask() #是否有蒙板
layer.has_vector_mask() #是否有矢量蒙板
layer.mask #层相关的蒙版 return: :py:class:`~psd_tools.api.mask.Mask` or `None`
layer.vector_mask #层相关的矢量蒙版 return: :py:class:`~psd_tools.api.shape.VectorMask` or `None`
layer.has_origination() #是否有实时形状属性
layer.origination #实时形状属性
layer.has_stroke() #是否有比划
layer.stroke #比划
layer.has_clip_layers() #是否有裁剪
layer.clip_layers #裁剪,Clip layers associated with this layer.
layer.has_effects() #是否有效果处理
layer.effects #效果处理 return: :py:class:`~psd_tools.api.effects.Effects`
layer.tagged_blocks #Layer tagged blocks that is a dict-like container of settings.##############################################################
2/ 获得图层的pil图,Get PIL Image of the layer.(返回PIL.Image对象或没像素时返回`None`)
layer.topil(channel=None, **kwargs)e.g.
from psd_tools.constants import ChannelID
image = layer.topil()
red = layer.topil(ChannelID.CHANNEL_0)
alpha = layer.topil(ChannelID.TRANSPARENCY_MASK)##############################################################
3/ 合并图层和其蒙版(mask, vector mask, and clipping layers)(返回PIL.Image对象或没像素时返回`None`)
layer.compose(bbox=None, **kwargs)不合并,单独获取:
image = layer.topil()
mask = layer.mask.topil()
from psd_tools import compose
clip_image = compose(layer.clip_layers)

三、操作案例

1、导出一个psd文件的所有图层(用文件本身的大小,而不是图层的大小)

思路:

遍历所有图层,每次导出一个目前图层
把除目标图层外的图层(is_group()要为False,图层组不隐藏)隐藏,设置visible为False,目标图层的visible设置为True
然后调用:

merged_image = psd.compose(True)
merged_image.save(exportName)
#依据实验,这里参数force要为True,否则不是目前设置好的图层显隐看出来的图。#看源码可知,force为False时,使用的图是topil()返回的PIL Image,貌似不会受临时修改的图层显隐影响;(不太确定这个图生成的时机,但好像只会生成一次)
#force为True使用的图为compose所有图层产生的PIL Image,所以会根据所有图层现在的显隐去生成新图。

导出文件。

2.导出一个psd文件的所有图层(用图层本身的大小)

思路:

这个比较简单,就直接调用

#不带蒙版
layer_image = layer.topil()
layer_image.save('layer.png')

或者

#带蒙版
layer.compose()
layer_image.save('layer.png')

[python库]psd文件操作库--psd_tools相关推荐

  1. c读取ini配置文件_Go-INI - 超赞的Go语言INI文件操作库

    INI 文件(Initialization File)是十分常用的配置文件格式,其由节(section).键(key)和值(value)组成,编写方便,表达性强,并能实现基本的配置分组功能,被各类软件 ...

  2. C++ 使用Poco库进行文件操作

    C++ 使用Poco库进行文件操作 flyfish 环境: Ubuntu18.04 主要是Poco::File和Poco::Path #include <vector> #include ...

  3. golang常用库之-文件操作(os、path、filepath、ioutil包)、Go 读文件、Go 写文件

    文章目录 golang常用库之-文件操作

  4. python怎么读取文件-python怎么读写文件操作

    本节内容:I/O操作概述 文件读写实现原理与操作步骤 文件打开模式 Python文件操作步骤示例 Python文件读取相关方法 文件读写与字符编码 一.I/O操作概述 I/O在计算机中是指Input/ ...

  5. python怎么读写文件-python怎么读写文件操作

    本节内容:I/O操作概述 文件读写实现原理与操作步骤 文件打开模式 Python文件操作步骤示例 Python文件读取相关方法 文件读写与字符编码 一.I/O操作概述 I/O在计算机中是指Input/ ...

  6. python 对 yaml 文件操作

    python 对 yaml 文件操作 #!/usr/bin/env python # -*- encoding: utf-8 -*- """ @Introduce : p ...

  7. Python实现tab文件操作

    Python实现tab文件操作 # -*- coding:gbk -*- import os class TABFILE:     def __init__(self, filename, dest_ ...

  8. python处理excel教程实例-python 读写excel文件操作示例【附源码下载】

    本文实例讲述了python 读写excel文件操作.分享给大家供大家参考,具体如下: 对excel文件的操作,python有第三方的工具包支持,xlutils,在这个工具包中包含了xlrd,xlwt等 ...

  9. Python中的文件操作和异常

    Python中的文件操作和异常 文章目录 Python中的文件操作和异常 一.文件 01. 文件的概念 1.1 文件的概念和作用 1.2 文件的存储方式 文本文件和二进制文件 02. 文件的基本操作 ...

  10. Python os模块文件操作(二)

    Python os模块文件操作(二) os模块对文件夹和文件的操作很多.可以先看: https://blog.csdn.net/weixin_43790276/article/details/9867 ...

最新文章

  1. 从 AlphaGo 到具有人类智慧的 AI 究竟有多远?François Chollet 有了一些新想法
  2. opencv镜像_DX200操作要领—PAM与镜像平移变换(三十八)
  3. 转使用Moq让单元测试变得更简单
  4. [再寄小读者之数学篇](2014-07-27 $H^{-1}$ 中的有界集与弱收敛极限)
  5. 终于我还是没忍住,用Python爬了一波女神
  6. php代码的健壮性,代码健壮性的几点思考 - 逍遥客 - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...
  7. 解决sodu echo写入文件是权限不足-bash: test.txt: Permission denied
  8. java 正则 实例_Java正则表达式示例
  9. Pocket通证POKT锁仓总价值超2.1947亿美元
  10. 求抛物线和直线交点_关于抛物线大题的参考经验(5):浙江历年学考题回顾...
  11. mnist数据集matlab导入,MNIST数据集转为matlab可读的mat格式
  12. 计算机类sci中接受综述么,sci综述类期刊有哪些
  13. 12. JLINK在线调试+软件调试方法与技巧
  14. 解决最新版discuz安装模板插件提示“对不起,您安装的不是正版应用”
  15. 三个数相减的平方公式_小学一年级数学难点解析,附34个必考公式,孩子必备!...
  16. 视频教程-基于springboot2.x+layui+shiro+redis整合前后端分离的权限管理系统-Java
  17. linux分区命名规则,《linux就该这么学》第七节课:文件的各种权限以及linux分区命名规则...
  18. React基本使用、React脚手架的使用
  19. 远程连接工具---mstsc单文件版兼容64位
  20. 树莓派 远程看鱼眼摄像头

热门文章

  1. python常用文件操作和解析xml文件
  2. C#使用欧姆龙PLC的Fins协议读写PLC地址(示例调用)
  3. 计算机路径共享,如何访问共享文件夹路径
  4. 小米路由器青春版开启SSH刷入Padavan固件
  5. PaddleNLP登顶FewCLUE小样本学习榜单;AutoPrompt自动化提示功能直接带你原地起飞
  6. 21年6月阿里巴巴Java暑期实习面经回顾(已上岸)
  7. linux中分号转义字符,Linux职场技术篇-Linux shell中元字符、转义符、通配符的使用方法...
  8. Speedoffice(word)怎么撤回上一步的操作
  9. 2023年最新微信记账小程序源码+简约大气
  10. SVD(奇异值分解)数值计算方法解析(一):SVD的概念与人工手算SVD的方法