Erstellen Sie eine PSD-Datei mit einer Bibliothek namens pytoshop. Ich habe noch einige andere Dinge gefunden, um die psd-Datei einmal mit pytoshop zu lesen und zu verarbeiten, aber ich konnte sie nicht finden, um sie von Grund auf neu zu erstellen. Deshalb habe ich mir das offizielle Dokument angesehen und es beim Debuggen nachgeschlagen.
Im Grunde ist es so, als würde man eine Ebene mit OpenCV-Bilddaten (Numpy-Array) erstellen, die in Python üblich ist, und sie ausschreiben.
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():
#Bild für Schicht
test_img = cv2.imread("test1.tif")
#
#Erstellen Sie eine leere PSD-Datei
#
psd = pytoshop.core.PsdFile(num_channels=3, height=test_img.shape[0], width=test_img.shape[1])
#Machen Sie 255 gefüllte Bilder(Für Transparenz)
max_canvas = np.full(test_img.shape[:2], 255, dtype=np.uint8)
#
#Mach eine Ebene
#
#Mach so viele Schichten wie du brauchst
#Transparenz np.ndarray([], dtype=np.uint8)
#255 ist undurchsichtig, 0 ist transparent, und Sie können eine Ebene mit Transparenz erstellen, indem Sie ein Graustufenmaskenbild festlegen.
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}, #RGB-Bild
top=0, bottom=test_img.shape[0], left=0, right=test_img.shape[1], #Position
name="layer 1", #Name
opacity=255, #Deckkraft der Ebene
)
psd.layer_and_mask_info.layer_info.layer_records.append(new_layer)
#
#Export
#
with open("output.psd", 'wb') as fd2:
psd.write(fd2)
return
if __name__ == '__main__':
main()
Recommended Posts