diff --git a/krita/pykrita/custompreview/custompreview.py b/krita/pykrita/custompreview/custompreview.py index 8b970f5..39c24dd 100755 --- a/krita/pykrita/custompreview/custompreview.py +++ b/krita/pykrita/custompreview/custompreview.py @@ -2,19 +2,21 @@ import math import random import re, time, datetime import numpy +import io import cv2 from PIL import Image from pathlib import Path import gmic import json from skimage.color import rgb2lab, rgba2rgb +import qimage2ndarray -from PyQt5.QtCore import Qt, pyqtSignal, QEvent +from PyQt5.QtCore import Qt, pyqtSignal, QEvent, QBuffer from PyQt5.QtGui import QImage, QPainter, QPixmap, QIcon, QInputEvent, QTabletEvent, QMouseEvent, \ - QHelpEvent, QPaintEvent, QTransform + QHelpEvent, QPaintEvent, QTransform, QPixelFormat from PyQt5.QtWidgets import QWidget, QVBoxLayout, QHBoxLayout, QFileDialog, QLabel, QSizePolicy, \ QScrollArea, QAction, QToolButton, QMdiArea, QAbstractScrollArea, QCheckBox, QComboBox, QLineEdit -from PyQt5.QtCore import QTimer +from PyQt5.QtCore import QTimer, QByteArray from krita import Krita, DockWidget, DockWidgetFactory, DockWidgetFactoryBase, Extension from .util import dump_tablet_event, dump_mouse_event, get_qview, rgb2hsv @@ -405,7 +407,7 @@ class CustomPreview(DockWidget): if mirror: previewImage = doc.projection(int(((doc.width()) - o_w - c_x)), c_y, int(kis_canvas_controller.width() * factor), o_h) else: - previewImage = doc.projection(c_x, c_y, o_w, o_h) + previewImage = doc.projection(c_x, c_y, o_w, o_h) # type: QBuffer # previewImage = doc.projection(c_x, c_y if canvas.rotation() != 180 else int(((doc.height()) - o_h - c_y)), o_w, o_h) # pprint(("flipped:", self.flipped, "locked:", self.locked, "canvas.mirror:", mirror)) # pprint(("o_w:", o_w, "o_h:", o_h, "c_x", c_x, "c_y", c_y)) @@ -415,7 +417,7 @@ class CustomPreview(DockWidget): width = dim.width() - self.scrollArea.contentsMargins().top() * 2 height = dim.height() - self.scrollArea.contentsMargins().top() * 2 previewImage = previewImage.scaled(width, height, Qt.KeepAspectRatio, Qt.SmoothTransformation) - previewImage = previewImage.mirrored(canvas.mirror(), 0) #type: QImage + previewImage = previewImage.mirrored(canvas.mirror(), 0) # type: QImage if self.rot: rot = canvas.rotation() transform = QTransform() @@ -425,8 +427,10 @@ class CustomPreview(DockWidget): choice = self.dropdown.currentText() data = self.dropdown.currentData() if choice != "Normal": - - im = Image.fromqimage(previewImage) + buffer = QBuffer() + buffer.open(QBuffer.ReadWrite) + previewImage.save(buffer, "PNG") + im = Image.open(io.BytesIO(buffer.data())) num_im = numpy.array(im) if choice == "NTSC": @@ -490,9 +494,9 @@ class CustomPreview(DockWidget): ref = g.to_numpy_helper(astype=numpy.uint8, interleave=True, squeeze_shape=True) ref = numpy.swapaxes(ref, 0, 1) - img = Image.fromarray(ref) - qimg = img.toqimage() - qimg.scaled(width, height, Qt.KeepAspectRatio, Qt.SmoothTransformation) + qimg = qimage2ndarray.array2qimage(ref) + qimg.scaled(width, height) + previewImage = qimg resultImage = qimg.convertToFormat(QImage.Format_ARGB32_Premultiplied) resultImage.fill(0) diff --git a/requirements.txt b/requirements.txt index 0361840..d48cbc1 100644 --- a/requirements.txt +++ b/requirements.txt @@ -3,3 +3,4 @@ gmic==2.9.4-a1 scikit-image==0.25.2 numpy==2.2.3 pillow==11.1.0 +qimage2ndarray==1.10.0