Как сохранить виджет в нужном размере, в формате "*.jpeg"?

Рейтинг: -1Ответов: 1Опубликовано: 17.06.2023

Как по нажатию кнопки сохранить изображение (QPixmap), но только не то что на экране, а его увеличенную версию.

import sys
import os
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *


class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.resize(511,418)
        label=QLabel(self)
        label.setPixmap(QPixmap('imgonline-com-ua-Resize-0yi5po7h08mb1g.jpg'))
        label.setGeometry(120,50,281,271)

        save_photo= QPushButton('Сохранить фото', self)
        save_photo.setGeometry(30, 370, 93, 28)
        save_photo.setFont(QFont("Bahnschrift SemiLight SemiConde", 5))
        save_photo.clicked.connect(self.Save_Photo)

    def Save_Photo(self):
        pass

        #здесь функция сохранения фото
        # фото для сохранения : '2234719f-7737-4118-9ec3-6dfa0a6a26a7.jpeg'

if __name__ == '__main__':
    app =QApplication(sys.argv)
    my_window = Window()
    my_window.show()
    sys.exit(app.exec_())

Update:

Под словом "увеличенная версия" я имею ввиду то, что у человека на экране изображено фото, которое очень сжато в размерах, оно очень маленькое и если его сохранить, то пользователь мало что увидит.

И чтобы пользователю было комфортно смотреть на фото у меня есть это же фото, но большего размера.

И в данном случае у меня не получается написать функцию для сохранения изображения.

Я пробовала метод save().

Ответы

▲ 0

Sorry, вы плохо объясняете задачу и проблему, которая у вас возникает.
Сжато в размерах - это как? и почему фото сжато?
Вы должны приложить код, который демонстрирует эту проблему и прикрепить изображение, которое, как вы говорите, большего размера.

Если я правильно понял вашу задачу, то приложение может выглядеть, примерно так.

QPixmap QWidget::grab(const QRect &rectangle = QRect(QPoint(0, 0), QSize(-1, -1)))

Преобразует виджет в растровое изображение, ограниченное заданным прямоугольником. Если у виджета есть дочерние элементы, то они также прорисовываются в соответствующих позициях.

import sys
from PyQt5.Qt import *


class Window(QWidget):
    def __init__(self):
        super().__init__()
        
        self.label = QLabel(self)
        self.pixmap = QPixmap('lena.jpg')                               # +       
#        self.label.setPixmap(QPixmap('lena.jpg'))
        self.label.setPixmap(self.pixmap.scaled(100, 100))              # +
        self.label.setGeometry(120, 50, 281, 271)
        
        self.label.setAlignment(Qt.AlignCenter)                         # +++
        self.label.setStyleSheet("background-color: #105652;")          # +++
        self.setStyleSheet("background-color: #775652;")                # +++
         
        button_save_photo= QPushButton('Сохранить фото', self)
        button_save_photo.setGeometry(30, 370, 93, 28)
        button_save_photo.setFont(QFont("Bahnschrift SemiLight SemiConde", 7))
        button_save_photo.clicked.connect(self.save_photo)
        button_save_photo.setStyleSheet("background-color: #7799dd;")

# !!! vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
    def save_photo(self):
        #здесь функция сохранения фото
        # фото для сохранения : '2234719f-7737-4118-9ec3-6dfa0a6a26a7.jpeg'
        
        label = QLabel()
        label.setPixmap(self.pixmap)
        print(f'self.pixmap.size = {self.pixmap.size()}') 
        
        image = label.grab()
        image.save('2234719f-7737-4118-9ec3-6dfa0a6a26a7.jpeg')
        label.deleteLater()

        self.label_new = QLabel()        
        self.label_new.setPixmap(
            QPixmap('2234719f-7737-4118-9ec3-6dfa0a6a26a7.jpeg'))
        self.label_new.show()
# !!! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^


if __name__ == '__main__':
    app =QApplication(sys.argv)
    my_window = Window()
    my_window.resize(511, 418)
    my_window.show()
    sys.exit(app.exec_())

введите сюда описание изображения


lena.jpg

введите сюда описание изображения