
在百度上搜索了很多关于php多图片生成psd的文章,基本上都是在说怎么用psd导出里内的图片,这与需求不符,难道就基本没有人用 多图生成psd的吗?费了好大的劲(大概两三个小时吧),终于找到一篇关于如何使用python中的psd_tools来操作psd文件的工具,然后简略地看了一下文档,居然有介绍如何生成psd文件的方法,好!下面就开始研究这个工具怎么使用,以下是笔记
//官方文档
https://psd-tools.readthedocs.io/en/latest/reference/psd_tools.psd.html
//安装:
# pip3 install psd-tools
-------------------------
Installing collected packages: docopt, aggdraw, psd-tools
Successfully installed aggdraw-1.3.14 docopt-0.6.2 psd-tools-1.9.23
基础图片属性
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格式的缩略图
层的分类
#判断层的分类 :
group(图层组),
pixel(普通图层),
shape(绘制矢量形状),
type(文本图层),
smartobject(智能对象:为非破坏性编辑嵌入或链接外部文件,文件内容可以通过smart_object属性访问。),
psdimage(psd本身))
//类型判断
#layer.kind != 'type'
//栅格化图像(用于输出)
layer.composite()
层属性
layer.name #层的名字(可写)
layer.kind #层的类别(字符串)
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.
文本的层
//文本信息是只读的。
https://psd-tools.readthedocs.io/en/latest/reference/psd_tools.api.layers.html#typelayer
//打印层的文字
print(layer.text)
目前,该包不支持添加或删除图层。看到这里,心又凉了,可能是侵权不开放功能
可以保存打开的PSD文件:
psd.save('output.psd')