Créez un fichier PSD à l'aide d'une bibliothèque appelée pytoshop. J'ai trouvé pas mal d'autres choses pour lire le fichier psd une fois avec pytoshop et le traiter, mais je ne pouvais pas le trouver pour le créer à partir de zéro, alors j'ai regardé le document officiel et l'ai recherché pendant le débogage.
Fondamentalement, c'est comme composer une couche avec des données d'image OpenCV (tableau numpy) qui sont courantes en Python et l'écrire.
pip install numpy scipy opencv-python Pillow six psd-tools3 pytoshop
main.py
#! env python
# -*- coding: utf-8 -*-
import os
import sys
import cv2
import pytoshop
from pytoshop import layers
import numpy as np
import cv2
def main():
#Image pour couche
test_img = cv2.imread("test1.tif")
#
#Créer un fichier PSD vierge
#
psd = pytoshop.core.PsdFile(num_channels=3, height=test_img.shape[0], width=test_img.shape[1])
#Faire 255 images remplies(Pour la transparence)
max_canvas = np.full(test_img.shape[:2], 255, dtype=np.uint8)
#
#Faire un calque
#
#Faites autant de couches que nécessaire
#Transparence np.ndarray([], dtype=np.uint8)
#255 est opaque, 0 est transparent et vous pouvez créer un calque avec transparence en définissant une image de masque en niveaux de gris.
layer_1 = layers.ChannelImageData(image=max_canvas, compression=1)
# RGB
layer0 = layers.ChannelImageData(image=test_img[:, :, 2], compression=1) # R
layer1 = layers.ChannelImageData(image=test_img[:, :, 1], compression=1) # G
layer2 = layers.ChannelImageData(image=test_img[:, :, 0], compression=1) # B
new_layer = layers.LayerRecord(channels={-1: layer_1, 0: layer0, 1: layer1, 2: layer2}, #Image RVB
top=0, bottom=test_img.shape[0], left=0, right=test_img.shape[1], #position
name="layer 1", #Nom
opacity=255, #Opacité du calque
)
psd.layer_and_mask_info.layer_info.layer_records.append(new_layer)
#
#Exportation
#
with open("output.psd", 'wb') as fd2:
psd.write(fd2)
return
if __name__ == '__main__':
main()
Recommended Posts