Ejemplo n.º 1
0
    def run(self):
        image = QImage()
        image.load(str(self.filename))

        mask = QImage(image.size(), QImage.Format_RGB32)
        mask.fill(Qt.black)

        maskfile = self.filename.parent / (self.filename.stem + ".mask")
        if maskfile.exists():
            bitmap = QImage(str(maskfile))
            if bitmap.size() != image.size():
                raise Exception("Mask %s doesn't match image size" % maskfile)
            mask.fill(QColor.fromRgbF(1.0, 0.0, 1.0))
            p = QPainter(mask)
            p.setCompositionMode(QPainter.CompositionMode_Multiply)
            p.drawImage(mask.rect(), bitmap)
            p.end()

        self.view.imagefile = self.filename
        self.view.image = image
        self.view.mask = mask
        self.view.maskfile = maskfile

        self.view.path = list()
        self.view.changed = False
        self.view.update()
Ejemplo n.º 2
0
class ImageViewFrame(QFrame):
    def __init__(self, image, parent=None):
        super(ImageViewFrame, self).__init__(parent)

        self.image = image
        self.qimage = None
        self.lock = Lock()

    @Slot()
    def displayImage(self):
        if self.lock.acquire(False):
            if self.image[0] is not None:
                image = self.image[0].copy()
                cv2.cvtColor(image, cv2.COLOR_BGR2RGB, image)
                height, width, _ = image.shape
                self.qimage = QImage(image, width, height, image.strides[0],
                                     QImage.Format_RGB888)
                self.resizeAspectRatio(self.contentsRect().size())

            self.lock.release()
            self.update()
            self.repaint()
        else:
            print('image_view_widget: acquiring lock failed')
        self.update()

    def resizeAspectRatio(self, size):
        try:
            width = self.qimage.size().width()
            height = self.qimage.size().height()
            ratio = height / width
            if self.contentsRect().size().height() / self.contentsRect().size(
            ).width() > ratio:
                event_width = size.width()
                self.resize(event_width, event_width * ratio)
            else:
                event_height = size.height()
                self.resize(event_height / ratio, event_height)
        except ZeroDivisionError as zde:
            pass

    def paintEvent(self, event):
        painter = QPainter(self)
        painter.drawImage(self.contentsRect(), self.qimage)

    def resizeEvent(self, event):
        if self.qimage is not None:
            self.resizeAspectRatio(event.size())
Ejemplo n.º 3
0
class ImageWidget(QLabel):
    def __init__(self, parent=None):
        super(ImageWidget, self).__init__(parent)
        self.image = QImage()

    def set_image(self, image):
        self.image = image
        self.resize(self.image.size())
        pixmap = QPixmap.fromImage(self.image)
        self.setPixmap(pixmap)
    def openImage(self, fileName):
        loadedImage = QImage()
        if not loadedImage.load(fileName):
            return False

        newSize = loadedImage.size().expandedTo(self.size())
        self.resizeImage(loadedImage, newSize)
        self.image = loadedImage
        self.modified = False
        self.update()
        return True
Ejemplo n.º 5
0
 def _read_image(self, path: Path) -> Optional[QImage]:
     data = self._read_file(path)
     if data:
         image = QImage()
         image.loadFromData(data, path.suffix[1:])
         max_size = QSize(600, 400)
         image_size = image.size()
         if image_size.width() > max_size.width() or image_size.height(
         ) > max_size.height():
             image = image.scaled(max_size,
                                  Qt.AspectRatioMode.KeepAspectRatio)
         return image
Ejemplo n.º 6
0
class QMoon(QWidget):
    """Small widget displays today's moon."""
    def __init__(self,
                 pos=(0, 0),
                 parent=None,
                 size=216,
                 web=False,
                 save=False,
                 debug=0):
        super(QMoon, self).__init__(parent)
        self.total_images = 8760
        self.moon_domain = "https://svs.gsfc.nasa.gov"
        self.moon_path_2021 = "/vis/a000000/a004800/a004874/"
        # https://svs.gsfc.nasa.gov/vis/a000000/a004900/a004955/frames/216x216_1x1_30p/moon.8597.jpg
        self.moon_path = "/vis/a000000/a004900/a004955/"
        self.debug = debug
        self.size = size
        self.get_from_web = web
        self.save = save
        # self.setGeometry(pos[0], pos[1], self.size, self.size)
        self.moon = QLabel(self)
        self.moon.setGeometry(pos[0], pos[1], self.size, self.size)
        self.update()

        self.timer = QTimer(self)
        self.timer.timeout.connect(self.update)
        self.timer.start(3600 * 1000)
        self.image = None
        self.pixmap = None
        self.moon_image_number = 1

    @Slot()
    def update(self):
        if self.debug > 0:
            print("Updating the Moon Phase pixmap.")
        self.pixmap = self.get_moon_image()
        self.moon.setPixmap(self.pixmap)

    def get_moon_image_number(self):
        #
        # Conversion from the jscript.
        #
        now = datetime.utcnow()
        janone = datetime(now.year, 1, 1, 0, 0, 0)
        self.moon_image_number = round(
            (datetime.utcnow() - janone).total_seconds() / 3600)
        return self.moon_image_number <= self.total_images

    def get_moon_image(self):

        if not self.get_moon_image_number():
            print("Could not get the moon. Are we in a new year?")

        if self.debug:
            print(f"We are using moon image number: {self.moon_image_number}")
        if self.size > 500 or self.get_from_web:

            if self.size > 2160:
                url = self.moon_domain+self.moon_path+"/frames/5760x3240_16x9_30p/" \
                      f"plain/moon.{self.moon_image_number:04d}.tif"
            elif self.size > 216:
                url = self.moon_domain+self.moon_path+"/frames/3840x2160_16x9_30p/" \
                  f"plain/moon.{self.moon_image_number:04d}.tif"
            else:
                url = self.moon_domain + self.moon_path + "/frames/216x216_1x1_30p/" \
                                                      f"moon.{self.moon_image_number:04d}.jpg"

            if self.debug:
                print(f"Getting image from url: {url}")
            req = requests.get(url)
            self.image = QImage()
            self.image.loadFromData(req.content, "tiff")
            size = self.image.size()
            if self.debug:
                print("Image size: ", size)
            if self.save:
                self.image.save(f"moon/moon.{self.moon_image_number:04d}.tiff")

            offset = (size.width() - size.height()) / 2
            rect = QRect(offset, 0, size.height(), size.height())
            self.image = self.image.copy(rect)
            pix = QPixmap.fromImage(self.image)
            pix = pix.scaled(self.size, self.size, Qt.IgnoreAspectRatio,
                             Qt.SmoothTransformation)
            return pix
        else:
            moon_file = f"moon/moon.{self.moon_image_number:04d}.jpg"
            pix = QPixmap(moon_file)
            pix = pix.scaled(self.size, self.size, Qt.IgnoreAspectRatio,
                             Qt.SmoothTransformation)
            return pix
Ejemplo n.º 7
0
class View(QWidget):
    previous = Signal()
    next = Signal()

    def __init__(self, window):
        super(View, self).__init__(window)

        self.setFocusPolicy(Qt.StrongFocus)
        self.shiftKey = False
        self.ctrlKey = False
        self.lastMousePos = QPoint()
        self.lastTabletPos = QPoint()
        self.mode = 'add'
        self.maskOnly = False

        self.refresh = QTimer(self)
        self.refresh.setSingleShot(True)
        self.refresh.timeout.connect(self.repaint)

        self.addCursor = makeCursor('images/cursor-add.png',
                                    QColor.fromRgbF(0.5, 0.5, 1.0))
        self.delCursor = makeCursor('images/cursor-del.png',
                                    QColor.fromRgbF(1.0, 0.5, 0.5))
        self.setCursor(self.addCursor)

        self.imagefile = None
        self.maskfile = None
        self.image = QImage()
        self.mask = QImage(self.image.size(), QImage.Format_RGB32)
        self.mask.fill(Qt.black)
        self.changed = False
        self.update()

        self.path = list()

        self.load_threads = QThreadPool()
        self.load_threads.setMaxThreadCount(4)

    def load(self, filename):
        self.load_threads.start(LoadTask(self, filename))

    def save(self):
        if self.maskfile and self.changed:
            self.load_threads.waitForDone()
        if self.maskfile and self.changed:
            bitmap = self.mask.createMaskFromColor(
                QColor.fromRgbF(1.0, 0.0, 1.0).rgb())
            bitmap.save(str(self.maskfile), "PNG")
            self.changed = False

    def update(self):
        widgetRatio = self.width() / self.height()
        aspectRatio = self.image.width() / max(1, self.image.height())
        if aspectRatio >= widgetRatio:
            width = self.width()
            height = self.width() / aspectRatio
        else:
            width = self.height() * aspectRatio
            height = self.height()
        self.rc = QRectF((self.width() - width) / 2.0,
                         (self.height() - height) / 2.0, width, height)
        self.repaint()

    def resizeEvent(self, event):
        self.update()

    def paintEvent(self, event):
        p = QPainter(self.mask)
        for (mode, p1, p2, weight) in self.path:
            if mode == 'add':
                p.setPen(
                    QPen(QColor.fromRgbF(1.0, 0.0, 1.0), (weight * 10.0)**2,
                         Qt.SolidLine, Qt.RoundCap, Qt.RoundJoin))
            else:
                p.setPen(
                    QPen(QColor.fromRgbF(0.0, 0.0, 0.0), (weight * 10.0)**2,
                         Qt.SolidLine, Qt.RoundCap, Qt.RoundJoin))
            p.drawLine(realCoords(p1, self.mask.rect()),
                       realCoords(p2, self.mask.rect()))
            self.changed = True
        self.path = list()
        p.end()

        p = QPainter(self)
        p.setCompositionMode(QPainter.CompositionMode_SourceOver)
        if not self.maskOnly:
            p.drawImage(self.rc, self.image)
            p.setCompositionMode(QPainter.CompositionMode_Plus)
        p.drawImage(self.rc, self.mask)
        p.end()

    def closeEvent(self, event):
        self.refresh.stop()
        event.accept()

    def enterEvent(self, event):
        self.setFocus(Qt.OtherFocusReason)

    def keyPressEvent(self, event):
        k = event.key()
        if k == Qt.Key_Shift:
            self.shiftKey = True
        if k == Qt.Key_Control:
            self.ctrlKey = True

        if k == Qt.Key_Space:
            self.maskOnly = not self.maskOnly
            self.repaint()

    def keyReleaseEvent(self, event):
        k = event.key()
        mod = event.modifiers()
        if k == Qt.Key_Shift:
            self.shiftKey = False
        if k == Qt.Key_Control:
            self.ctrlKey = False

    def mousePressEvent(self, event):
        x = event.x()
        y = event.y()
        self.lastMousePos = event.pos()

        if event.button() == Qt.ExtraButton1:
            if self.mode == 'add':
                self.mode = 'del'
                self.setCursor(self.delCursor)
            else:
                self.mode = 'add'
                self.setCursor(self.addCursor)
        elif event.button() == Qt.ExtraButton2:
            self.maskOnly = not self.maskOnly
            self.repaint()
        elif event.button() == Qt.ExtraButton3:
            self.previous.emit()
        elif event.button() == Qt.ExtraButton4:
            self.next.emit()

    def mouseMoveEvent(self, event):
        x = event.x()
        y = event.y()
        dx = x - self.lastMousePos.x()
        dy = y - self.lastMousePos.y()
        self.lastMousePos = event.pos()

        # if event.buttons() & Qt.LeftButton:
        # elif event.buttons() & Qt.MiddleButton:
        # elif event.buttons() & Qt.RightButton:

    def wheelEvent(self, event):
        dx = event.angleDelta().x() / 8
        dy = event.angleDelta().y() / 8
        # self.cameraZoom.emit(dy / 15)

    def tabletEvent(self, event):
        if event.device() == QTabletEvent.Stylus and event.pointerType(
        ) == QTabletEvent.Pen:
            if event.type() == QEvent.TabletPress:
                self.tabletPressEvent(event)
            elif event.type() == QEvent.TabletRelease:
                self.tabletReleaseEvent(event)
            elif event.type() == QEvent.TabletMove:
                if event.pressure() > 0.0:
                    self.tabletMoveEvent(event)
            else:
                print('tabletEvent', event.device(), event.type(),
                      event.pointerType())
        else:
            print('tabletEvent', event.device(), event.type(),
                  event.pointerType())

    def tabletPressEvent(self, event):
        if event.buttons() & Qt.LeftButton:
            self.lastTabletPos = normalizeCoords(event.posF(), self.rc)
        if event.buttons() & Qt.MiddleButton:
            if self.mode == 'add':
                self.mode = 'del'
                self.setCursor(self.delCursor)
            else:
                self.mode = 'add'
                self.setCursor(self.addCursor)
        if event.buttons() & Qt.RightButton:
            self.next.emit()

    def tabletReleaseEvent(self, event):
        self.lastTabletPos = normalizeCoords(event.posF(), self.rc)

    def tabletMoveEvent(self, event):
        self.path.append((self.mode, self.lastTabletPos,
                          normalizeCoords(event.posF(),
                                          self.rc), event.pressure()))
        self.lastTabletPos = normalizeCoords(event.posF(), self.rc)
        if not self.refresh.isActive():
            self.refresh.start(50)
class ScribbleArea(QWidget):
    def __init__(self, parent=None):
        super(ScribbleArea, self).__init__(parent)
        self.myPenColors = [
            QColor("green"),
            QColor("purple"),
            QColor("red"),
            QColor("blue"),
            QColor("yellow"),
            QColor("pink"),
            QColor("orange"),
            QColor("brown"),
            QColor("grey"),
            QColor("black")
        ]
        self.setAttribute(Qt.WA_AcceptTouchEvents)
        self.setAttribute(Qt.WA_StaticContents)
        self.image = QImage()

        self.modified = False

    def s_print(self):
        pass

    def clearImage(self):
        self.image.fill(qRgb(255, 255, 255))
        self.modified = True
        self.update()

    def openImage(self, fileName):
        loadedImage = QImage()
        if not loadedImage.load(fileName):
            return False

        newSize = loadedImage.size().expandedTo(self.size())
        self.resizeImage(loadedImage, newSize)
        self.image = loadedImage
        self.modified = False
        self.update()
        return True

    def saveImage(self, fileName, fileFormat):

        visibleImage = self.image.copy()
        self.resizeImage(visibleImage, self.size())

        if visibleImage.save(fileName, fileFormat):
            self.modified = False
            return True
        else:
            return False

    def paintEvent(self, event):
        painter = QPainter(self)
        rect = event.rect()
        painter.drawImage(rect.topLeft(), self.image, rect)

    def resizeEvent(self, event):
        if self.width() > self.image.width() or self.height(
        ) > self.image.height():
            newWidth = max(self.width() + 128, self.image.width())
            newHeight = max(self.height() + 128, self.image.height())
            self.resizeImage(self.image, QSize(newWidth, newHeight))
            self.update()
        super(ScribbleArea, self).resizeEvent(event)

    def resizeImage(self, image, newSize):
        if self.image.size() == newSize:
            return

        newImage = QImage(newSize, QImage.Format_RGB32)
        newImage.fill(qRgb(255, 255, 255))
        painter = QPainter(newImage)
        painter.drawImage(QPoint(0, 0), self.image)
        self.image = newImage

    #
    # def print(self, )
    # {
    # #ifndef QT_NO_PRINTER:
    #     QPrinter printer(QPrinter.HighResolution)
    #
    #     QPrintDialog *printDialog = new QPrintDialog(&printer, this)
    #     if (printDialog.exec() == QDialog.Accepted) {
    #         QPainter painter(&printer)
    #         QRect rect = painter.viewport()
    #         QSize size = self.image.size()
    #         size.scale(rect.size(), Qt.KeepAspectRatio)
    #         painter.setViewport(rect.x(), rect.y(), size.width(), size.height())
    #         painter.setWindow(self.image.rect())
    #         painter.drawImage(0, 0, image)
    #     }
    # #endif // QT_NO_PRINTER
    # }
    #
    def event(self, event):
        if event.type() == QEvent.TouchBegin or event.type(
        ) == QEvent.TouchUpdate or event.type() == QEvent.TouchEnd:
            touchPoints = event.touchPoints()
            for touchPoint in touchPoints:
                if touchPoint.state() == Qt.TouchPointStationary:
                    continue
                else:
                    rect = touchPoint.rect()
                    if rect.isEmpty():
                        diameter = 50 * touchPoint.pressure()
                        rect.setSize(QSizeF(diameter, diameter))

                    painter = QPainter(self.image)
                    painter.setPen(Qt.NoPen)
                    painter.setBrush(self.myPenColors[touchPoint.id() %
                                                      len(self.myPenColors)])
                    painter.drawEllipse(rect)
                    painter.end()

                    self.modified = True
                    rad = 2
                    self.update(rect.toRect().adjusted(-rad, -rad, +rad, +rad))

        else:
            return super(ScribbleArea, self).event(event)
        return True
Ejemplo n.º 9
0
class DisplayWidget(QWidget):
    """
    The widget actually displaying the image. It has a scale parameter for setting the scale factor of the drawn
    image. The widget is created from the Filter instance. Both are QObjects and both have to run in the main (=GUI)
    thread of the QApplication.
    """
    def __init__(self, parent=None):
        super().__init__(parent=parent)
        self._img = QImage(16, 16, QImage.Format_RGB888)
        self._scale = 1.0
        self._mv = None

    def setScale(self, scale):
        """
        Set the scale factor

        :param scale: a floating point (<1: size reduction)
        :return:
        """
        self._scale = scale
        # check for size constraints
        self.checkSize()
        # update the displayed image
        self.update()

    def setData(self, data):
        """
        Called when new data arrives. This function converts the numpy array to a QImage which can then be drawn
        with a QT painter.

        :param data: the image as a numpy array
        :return:
        """
        img = None
        if data.dtype is np.dtype(np.uint8):
            # uint8 images can either be 2 dimensional (intensity) or 3 dimensional with 3 channels (rgb)
            assert len(data.shape) == 2 or (len(data.shape) == 3
                                            and data.shape[-1] == 3)
            # conversion will be performed later in this case
        elif data.dtype is np.dtype(np.uint16) and len(data.shape) == 2:
            # an uint16 intensity image
            self._mv = memoryview(data)
            # conversion is done immediately
            img = QImage(self._mv, data.shape[1], data.shape[0], data.shape[1],
                         QImage.Format_Grayscale16)
        else:
            # all other cases: convert the image to a uint8 array scaling between min and max
            mind = np.nanmin(data)
            maxd = np.nanmax(data)
            data = np.clip(
                (data.astype(np.float64) - mind) / (maxd - mind) * 256, 0,
                255).astype(np.uint8)
        if img is None:
            # if not yet done, convert the (uint8) data to a qimage
            self._mv = memoryview(data)
            img = QImage(
                self._mv, data.shape[1], data.shape[0],
                np.prod(data.shape[1:]),
                QImage.Format_RGB888 if len(data.shape) == 3
                and data.shape[-1] == 3 else QImage.Format_Grayscale8)
        # save for later painting
        self._img = img
        # check for size constraints
        self.checkSize()
        # request QT for an update
        self.update()

    def checkSize(self):
        """
        make sure that the minimum size is consistent with the shown image.

        :return:
        """
        size = self._img.size() * self._scale
        if size != self.minimumSize():
            logger.info("Size changed: %s", size)
            self.setMinimumSize(size)
            self.parent().parent().adjustSize()

    def paintEvent(self, paintEvent):  # pylint: disable=unused-argument
        """
        The paint event actually drawing the image

        :param paintEvent: a QPaintEvent instance
        :return:
        """
        p = QPainter(self)
        p.scale(self._scale, self._scale)
        p.drawImage(0, 0, self._img)
Ejemplo n.º 10
0
class PingIndicator(QMainWindow):
    def __init__(self, address="8.8.8.8"):
        super(PingIndicator, self).__init__()

        self.icon = QImage(QSize(packet_amount, indicator_image_height),
                           QImage.Format_RGBA8888)

        self.online = True

        self.destination = address

        self.packets = deque([], packet_amount)

        self.tray_icon = QSystemTrayIcon(self)
        self.tray_icon.setToolTip(address)

        self.update_timer = QTimer(self)
        self.update_timer.setInterval(int(timeout * 1.05))
        self.update_timer.timeout.connect(self.update_indicator)

        self.update_timer.start()

        self.last_time_online = strftime("%H:%M:%S")

        self.reset()

    def update_icon(self):
        self.icon.fill(QColor(0, 0, 0, 0))

        painter = QPainter(self.icon)

        (width, height) = self.icon.size().toTuple()
        width -= 1
        height -= 1

        painter.fillRect(QRect(0, 0, width, height), QColor(0, 0, 0, 0))

        try:
            scale = min(1.0 / max(self.packets), min_scale)
        except ValueError:
            scale = min_scale

        for index, ping in enumerate(list(reversed(self.packets))):
            x = ping / float(timeout)

            color = QColor(
                int(-324 * x**2 + 390 * x + 138),  # R
                int(-480 * x**2 + 254 * x + 226),  # G
                int(-212 * x**2 + 160 * x + 52),  # B
                255,
            )

            scaled_height = ceil(scale * ping * height)

            painter.fillRect(
                QRect(width - index, height - scaled_height, 1, scaled_height),
                color)

        self.tray_icon.setIcon(QIcon(QPixmap(self.icon)))
        self.tray_icon.show()

    def update_indicator(self):
        try:
            new_env = dict(os.environ)
            new_env['LC_ALL'] = 'C'

            output = check_output(
                [
                    "ping", "-c", "1", "-W",
                    str(timeout / 1000), self.destination
                ],
                stderr=STDOUT,
                env=new_env,
            ).decode("ascii")  # man ping

            for line in output.splitlines():
                pos = line.find("time=")
                if pos != -1:
                    new_label = line[pos + 5:-3].center(4)
                    self.packets.append(round(float(new_label), 2))

                    if not self.online:
                        self.online = True
                        self.tray_icon.contextMenu().actions()[0].setText(
                            "Last disconnect: " + self.last_time_online)
                    else:
                        self.last_time_online = strftime("%H:%M:%S")

                    break
            else:
                raise ValueError("No time could be parsed.")

        except CalledProcessError as cpe:
            self.packets.append(timeout)

            if self.online:
                self.online = False
                self.tray_icon.contextMenu().actions()[0].setText(
                    "Offline since: " + strftime("%H:%M:%S"))

            print(cpe)
        except KeyboardInterrupt:
            self.close()

        self.update_icon()
        self.update_menu()

        return True

    def reset(self):
        self.packets.clear()
        self.update_icon()

        menu = QMenu()

        menu.addAction("Online since: " + strftime("%H:%M:%S"))
        menu.addAction("Lost: -, Avg: -")
        menu.addAction("Max: -, Min: -")
        menu.addSeparator()
        menu.addAction("Reset").triggered.connect(self.reset)
        menu.addAction("Quit").triggered.connect(self.close)

        self.tray_icon.setContextMenu(menu)

    def update_menu(self):
        self.tray_icon.contextMenu().actions()[1].setText(
            "Lost: %d, Avg: %dms" %
            (self.packets.count(timeout), avg(self.packets)), )
        self.tray_icon.contextMenu().actions()[2].setText(
            "Max: %dms, Min: %dms" % (max(self.packets), min(self.packets)), )
Ejemplo n.º 11
0
class MainWindow(QMainWindow):
    def __init__(self):

        # load setting json file
        with open('setting.json') as f:
            self.app_setting = json.load(f)

        # Status of window
        super().__init__()
        self.title = 'Image Editor'
        self.left = 70
        self.top = 70
        self.width = 800
        self.height = 700

        # Status of view image
        self.org_qimg = None
        self.org_img_width = 0
        self.org_img_height = 0

        self.layer_pixmap = None
        self.layer_width = 0
        self.layer_height = 0
        self.layer_alpha = 50.0

        # Prepare color bar data
        self.colormap_gain = self.app_setting["SoftwareSetting"]["process"][
            "colormap"]["gain"]
        self.colormap_offset_x = self.app_setting["SoftwareSetting"][
            "process"]["colormap"]["offset_x"]
        self.colormap_offset_green = self.app_setting["SoftwareSetting"][
            "process"]["colormap"]["offset_green"]

        self.colormap_data = [
            colormap.colorBarRGB(x * 0.001, self.colormap_offset_x,
                                 self.colormap_offset_green,
                                 self.colormap_gain) for x in range(1000)
        ]

        self.img_edit_mode = 'cursor'

        self.draw_color = QColor(255, 0, 0)
        self.draw_tool_size = 5
        self.eraser_color = QColor(0, 0, 0, 0)

        # setup user interface components
        self.setup_ui()

    # Setup user interface components
    def setup_ui(self):
        # Set main window title
        self.setWindowTitle(self.title)
        # Set main wiodow initial position
        self.setGeometry(self.left, self.top, self.width, self.height)

        # Set up mainWindow's layout
        self.mainWidget = QWidget(self)  # Note not to forget this code.
        self.main_layout = QVBoxLayout()

        # Set menu for main window
        self.main_menu = self.menuBar()
        self.file_menu = self.main_menu.addMenu('File')
        self.edit_menu = self.main_menu.addMenu('Edit')
        self.help_menu = self.main_menu.addMenu('Help')

        self.main_layout.addWidget(self.main_menu)

        # Set "Original Image Open" menu
        self.org_img_open_button = QAction(
            self.style().standardIcon(getattr(QStyle, 'SP_FileDialogStart')),
            'Open Orginal Image', self)
        self.org_img_open_button.setShortcut('Ctrl+O')
        self.org_img_open_button.triggered.connect(self.open_org_img_dialog)
        self.file_menu.addAction(self.org_img_open_button)

        # Set "Save layer image" menu
        self.layer_img_save_button = QAction(
            self.style().standardIcon(getattr(QStyle, 'SP_FileDialogEnd')),
            'Save Layer Image', self)
        self.layer_img_save_button.setShortcut('Ctrl+S')
        self.layer_img_save_button.triggered.connect(self.save_layer_image)
        self.file_menu.addAction(self.layer_img_save_button)

        # Set "Save compose image(original + layer image)" menu
        self.compose_img_save_button = QAction(
            self.style().standardIcon(getattr(QStyle, 'SP_FileDialogEnd')),
            'Save Compose Image', self)
        self.compose_img_save_button.setShortcut('Ctrl+D')
        self.compose_img_save_button.triggered.connect(self.save_compose_image)
        self.file_menu.addAction(self.compose_img_save_button)

        # Set "exit software" menu
        self.exit_button = QAction(
            self.style().standardIcon(getattr(QStyle, 'SP_DialogCloseButton')),
            'Exit', self)
        self.exit_button.setShortcut('Ctrl-Q')
        self.exit_button.setStatusTip('Exit software')
        self.exit_button.triggered.connect(self.close)
        self.file_menu.addAction(self.exit_button)

        self.upper_layout = QHBoxLayout()
        self.main_layout.addLayout(self.upper_layout)

        # Set image display area
        self.gview_default_size = 500
        self.graphics_view = QGraphicsView()
        self.graphics_view.setFixedSize(self.gview_default_size,
                                        self.gview_default_size)
        self.graphics_view.setObjectName("imageDisplayArea")
        self.upper_layout.addWidget(self.graphics_view)

        # image display area's contents
        self.scene = GraphicsSceneForMainView(self.graphics_view, self)
        self.imgs_pixmap = []
        self.imgs = []

        self.img_status_layout = QVBoxLayout()
        self.upper_layout.addLayout(self.img_status_layout)

        # Set tranparency value of layer image
        self.transparency_title_label = QLabel('layer transparency value')
        self.img_status_layout.addWidget(self.transparency_title_label)

        transparency = round((1.0 - self.layer_alpha / 255.0) * 100)
        self.img_transparency_edit = QLineEdit(str(transparency))

        self.img_transparency_sld = QSlider(Qt.Horizontal)
        self.img_transparency_sld.setFocusPolicy(Qt.NoFocus)
        self.img_transparency_sld.setRange(0, 100)
        self.img_transparency_sld.setValue(transparency)

        self.transparency_layout = QFormLayout()
        self.transparency_layout.addRow(self.img_transparency_sld,
                                        self.img_transparency_edit)
        self.img_status_layout.addLayout(self.transparency_layout)

        # Signal of transparency value changed
        self.img_transparency_sld.valueChanged.connect(
            self.transparency_change_sld)
        self.img_transparency_edit.textChanged.connect(
            self.transparency_change_edit)

        self.img_editor_layout = QVBoxLayout()
        self.img_status_layout.addLayout(self.img_editor_layout)

        # Set layer image editor tool
        self.img_editor_tool1_layout = QHBoxLayout()
        self.img_editor_layout.addLayout(self.img_editor_tool1_layout)
        self.tool_button_size = 64

        # Set Mouse cursor
        self.mouse_cursor_button = QPushButton()
        self.mouse_cursor_button.setIcon(QIcon('icon/cursor.png'))
        self.mouse_cursor_button.setCheckable(True)
        self.mouse_cursor_button.setIconSize(
            QSize(self.tool_button_size, self.tool_button_size))
        self.img_editor_tool1_layout.addWidget(self.mouse_cursor_button)

        # Set Pen
        self.pen_button = QPushButton()
        self.pen_button.setIcon(QIcon('icon/pen.png'))
        self.pen_button.setCheckable(True)
        self.pen_button.setIconSize(
            QSize(self.tool_button_size, self.tool_button_size))
        self.img_editor_tool1_layout.addWidget(self.pen_button)

        # Set Eraser
        self.eraser_button = QPushButton()
        self.eraser_button.setIcon(QIcon('icon/eraser.png'))
        self.eraser_button.setCheckable(True)
        self.eraser_button.setIconSize(
            QSize(self.tool_button_size, self.tool_button_size))
        self.img_editor_tool1_layout.addWidget(self.eraser_button)

        # Group button of mouse cursor, pen, eraser
        self.img_editor_tool1_group1 = QButtonGroup()
        self.img_editor_tool1_group1.addButton(self.mouse_cursor_button, 1)
        self.img_editor_tool1_group1.addButton(self.pen_button, 2)
        self.img_editor_tool1_group1.addButton(self.eraser_button, 3)

        # Set signal-slot of image editor button
        self.mouse_cursor_button.toggled.connect(
            self.mouse_cursor_button_toggled)
        self.pen_button.toggled.connect(self.pen_button_toggled)
        self.eraser_button.toggled.connect(self.eraser_button_toggled)

        # Set color bar
        self.color_bar_width = 64
        self.color_bar_height = 256
        self.color_bar_view = QGraphicsView()
        self.color_bar_view.setFixedSize(self.color_bar_width + 3,
                                         self.color_bar_height + 3)
        self.color_bar_scene = GraphicsSceneForTools()

        self.color_bar_img = QImage(self.color_bar_width,
                                    self.color_bar_height,
                                    QImage.Format_RGB888)

        for i in range(self.color_bar_height):
            # Set drawing pen for colormap
            ii = round(i * (1000 / 256))
            color = QColor(self.colormap_data[ii][0],
                           self.colormap_data[ii][1],
                           self.colormap_data[ii][2])
            pen = QPen(color, 1, Qt.SolidLine, \
                Qt.SquareCap, Qt.RoundJoin)
            self.color_bar_scene.addLine(0,
                                         self.color_bar_height - i - 1,
                                         self.color_bar_width,
                                         self.color_bar_height - i - 1,
                                         pen=pen)
            for j in range(self.color_bar_width):
                self.color_bar_img.setPixelColor(j,
                                                 self.color_bar_height - i - 1,
                                                 color)

        self.color_bar_scene.set_img_content(self.color_bar_img)

        self.color_bar_view.setScene(self.color_bar_scene)

        # Connect signal to slot of color_bar_scene
        self.color_bar_scene.img_info.connect(self.set_selected_color)

        self.img_editor_tool1_layout.addWidget(self.color_bar_view)

        # Set thickness of Pen or Eraser
        self.draw_status_layout = QVBoxLayout()
        self.draw_thick_title_label = QLabel('thickness of pen or eraser')
        self.draw_status_layout.addWidget(self.draw_thick_title_label)

        self.draw_thick_edit = QLineEdit(str(self.draw_tool_size))

        self.draw_thick_sld = QSlider(Qt.Horizontal)
        self.draw_thick_sld.setFocusPolicy(Qt.NoFocus)
        self.draw_thick_sld.setRange(1, 30)
        self.draw_thick_sld.setValue(self.draw_tool_size)

        self.draw_thick_layout = QFormLayout()
        self.draw_thick_layout.addRow(self.draw_thick_sld,
                                      self.draw_thick_edit)
        self.draw_status_layout.addLayout(self.draw_thick_layout)

        self.img_editor_layout.addLayout(self.draw_status_layout)

        # Signal of draw thickness value changed
        self.draw_thick_sld.valueChanged.connect(self.draw_thick_change_sld)
        self.draw_thick_edit.textChanged.connect(self.draw_thick_change_edit)

        # Set view area of selected color
        self.select_color_view_size = 64
        self.select_color_view = QGraphicsView()
        self.select_color_view.setFixedSize(self.select_color_view_size + 3,
                                            self.select_color_view_size + 3)
        self.select_color_scene = QGraphicsScene()
        brush = QBrush(self.draw_color)

        self.select_color_rect = self.select_color_scene.addRect(QRect(0, 0, self.select_color_view_size, self.select_color_view_size), \
            brush=brush)

        self.select_color_view.setScene(self.select_color_scene)

        self.select_color_title_label = QLabel('Selected color')
        self.selected_color_layout = QFormLayout()
        self.selected_color_layout.addRow(self.select_color_title_label,
                                          self.select_color_view)
        self.img_editor_layout.addLayout(self.selected_color_layout)

        # Set save button
        self.save_button_layout = QHBoxLayout()
        self.img_status_layout.addLayout(self.save_button_layout)
        self.layer_save_button = QPushButton('Save layer image')
        self.layer_save_button.setIcon(QIcon('icon/layer_save.png'))
        self.layer_save_button.setIconSize(
            QSize(self.tool_button_size, self.tool_button_size))

        self.compose_save_button = QPushButton(
            'Save composed original and layer image')
        self.compose_save_button.setIcon(QIcon('icon/compose_save.png'))
        self.compose_save_button.setIconSize(
            QSize(self.tool_button_size, self.tool_button_size))

        self.save_button_layout.addWidget(self.layer_save_button)
        self.save_button_layout.addWidget(self.compose_save_button)

        self.layer_save_button.clicked.connect(self.save_layer_image)
        self.compose_save_button.clicked.connect(self.save_compose_image)

        # Set display area of selected file path
        self.org_img_path_title_label = QLabel('original image file: ')
        self.org_img_path_label = QLabel('')

        self.file_path_layout = QFormLayout()
        self.file_path_layout.addRow(self.org_img_path_title_label,
                                     self.org_img_path_label)

        self.bottom_layout = QVBoxLayout()
        self.bottom_layout.addLayout(self.file_path_layout)
        self.main_layout.addLayout(self.bottom_layout)

        self.mainWidget.setLayout(self.main_layout)
        self.setCentralWidget(self.mainWidget)

    # Original image select Function
    def open_org_img_dialog(self):
        options = QFileDialog.Options()
        org_img_default_path = self.app_setting["SoftwareSetting"][
            "file_path"]["org_img_dir"]
        self.org_img_file_path, selected_filter = QFileDialog.getOpenFileName(self, 'Select original image', org_img_default_path, \
            'Image files(*.jpg *jpeg *.png)', options=options)

        org_img_dir_path, org_img_file = os.path.split(self.org_img_file_path)
        org_img_bare_name, org_img_ext = os.path.splitext(org_img_file)

        self.org_img_path_label.setText(self.org_img_file_path)

        self.set_image_on_viewer()

    def set_image_on_viewer(self):
        # Delete existing image item
        if len(self.imgs_pixmap) != 0:
            for item in self.imgs_pixmap:
                self.scene.removeItem(item)

        self.scene.clear_contents()
        self.imgs_pixmap.clear()
        self.imgs.clear()

        # load original image
        self.org_qimg = QImage(self.org_img_file_path)
        self.org_pixmap = QPixmap.fromImage(self.org_qimg)
        org_img_size = self.org_qimg.size()
        self.org_img_width = org_img_size.width()
        self.org_img_height = org_img_size.height()

        # Set layer image
        self.layer_qimg = QImage(self.org_img_width, self.org_img_height,
                                 QImage.Format_RGBA8888)
        self.layer_qimg.fill(QColor(0, 0, 0, self.layer_alpha))
        self.layer_pixmap = QPixmap.fromImage(self.layer_qimg)

        self.imgs.append(self.org_qimg)
        self.imgs.append(self.layer_qimg)
        # Set image to scene
        self.imgs_pixmap.append(QGraphicsPixmapItem(self.org_pixmap))
        self.scene.addItem(self.imgs_pixmap[-1])
        self.imgs_pixmap.append(QGraphicsPixmapItem(self.layer_pixmap))
        self.scene.addItem(self.imgs_pixmap[-1])

        self.scene.set_img_contents(self.imgs)

        # Set scene to graphics view
        self.graphics_view.setScene(self.scene)
        self.graphics_view.setAlignment(Qt.AlignHCenter | Qt.AlignVCenter)

        self.show()

    # Slot function of transparency slider changed
    def transparency_change_sld(self, value):
        self.img_transparency_edit.setText(str(value))
        self.layer_alpha = int(255 * (1.0 - (value / 100)))

        # Change layer image's transparency(alpha value)
        for y in range(self.org_img_height):
            for x in range(self.org_img_width):
                self.layer_qimg.setPixelColor(
                    QPoint(x, y), QColor(0, 0, 0, self.layer_alpha))

        self.layer_pixmap = QPixmap.fromImage(self.layer_qimg)

        # remove previous layer image
        self.scene.removeItem(self.imgs_pixmap[-1])
        self.imgs_pixmap.pop(-1)

        # add new layer image to scene
        self.imgs_pixmap.append(QGraphicsPixmapItem(self.layer_pixmap))
        self.scene.addItem(self.imgs_pixmap[-1])

        self.show()

    # Slot function of transparency text edit changed
    def transparency_change_edit(self, value):
        if int(value) < 0 or int(value) > 100:
            return

        self.img_transparency_sld.setValue(int(value))
        self.layer_alpha = int(255 * (1.0 - (int(value) / 100.0)))

        # Change layer image's transparency(alpha value)
        for y in range(self.org_img_height):
            for x in range(self.org_img_width):
                self.layer_qimg.setPixelColor(
                    QPoint(x, y), QColor(0, 0, 0, self.layer_alpha))

        self.layer_pixmap = QPixmap.fromImage(self.layer_qimg)

        # remove previous layer image
        self.scene.removeItem(self.imgs_pixmap[-1])
        self.imgs_pixmap.pop(-1)

        # add new layer image to scene
        self.imgs_pixmap.append(QGraphicsPixmapItem(self.layer_pixmap))
        self.scene.addItem(self.imgs_pixmap[-1])

        self.show()

    # slot(receiver of signal) of mouse_cursor_button toggled
    def mouse_cursor_button_toggled(self, checked):
        if checked:
            self.img_edit_mode = 'cursor'
            self.scene.set_mode(self.img_edit_mode)
            self.color_bar_scene.set_mode(self.img_edit_mode)

    # slot(receiver of signal) of pen_button toggled
    def pen_button_toggled(self, checked):
        if checked:
            self.img_edit_mode = 'pen'
            self.scene.set_mode(self.img_edit_mode)
            self.color_bar_scene.set_mode(self.img_edit_mode)

    # slot(receiver of signal) of eraser_button toggled
    def eraser_button_toggled(self, checked):
        if checked:
            self.img_edit_mode = 'eraser'
            self.scene.set_mode(self.img_edit_mode)
            self.color_bar_scene.set_mode(self.img_edit_mode)
            self.draw_color = self.eraser_color

            self.select_color_scene.removeItem(self.select_color_rect)
            brush = QBrush(self.draw_color)
            self.select_color_rect = self.select_color_scene.addRect(QRect(0, 0, self.select_color_view_size, self.select_color_view_size), \
                brush=brush)
            self.select_color_view.setScene(self.select_color_scene)

    # Slot of color bar clicked for selection color
    def set_selected_color(self, color):
        # Delete existng image item
        self.select_color_scene.removeItem(self.select_color_rect)
        self.draw_color = color
        brush = QBrush(self.draw_color)
        self.select_color_rect = self.select_color_scene.addRect(QRect(0, 0, self.select_color_view_size, self.select_color_view_size), \
            brush=brush)
        self.select_color_view.setScene(self.select_color_scene)

    # Slot function of draw thicikeness slider changed
    def draw_thick_change_sld(self, value):
        self.draw_thickness_edit.setText(str(value))
        self.draw_tool_size = value

    # Slot function of draw thicikeness text editor changed
    def draw_thick_change_edit(self, value):
        if int(value) < 1 or int(value) > 30:
            return
        self.draw_thickness_sld.setValue(int(value))

    def make_layer_image(self):
        for i, line in enumerate(self.scene.lines):
            pen = self.scene.pens[i]

            pen_size = int(pen.width())
            pen_color = pen.color()

            # start pixel of line
            x1 = int(line.x1())
            y1 = int(line.y1())

            # end pixel of line
            x2 = int(line.x2())
            y2 = int(line.y2())

            dx = int(line.dx())
            dy = int(line.dy())

            # When only 1pixl line
            if dx <= 1 and dy <= 1:
                draw_pix_x1_s = max(x1 - int(pen_size / 2), 0)
                draw_pix_x1_e = min(x1 + int(pen_size / 2),
                                    self.org_img_width - 1)
                draw_pix_y1_s = max(y1 - int(pen_size / 2), 0)
                draw_pix_y1_e = min(y1 + int(pen_size / 2),
                                    self.org_img_height - 1)

                # for Pen's size
                for y in range(draw_pix_y1_s, draw_pix_y1_e):
                    for x in range(draw_pix_x1_s, draw_pix_x1_e):
                        self.layer_qimg.setPixelColor(x, y, pen_color)

                draw_pix_x2_s = max(x2 - int(pen_size / 2), 0)
                draw_pix_x2_e = min(x2 + int(pen_size / 2),
                                    self.org_img_width - 1)
                draw_pix_y2_s = max(y2 - int(pen_size / 2), 0)
                draw_pix_y2_e = min(y2 + int(pen_size / 2),
                                    self.org_img_height - 1)

                # for Pen's size
                for y in range(draw_pix_y2_s, draw_pix_y2_e):
                    for x in range(draw_pix_x2_s, draw_pix_x2_e):
                        self.layer_qimg.setPixelColor(x, y, pen_color)

            else:
                # For avoid devide by 0
                if dx == 0:
                    for y in range(y1, y2 + 1):
                        draw_pix_y_s = y - int(pen_size / 2)
                        draw_pix_y_e = y + int(pen_size / 2)
                        # for Pen's size
                        for yy in range(draw_pix_y_s, draw_pix_y_e):
                            self.layer_qimg.setPixelColor(x1, yy, pen_color)

                else:
                    grad = dy / dx

                    # Choose coordinates with small slope not to skip pixels
                    if grad >= 1.0:
                        for x in range(dx):
                            y = y1 + int(grad * x + 0.5)
                            draw_pix_x_s = max(x1 + x - int(pen_size / 2), 0)
                            draw_pix_x_e = min(x1 + x + int(pen_size / 2),
                                               self.org_img_width - 1)
                            draw_pix_y_s = max(y - int(pen_size / 2), 0)
                            draw_pix_y_e = min(y + int(pen_size / 2),
                                               self.org_img_height - 1)
                            # for Pen's size
                            for yy in range(draw_pix_y_s, draw_pix_y_e + 1):
                                for xx in range(draw_pix_x_s,
                                                draw_pix_x_e + 1):
                                    self.layer_qimg.setPixelColor(
                                        xx, yy, pen_color)

                    else:
                        for y in range(dy):
                            x = x1 + int(1 / grad * y + 0.5)
                            draw_pix_y_s = max(y1 + y - int(pen_size / 2), 0)
                            draw_pix_y_e = min(y1 + y + int(pen_size / 2),
                                               self.org_img_height - 1)
                            draw_pix_x_s = max(x - int(pen_size / 2), 0)
                            draw_pix_x_e = min(x + int(pen_size / 2),
                                               self.org_img_width - 1)
                            # for Pen's size
                            for yy in range(draw_pix_y_s, draw_pix_y_e + 1):
                                for xx in range(draw_pix_x_s,
                                                draw_pix_x_e + 1):
                                    self.layer_qimg.setPixelColor(
                                        xx, yy, pen_color)

    # Slot function of save layer image button clicked
    def save_layer_image(self):

        self.make_layer_image()

        layer_img_default_path = self.app_setting["SoftwareSetting"][
            "file_path"]["layer_img_dir"]
        options = QFileDialog.Options()
        file_name, selected_filete = QFileDialog.getSaveFileName(self, 'Save layer image', layer_img_default_path, \
            'image files(*.png, *jpg)', options=options)

        #print('layer image save name:{file}'.format(file=file_name))
        self.layer_qimg.save(file_name)
        ret = QMessageBox(self, 'Success', 'layer image is saved successfully',
                          QMessageBox.Ok)

    # Make composed orignal and layered image
    def make_compose_image(self):
        self.make_layer_image()

        self.compose_qimg = QImage(self.org_img_width, self.org_img_height,
                                   QImage.Format_RGBA8888)
        painter = QPainter(self.compose_qimg)

        painter.setCompositionMode(QPainter.CompositionMode_SourceOver)
        painter.drawImage(0, 0, self.org_qimg)

        painter.setCompositionMode(QPainter.CompositionMode_SourceOver)
        painter.drawImage(0, 0, self.layer_qimg)

        painter.end()

    # Slot function of save composer original and layer image button clicked
    def save_compose_image(self):
        self.make_compose_image()

        compose_img_default_path = self.app_setting["SoftwareSetting"][
            "file_path"]["compose_img_dir"]
        options = QFileDialog.Options()
        file_name, selected_fileter = QFileDialog.getSaveFileName(self, 'Save composed image', compose_img_default_path, \
            'image files(*.png, *jpg)', options=options)

        #print('compose image save name:{file}'.format(file=file_name))
        self.compose_qimg.save(file_name)
        ret = QMessageBox(self, 'Success',
                          'compose image is saved successfully',
                          QMessageBox.Ok)
Ejemplo n.º 12
0
class ObjectIcon(QWidget):
    MIN_SIZE = QSize(32, 32)
    MAX_SIZE = MIN_SIZE * 2

    clicked: SignalInstance = Signal()
    object_placed: SignalInstance = Signal()

    def __init__(self, level_object: Optional[LevelObject] = None):
        super(ObjectIcon, self).__init__()

        size_policy = QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)

        self.setSizePolicy(size_policy)

        self.zoom = 1

        self.object = None
        self.image = QImage()

        self.set_object(level_object)

        self.draw_background_color = True

        self.max_size = self.MIN_SIZE

    def mouseMoveEvent(self, event):
        if not (event.buttons() & Qt.LeftButton):
            return super(ObjectIcon, self).mouseMoveEvent(event)

        drag = QDrag(self)

        mime_data = QMimeData()

        object_bytes = bytearray()

        if isinstance(self.object, LevelObject):
            object_bytes.append(0)
        else:
            object_bytes.append(1)

        object_bytes.extend(self.object.to_bytes())

        mime_data.setData("application/level-object", object_bytes)

        drag.setMimeData(mime_data)

        if drag.exec_() == Qt.MoveAction:
            self.object_placed.emit()

    def set_object(self, level_object: Union[LevelObject, EnemyObject]):
        if level_object is not None:
            self.object = get_minimal_icon_object(level_object)

            self.image = self.object.as_image()
            self.setToolTip(self.object.name)
        else:
            self.image = QImage()
            self.setToolTip("")

        self.update()

    def heightForWidth(self, width: int) -> int:
        current_width, current_height = self.image.size().toTuple()

        height = current_height / current_width * width

        return height

    def sizeHint(self):
        if self.object is not None and self.fits_inside(
                self.image.size() * 2, self.max_size):
            return self.image.size() * 2
        else:
            return self.max_size

    def paintEvent(self, event: QPaintEvent):
        if self.object is not None:
            painter = QPainter(self)

            if self.draw_background_color:
                painter.fillRect(
                    event.rect(),
                    QColor(*bg_color_for_palette(self.object.palette_group)))

            scaled_image = self.image.scaled(self.size(),
                                             aspectMode=Qt.KeepAspectRatio)

            x = (self.width() - scaled_image.width()) // 2
            y = (self.height() - scaled_image.height()) // 2

            painter.drawImage(x, y, scaled_image)

        return super(ObjectIcon, self).paintEvent(event)

    def mouseReleaseEvent(self, event: QMouseEvent):
        self.clicked.emit()

        return super(ObjectIcon, self).mouseReleaseEvent(event)

    @staticmethod
    def fits_inside(size1: QSize, size2: QSize):
        return size1.width() <= size2.width() and size1.height(
        ) <= size2.height()
Ejemplo n.º 13
0
class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(1024, 590)
        MainWindow.setMinimumSize(QtCore.QSize(1024, 590))
        MainWindow.setMaximumSize(QtCore.QSize(1024, 590))
        MainWindow.setStyleSheet("background-color: rgb(220, 220, 220);")
        self.switch = 0
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(10, 10, 166, 41))
        self.label.setStyleSheet(
            "border-image: url(:/newPrefix/WhatsApp Image 2020-09-11 at 12.46.25 AM.jpeg);"
        )
        pixmap = QPixmap(r"D:\finalapp\images\applogo.jpeg")
        self.label.setPixmap(pixmap)
        self.label.setScaledContents(True)
        self.label.setText("")
        self.label.setObjectName("label")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(950, 10, 31, 31))
        self.pushButton.setStyleSheet(
            "border-image: url(:/newPrefix/help.png);")
        self.pushButton.setText("")
        self.pushButton.setObjectName("pushButton")
        self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_2.setGeometry(QtCore.QRect(910, 10, 31, 31))
        self.pushButton_2.setStyleSheet(
            "border-image: url(:/newPrefix/contact.jpg);")
        self.pushButton_2.setText("")
        self.pushButton_2.setObjectName("pushButton_2")
        self.label_2 = QtWidgets.QLabel(self.centralwidget)
        self.label_2.setGeometry(QtCore.QRect(180, 50, 341, 91))
        self.label_2.setStyleSheet("border: 2px solid black;\n"
                                   "background-color: rgb(255, 255, 255);")
        self.label_2.setText("")
        self.label_2.setObjectName("label_2")
        self.label_3 = QtWidgets.QLabel(self.centralwidget)
        self.label_3.setGeometry(QtCore.QRect(540, 50, 341, 91))
        self.label_3.setStyleSheet("border: 2px solid black;\n"
                                   "background-color: rgb(255, 255, 255);")
        self.label_3.setText("")
        self.label_3.setObjectName("label_3")
        self.label_4 = QtWidgets.QLabel(self.centralwidget)
        self.label_4.setGeometry(QtCore.QRect(200, 70, 81, 16))
        self.label_4.setStyleSheet("font: 87 11pt \"Arial Black\";\n"
                                   "background-color: rgb(255, 255, 255);")
        self.label_4.setScaledContents(True)
        self.label_4.setIndent(-1)
        self.label_4.setObjectName("label_4")
        self.label_6 = QtWidgets.QLabel(self.centralwidget)
        self.label_6.setGeometry(QtCore.QRect(200, 100, 91, 16))
        self.label_6.setStyleSheet("font: 87 11pt \"Arial Black\";\n"
                                   "background-color: rgb(255, 255, 255);")
        self.label_6.setScaledContents(True)
        self.label_6.setIndent(-1)
        self.label_6.setObjectName("label_6")
        self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit.setGeometry(QtCore.QRect(300, 70, 161, 21))
        self.lineEdit.setObjectName("lineEdit")
        self.lineEdit_2 = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit_2.setGeometry(QtCore.QRect(300, 100, 161, 21))
        self.lineEdit_2.setObjectName("lineEdit_2")
        self.pushButton_4 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_4.setGeometry(QtCore.QRect(470, 100, 31, 21))
        self.pushButton_4.setStyleSheet(
            "border-image: url(:/newPrefix/submit.png);")
        self.pushButton_4.setText("")
        self.pushButton_4.setObjectName("pushButton_4")
        self.pushButton_4.clicked.connect(self.password)
        self.pushButton_3 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_3.setGeometry(QtCore.QRect(470, 70, 31, 21))
        self.pushButton_3.setAutoFillBackground(False)
        self.pushButton_3.setStyleSheet(
            "border-image: url(:/newPrefix/file.jpg);")
        self.pushButton_3.setText("")
        self.pushButton_3.setIconSize(QtCore.QSize(11, 11))
        self.pushButton_3.setObjectName("pushButton_3")
        self.pushButton_3.clicked.connect(self.browseImage)
        self.pushButton_5 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_5.setGeometry(QtCore.QRect(550, 60, 101, 31))
        self.pushButton_5.setStyleSheet("font: 87 8pt \"Arial Black\";")
        self.pushButton_5.setObjectName("pushButton_5")
        self.pushButton_5.clicked.connect(self.open_settings)
        self.pushButton_6 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_6.setGeometry(QtCore.QRect(770, 60, 101, 31))
        self.pushButton_6.setStyleSheet("font: 87 8pt \"Arial Black\";")
        self.pushButton_6.setObjectName("pushButton_6")
        self.pushButton_6.clicked.connect(self.openFontDialog)
        self.pushButton_7 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_7.setGeometry(QtCore.QRect(660, 60, 101, 31))
        self.pushButton_7.setStyleSheet("font: 87 8pt \"Arial Black\";")
        self.pushButton_7.setObjectName("pushButton_7")
        self.pushButton_7.clicked.connect(self.printpreviewDialog)
        self.pushButton_8 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_8.setGeometry(QtCore.QRect(660, 100, 101, 31))
        self.pushButton_8.setStyleSheet("font: 87 8pt \"Arial Black\";")
        self.pushButton_8.setObjectName("pushButton_8")
        self.pushButton_8.clicked.connect(self.resizeimage)
        self.pushButton_9 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_9.setGeometry(QtCore.QRect(550, 100, 101, 31))
        self.pushButton_9.setStyleSheet("font: 87 8pt \"Arial Black\";")
        self.pushButton_9.setObjectName("pushButton_9")
        self.pushButton_9.clicked.connect(self.trouble)
        self.pushButton_10 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_10.setGeometry(QtCore.QRect(770, 100, 101, 31))
        self.pushButton_10.setStyleSheet("font: 87 8pt \"Arial Black\";")
        self.pushButton_10.setObjectName("pushButton_10")
        self.line = QtWidgets.QFrame(self.centralwidget)
        self.line.setGeometry(QtCore.QRect(0, 160, 1021, 31))
        self.line.setFrameShape(QtWidgets.QFrame.HLine)
        self.line.setFrameShadow(QtWidgets.QFrame.Sunken)
        self.line.setObjectName("line")
        self.checkBox = QtWidgets.QCheckBox(self.centralwidget)
        self.checkBox.setGeometry(QtCore.QRect(20, 540, 121, 21))
        font = QtGui.QFont()
        font.setPointSize(10)
        font.setBold(True)
        font.setWeight(75)
        self.checkBox.setFont(font)
        self.checkBox.setObjectName("checkBox")
        self.checkBox.stateChanged.connect(self.clickBox)
        self.checkBox_2 = QtWidgets.QCheckBox(self.centralwidget)
        self.checkBox_2.setGeometry(QtCore.QRect(880, 540, 121, 21))
        self.checkBox_2.stateChanged.connect(self.clickBox2)
        font = QtGui.QFont()
        font.setPointSize(10)
        font.setBold(True)
        font.setWeight(75)
        self.checkBox_2.setFont(font)
        self.checkBox_2.setObjectName("checkBox_2")
        self.label_5 = QtWidgets.QLabel(self.centralwidget)
        self.label_5.setGeometry(QtCore.QRect(10, 210, 1001, 311))
        self.label_5.setStyleSheet("background-color: rgb(239, 239, 239);")
        self.label_5.setText("")
        self.label_5.setObjectName("label_5")
        self.groupBox = QtWidgets.QGroupBox(self.centralwidget)
        self.groupBox.setGeometry(QtCore.QRect(18, 215, 490, 300))
        self.groupBox.setTitle("")
        self.groupBox.setObjectName("groupBox")
        self.label_7 = QtWidgets.QLabel(self.groupBox)
        self.label_7.setGeometry(QtCore.QRect(0, 0, 491, 53))
        self.label_7.setStyleSheet("")
        self.label_7.setText("")
        self.label_7.setObjectName("label_7")
        self.label_9 = QtWidgets.QLabel(self.groupBox)
        self.label_9.setGeometry(QtCore.QRect(40, 50, 120, 152))
        self.label_9.setStyleSheet("")
        self.label_9.setText("")
        self.label_9.setObjectName("label_9")
        self.label_10 = QtWidgets.QLabel(self.groupBox)
        self.label_10.setGeometry(QtCore.QRect(170, 63, 251, 25))
        self.label_10.setStyleSheet("")
        self.label_10.setText("")
        self.label_10.setObjectName("label_10")
        self.label_11 = QtWidgets.QLabel(self.groupBox)
        self.label_11.setGeometry(QtCore.QRect(170, 89, 251, 25))
        self.label_11.setStyleSheet("")
        self.label_11.setText("")
        self.label_11.setObjectName("label_11")
        self.label_12 = QtWidgets.QLabel(self.groupBox)
        self.label_12.setGeometry(QtCore.QRect(170, 115, 251, 25))
        self.label_12.setStyleSheet("")
        self.label_12.setText("")
        self.label_12.setObjectName("label_12")
        self.label_13 = QtWidgets.QLabel(self.groupBox)
        self.label_13.setGeometry(QtCore.QRect(170, 140, 251, 21))
        self.label_13.setStyleSheet("")
        self.label_13.setText("")
        self.label_13.setObjectName("label_13")
        self.label_14 = QtWidgets.QLabel(self.groupBox)
        self.label_14.setGeometry(QtCore.QRect(170, 170, 251, 25))
        self.label_14.setStyleSheet("")
        self.label_14.setText("")
        self.label_14.setObjectName("label_14")
        self.label_15 = QtWidgets.QLabel(self.groupBox)
        self.label_15.setGeometry(QtCore.QRect(0, 270, 491, 32))
        self.label_15.setStyleSheet("")
        self.label_15.setText("")
        self.label_15.setObjectName("label_15")
        self.label_16 = QtWidgets.QLabel(self.groupBox)
        self.label_16.setGeometry(QtCore.QRect(0, 267, 491, 5))
        self.label_16.setStyleSheet("")
        self.label_16.setText("")
        self.label_16.setObjectName("label_16")
        self.label_20 = QtWidgets.QLabel(self.groupBox)
        self.label_20.setGeometry(QtCore.QRect(10, 60, 16, 141))
        self.label_20.setText("")
        self.label_20.setObjectName("label_20")
        self.label_21 = QtWidgets.QLabel(self.groupBox)
        self.label_21.setGeometry(QtCore.QRect(460, 70, 16, 171))
        self.label_21.setText("")
        self.label_21.setObjectName("label_21")
        self.label_23 = QtWidgets.QLabel(self.groupBox)
        self.label_23.setGeometry(QtCore.QRect(90, 246, 311, 23))
        self.label_23.setStyleSheet("font-size:12")
        self.label_23.setFont(QFont('Arial', 12, weight=QtGui.QFont.Bold))
        self.label_23.setObjectName("label_23")
        self.label_23.setAlignment(Qt.AlignAbsolute)
        self.label_24 = QtWidgets.QLabel(self.groupBox)
        self.label_24.setGeometry(QtCore.QRect(110, 222, 311, 23))
        self.label_24.setStyleSheet("font-size:15")
        self.label_24.setFont(QFont('Arial', 12, weight=QtGui.QFont.Bold))
        self.label_24.setObjectName("label_24")
        self.label_24.setAlignment(Qt.AlignBottom)
        self.label_31 = QtWidgets.QLabel(self.groupBox)
        self.label_31.setGeometry(QtCore.QRect(10, 60, 21, 141))
        self.label_31.setStyleSheet("")
        self.label_31.setText("")
        self.label_31.setObjectName("label_31")
        self.label_32 = QtWidgets.QLabel(self.groupBox)
        self.label_32.setGeometry(QtCore.QRect(450, 70, 31, 171))
        self.label_32.setStyleSheet("")
        self.label_32.setText("")
        self.label_32.setObjectName("label_32")
        self.groupBox_2 = QtWidgets.QGroupBox(self.centralwidget)
        self.groupBox_2.setGeometry(QtCore.QRect(515, 215, 490, 300))
        self.groupBox_2.setTitle("")
        self.groupBox_2.setObjectName("groupBox_2")
        self.label_8 = QtWidgets.QLabel(self.groupBox_2)
        self.label_8.setGeometry(QtCore.QRect(0, 0, 491, 51))
        self.label_8.setText("")
        self.label_8.setObjectName("label_8")
        self.label_17 = QtWidgets.QLabel(self.groupBox_2)
        self.label_17.setGeometry(QtCore.QRect(0, 0, 491, 51))
        self.label_17.setStyleSheet("")
        self.label_17.setText("")
        self.label_17.setObjectName("label_17")
        self.label_19 = QtWidgets.QLabel(self.groupBox_2)
        self.label_19.setGeometry(QtCore.QRect(0, 269, 491, 31))
        self.label_19.setStyleSheet("")
        self.label_19.setText("")
        self.label_19.setObjectName("label_19")
        self.label_18 = QtWidgets.QLabel(self.groupBox_2)
        self.label_18.setGeometry(QtCore.QRect(0, 262, 491, 5))
        self.label_18.setStyleSheet("")
        self.label_18.setText("")
        self.label_18.setObjectName("label_18")
        self.label_22 = QtWidgets.QLabel(self.groupBox_2)
        self.label_22.setGeometry(QtCore.QRect(330, 70, 143, 143))
        self.label_22.setText("")
        self.label_22.setObjectName("label_22")
        self.label_25 = QtWidgets.QLabel(self.groupBox_2)
        self.label_25.setGeometry(QtCore.QRect(330, 60, 143, 143))
        self.label_25.setStyleSheet("")
        self.label_25.setText("")
        self.label_25.setObjectName("label_25")
        self.label_26 = QtWidgets.QLabel(self.groupBox_2)
        self.label_26.setGeometry(QtCore.QRect(330, 220, 161, 21))
        self.label_26.setStyleSheet("")
        self.label_26.setText("")
        self.label_26.setObjectName("label_26")
        self.label_27 = QtWidgets.QLabel(self.groupBox_2)
        self.label_27.setGeometry(QtCore.QRect(70, 220, 261, 21))
        self.label_27.setStyleSheet("font-size:15")
        self.label_27.setText("")
        self.label_27.setFont(QFont('Arial', 12, weight=QtGui.QFont.Bold))
        self.label_27.setObjectName("label_27")
        self.label_27.setAlignment(Qt.AlignAbsolute)
        self.label_28 = QtWidgets.QLabel(self.groupBox_2)
        self.label_28.setGeometry(QtCore.QRect(30, 240, 281, 22))
        self.label_28.setStyleSheet("")
        self.label_28.setStyleSheet("font-size:12")
        self.label_28.setText("")
        self.label_28.setFont(QFont('Arial', 12, weight=QtGui.QFont.Bold))
        self.label_28.setObjectName("label_28")
        self.label_28.setAlignment(Qt.AlignAbsolute | Qt.AlignJustify)
        self.label_29 = QtWidgets.QLabel(self.groupBox_2)
        self.label_29.setGeometry(QtCore.QRect(10, 60, 321, 75))
        self.label_29.setStyleSheet("")
        self.label_29.setText("")
        self.label_29.setObjectName("label_29")
        self.label_30 = QtWidgets.QLabel(self.groupBox_2)
        self.label_30.setGeometry(QtCore.QRect(10, 140, 341, 75))
        self.label_30.setStyleSheet("")
        self.label_30.setText("")
        self.label_30.setObjectName("label_30")
        MainWindow.setCentralWidget(self.centralwidget)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)
        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)
        # create temp folder
        self.path = tempfile.mkdtemp()

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "Aapki Pehchaan"))
        self.label_4.setText(_translate("MainWindow", "Filename:"))
        self.label_6.setText(_translate("MainWindow", "Password:"******"MainWindow", "Settings"))
        self.pushButton_6.setText(_translate("MainWindow", "Font"))
        self.pushButton_7.setText(_translate("MainWindow", "Print"))
        self.pushButton_8.setText(_translate("MainWindow", "Resize"))
        self.pushButton_9.setText(_translate("MainWindow", "Report"))
        self.pushButton_10.setText(_translate("MainWindow", "License"))
        self.checkBox.setText(_translate("MainWindow", "PRINT FRONT"))
        self.checkBox_2.setText(_translate("MainWindow", "PRINT BACK"))

    def clickBox(self, state):
        if state == QtCore.Qt.Checked:
            print('Checked')
            self.take_screenshot()
        else:
            print('Unchecked')

    def clickBox2(self, state):
        if state == QtCore.Qt.Checked:
            print('Checked')
            self.take_screenshot2()
        else:
            print('Unchecked')

    def topimage(self):
        pixmap = QPixmap(r'images/Ashok Stambh Front.png')
        self.label_7.setPixmap(pixmap)
        self.label_7.setScaledContents(True)

    def nextpagebottomimage(self):
        pixmap = QPixmap(r'D:\finalapp\images\Back side Symbol.png')
        self.label_19.setPixmap(pixmap)
        self.label_19.setScaledContents(True)

    def photoextraction(self, doc):

        for i in range(len(doc)):
            for img in doc.getPageImageList(i):
                xref = img[0]
                pix = fitz.Pixmap(doc, xref)
                if pix.n < 1:
                    pix.writePNG(
                        os.path.join(self.path, "p%s-%s.png" % (i, xref)))
                else:
                    pix1 = fitz.Pixmap(fitz.csRGB, pix)
                    pix1.writePNG(
                        os.path.join(self.path, "p%s-%s.png" % (i, xref)))
                try:
                    # HUMAN IMAGE IN ADHAR
                    if pix.width == float(
                            0.8
                    ) * pix.height or pix.width == 0.75 * pix.height:
                        self.human_image = os.path.join(
                            self.path, "p%s-%s.png" % (i, xref))
                        pixmap = QPixmap(self.human_image)
                        self.label_9.setPixmap(pixmap)
                        self.label_9.setScaledContents(True)

                    # SCANNER CODE IN ADHAR
                    elif pix.width == pix.height:
                        pixmap = QPixmap(
                            os.path.join(self.path, "p%s-%s.png" % (i, xref)))
                        self.label_25.setPixmap(pixmap)
                        self.label_25.setScaledContents(True)
                except Exception as e:
                    print(e)
                    print("fault in human and scanner image")

    def setText_to_elements(self, a):

        self.label_13.setText(self.text_ex['DOB'])
        self.label_10.setText(self.text_ex['namehindi'])
        self.label_11.setText(self.text_ex['englishname'])
        self.label_12.setText(self.text_ex['gender string'])
        self.label_29.setText(self.text_ex['hindiAddress'])
        self.label_30.setText("Address: " + "\n" + self.text_ex['engAddress'])
        self.label_30.adjustSize()
        self.label_27.setText(self.text_ex['Adhaar no'])
        if (self.text_ex['VID'] != None):
            self.label_23.setText("VID: " + self.text_ex['VID'])
            self.label_23.adjustSize()
            self.label_23.setStyleSheet(
                "border-top:0.5px solid rgb(220, 220, 220);")

            self.label_28.setText("VID: " + self.text_ex['VID'])
            self.label_28.adjustSize()
            self.label_28.setStyleSheet(
                "border-top:0.5px solid rgb(220, 220, 220);")

        self.label_24.setText(self.text_ex['Adhaar no'])

    def password(self):
        self.switch = 1
        r = self.lineEdit.text()
        pwd = self.lineEdit_2.text()

        if pwd != "":
            try:
                mypdf = pikepdf.open(r, pwd)
                r = os.path.join(self.path, "/pdffile", r, "unlocked.pdf")
                mypdf.save(r)
            except pikepdf._qpdf.PasswordError:
                print("hi")
                self.showdialog()
                #         print('cannot decrypt %s with password %s' % (r, pwd))
        else:
            pikepdf.open(r)

        print(r)
        # Hit fast api endpoint with PDF file

        doc = fitz.open(r)
        # # try:
        res = requests.post(BASE_URL + '/uploadfile/',
                            files={'pdf': open(r, 'rb')})
        data = res.json()
        self.text_ex = data["text"]
        name = self.name_ex(doc)
        self.text_ex["englishname"] = name

        try:

            self.groupBox.setStyleSheet("background-color:rgb(255,255,255)")
            self.groupBox_2.setStyleSheet("background-color:rgb(255,255,255)")
            self.photoextraction(doc)
            self.setText_to_elements(self.text_ex)
            self.nextpagetop()
            self.topimage()
            self.redline()
            self.nextpagetop()
            self.defaultfooter()
            self.nextpagebottomimage()
            self.label_26.clear()

        except Exception as e:
            print(e)
            print("Sorry!response invalid")

    def image_smoothening(self, img):
        ret1, th1 = cv2.threshold(img, BINARY_THREHOLD, 255, cv2.THRESH_BINARY)
        ret2, th2 = cv2.threshold(th1, 0, 255,
                                  cv2.THRESH_BINARY + cv2.THRESH_OTSU)
        blur = cv2.GaussianBlur(th2, (1, 1), 0)
        ret3, th3 = cv2.threshold(blur, 0, 255,
                                  cv2.THRESH_BINARY + cv2.THRESH_OTSU)
        return th3

    def remove_noise_and_smooth(self, file_name):
        img = cv2.imread(file_name, 0)
        img = cv2.resize(img, None, fx=2, fy=2, interpolation=cv2.INTER_CUBIC)
        gaus = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C,
                                     cv2.THRESH_BINARY, 31, 25)
        img = self.image_smoothening(gaus)
        return img

    def name_ex(self, doc):

        page = doc.loadPage(0)
        mat = fitz.Matrix(2, 2)
        pix = page.getPixmap(matrix=mat)

        outfile = os.path.join(self.path, "outfile.png")
        output = pix.writePNG(outfile)
        image_full = cv2.imread(outfile)

        path = os.path.join(self.path, "image_full.png")
        cv2.imwrite(path, image_full)

        image_front = image_full[1140:1475, 120:500]
        a = os.path.join(self.path, "image_front.png")
        cv2.imwrite(a, image_front)

        image_front1 = self.remove_noise_and_smooth(a)
        pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'
        text = pytesseract.image_to_string(image_front1, lang="eng")

        try:
            newlist1 = []
            for xx in text.split('\n'):
                newlist1.append(xx)
                newlist1 = list(filter(lambda x: len(x) > 1, newlist1))
            a = 0
            str2 = "Government"
            str1 = "of"
            for no in newlist1:
                if str2 in no or str1 in no:
                    b = a
                a = a + 1
            name = newlist1[b + 2]
            name = name.split(" ")
            print(name)
            if len(name) == 2:
                print(name)
                name = " ".join(name)
                print(name)
                return name
            else:
                name = " ".join(name)
                name = re.sub(r'[(' ')]', '', name)
                name = re.sub(r'[0-9]+', '', name)
                # name = re.sub(r'[;'';;!@#!@#!#!$!=()|:><~~' '__-]+','',name)

                wordlist = self.text_ex['raw'].split("\n")
                name = get_close_matches(name, wordlist)
                print(name)
                return name[0]

        except Exception as e:
            print(e)
            pass

    def showdialog(self):
        msg = QMessageBox()
        msg.setIcon(QMessageBox.Warning)
        msg.setText("file extension not supported")
        msg.setWindowTitle("ERROR!")

        retval = msg.exec_()
        print("value of pressed message box button:", retval)

    def browseImage(self):
        """
                    this function opens the dialog box.
                """
        foldername = QFileDialog.getOpenFileName()
        ext = os.path.splitext(foldername[0])[1]
        valid_extensions = '.pdf'
        if ext != valid_extensions:
            print(u'File not supported!')
            self.showdialog()

        pdffile = foldername[0]
        self.lineEdit.setText(pdffile)

    def printpreviewDialog(self):
        printer = QPrinter(QPrinter.HighResolution)
        previewDialog = QPrintPreviewDialog(printer,
                                            parent=None,
                                            flags=Qt.WindowFlags())

        previewDialog.paintRequested.connect(self.printImage)
        previewDialog.exec_()

    def printImage(self, printer):
        "Prints the current diagram"
        self.image = QImage('test1.tif')

        # # Create the printer
        printerobject = QPrinter()
        # Set the settings
        printdialog = QPrintDialog(printerobject)
        if printdialog.exec_() == QDialog.Accepted:
            painter = QPainter(printer)
            rect = painter.viewport()
            size = self.image.size()
            size.scale(rect.size(), Qt.KeepAspectRatio)
            painter.setViewport(rect.x(), rect.y(), size.width(),
                                size.height())
            painter.setWindow(self.image.rect())
            painter.drawImage(0, 0, self.image)

    def take_screenshot2(self):
        from PySide2 import QtCore as pyqt5c
        from PySide2 import QtWidgets as pyqt5w

        screen = pyqt5w.QApplication.primaryScreen()
        pixmap = screen.grabWindow(self.groupBox_2.winId())

        ba = pyqt5c.QByteArray()
        buff = pyqt5c.QBuffer(ba)
        pixmap = pixmap.scaled(500, 500, Qt.KeepAspectRatio,
                               Qt.SmoothTransformation)
        pixmap.save('test1.tif', 'TIF')
        return ba.data()

    def take_screenshot(self):
        from PySide2 import QtCore as pyqt5c
        from PySide2 import QtWidgets as pyqt5w

        screen = pyqt5w.QApplication.primaryScreen()
        pixmap = screen.grabWindow(self.groupBox.winId())

        ba = pyqt5c.QByteArray()
        buff = pyqt5c.QBuffer(ba)
        pixmap = pixmap.scaled(500, 500, Qt.KeepAspectRatio,
                               Qt.SmoothTransformation)
        pixmap.save('test1.tif', 'TIF')
        return ba.data()

    def openFontDialog(self):
        ok, font = QFontDialog.getFont()
        if ok:
            self.label_10.setFont(font)
            self.label_11.setFont(font)
            self.label_12.setFont(font)
            self.label_13.setFont(font)
            self.label_14.setFont(font)
            self.label_30.setFont(font)
            self.label_29.setFont(font)
            self.label_10.adjustSize()
            self.label_11.adjustSize()
            self.label_12.adjustSize()
            self.label_13.adjustSize()
            self.label_14.adjustSize()
            self.label_30.adjustSize()
            self.label_29.adjustSize()

    def trouble(self):
        self.window = QtWidgets.QMainWindow()
        self.ui = Ui_MainWindow3()
        self.ui.setupUi(self.window)
        self.window.show()

    def photoframe(self):
        if self.ui.checkBox_10.isChecked() == True:
            self.label_9.setStyleSheet("border: 2px solid black;")
        else:
            self.label_9.setStyleSheet("border: 0px solid black;")

    def redline(self):
        pixmap = QPixmap(r'D:\finalapp\images\redline.jpeg')
        self.label_16.setPixmap(pixmap)
        self.label_16.setScaledContents(True)

        self.label_18.setPixmap(pixmap)
        self.label_18.setScaledContents(True)

    def frontpageheader(self):
        if self.ui.checkBox.isChecked() == True:
            self.topimage()
        else:
            self.label_7.clear()

    def rearpagefooter(self):
        if self.ui.checkBox_6.isChecked() == True:
            self.nextpagebottomimage()
        else:
            self.label_19.clear()

    def phnno(self):
        if self.ui.checkBox_14.isChecked() == True:
            self.label_14.setText("Mobile No:" + self.text_ex['mobile no'])

        else:
            self.label_14.clear()

    def put_uid(self):
        sentence = self.text_ex['Adhaar no']
        space = sentence.replace(" ", "")
        number = space

        import barcode
        from barcode.writer import ImageWriter
        ITF = barcode.get_barcode_class('itf')
        itf = ITF(number, writer=ImageWriter())
        fullname = itf.save('itf_barcode', options={"write_text": False})
        print(fullname)
        pixmap = QPixmap('itf_barcode.png')
        self.label_26.setPixmap(pixmap)
        self.label_26.setScaledContents(True)

    def barcode(self):

        try:

            if self.ui.checkBox_7.isChecked() == True:
                self.put_uid()
                self.label_28.clear()
                self.label_27.clear()

            else:
                self.label_26.clear()
                self.label_28.setText("VID: " + self.text_ex['VID'])
                self.label_27.setText(self.text_ex['Adhaar no'])
        except:
            self.label_26.clear()
            self.label_28.setText("VID: " + self.text_ex['VID'])
            self.label_27.setText(self.text_ex['Adhaar no'])

    def vid(self):

        if self.ui.checkBox_15.isChecked() == True:
            if (self.text_ex['VID'] != None):
                self.label_23.setText("VID: " + self.text_ex['VID'])
                self.label_28.setText("VID: " + self.text_ex['VID'])
                # self.label_23.setAlignment(Qt.AlignCenter)
                # self.label_28.setAlignment(Qt.AlignCenter)
        else:
            self.label_23.clear()
            self.label_28.clear()

    def frontpageheadermargin(self):

        if self.ui.checkBox_2.isChecked() == True:
            pixmap = QPixmap(r'D:\finalapp\images\redline.jpeg')
            self.label_16.setPixmap(pixmap)
            self.label_16.setScaledContents(True)

        else:
            self.label_16.clear()

    def RearPageFooterMargin(self):

        if self.ui.checkBox_5.isChecked() == True:
            pixmap = QPixmap(r'D:\finalapp\images\redline.jpeg')
            self.label_18.setPixmap(pixmap)
            self.label_18.setScaledContents(True)

        else:
            self.label_18.clear()

    def rearpageheader(self):
        if self.ui.checkBox_4.isChecked() == True:
            self.nextpagetop()
        else:
            pixmap = QPixmap(None)
            self.label_17.setPixmap(pixmap)
            self.label_17.setScaledContents(True)

    def nextpagetop(self):
        pixmap = QPixmap('images/Aadhar Back Side Top.jpg')
        self.label_17.setPixmap(pixmap)
        self.label_17.setScaledContents(True)

    def defaultfooter(self):
        pixmap1 = QPixmap('images/footertext/hinditext.jpg')
        self.label_15.setPixmap(pixmap1)
        self.label_15.setScaledContents(True)
        # self.label_15.adjustSize()

    def hindifooter(self):
        if self.ui.checkBox_16.isChecked() == True:
            pixmap1 = QPixmap('images/footertext/hinditext.jpg')
            self.label_15.setPixmap(pixmap1)
            self.label_15.setScaledContents(True)

        else:
            pixmap = QPixmap(None)
            self.label_15.setPixmap(pixmap)
            self.label_15.setScaledContents(True)

    def Tamilfooter(self):
        if self.ui.checkBox_17.isChecked() == True:
            pixmap1 = QPixmap('images/footertext/Tamiltext.png')
            self.label_15.setPixmap(pixmap1)
            self.label_15.setScaledContents(True)
        else:
            pixmap = QPixmap(None)
            self.label_15.setPixmap(pixmap)
            self.label_15.setScaledContents(True)

    def Marathifooter(self):
        if self.ui.checkBox_19.isChecked() == True:
            pixmap1 = QPixmap('images/footertext/Marathitext.png')
            self.label_15.setPixmap(pixmap1)
            self.label_15.setScaledContents(True)
        else:
            pixmap = QPixmap(None)
            self.label_15.setPixmap(pixmap)
            self.label_15.setScaledContents(True)

    def Punjabifooter(self):
        if self.ui.checkBox_18.isChecked() == True:
            pixmap1 = QPixmap('images/footertext/Punjabitext.png')
            self.label_15.setPixmap(pixmap1)
            self.label_15.setScaledContents(True)
        else:
            pixmap = QPixmap(None)
            self.label_15.setPixmap(pixmap)
            self.label_15.setScaledContents(True)

    def FrontPageFooter(self):
        if self.ui.checkBox_3.isChecked() == True:
            if self.ui.checkBox_16.isChecked():
                self.hindifooter()
            elif self.ui.checkBox_17.isChecked():
                self.Tamilfooter()
            elif self.ui.checkBox_19.isChecked():
                self.Marathifooter()
            else:
                pixmap = QPixmap(None)
                self.label_15.setPixmap(pixmap)
                self.label_15.setScaledContents(True)

        else:
            pixmap = QPixmap(None)
            self.label_15.setPixmap(pixmap)
            self.label_15.setScaledContents(True)

    def put_dd(self):
        filename = os.path.join(self.path, "img01.png")
        fnt = ImageFont.truetype('arial.ttf', 37)
        # create new image
        a = self.text_ex["Downloaddate"]
        image = Image.new(mode="RGB", size=(440, 100), color="white")
        draw = ImageDraw.Draw(image)
        draw.text((18, 18), a, font=fnt, fill=(0, 0, 0))
        image.save(filename)

        # os.system(filename)
        angle = 90  # What angle would you like to rotate
        self.pixmap = QPixmap(filename)  # image for your label
        pixmap_rotated = self.pixmap.transformed(
            QTransform().rotate(angle), QtCore.Qt.SmoothTransformation)
        self.label_31.setPixmap(
            pixmap_rotated)  # set rotated pixmap into your QLabel
        self.label_31.setScaledContents(True)
        self.label_31.setAlignment(Qt.AlignCenter)
        self.label_31.setStyleSheet("QLabel {background-color: white;}")

    def put_id(self):
        filename = os.path.join(self.path, "img02.png")
        fnt = ImageFont.truetype('arial.ttf', 37)
        # create new image
        image = Image.new(mode="RGB", size=(440, 100), color="white")
        draw = ImageDraw.Draw(image)
        a = self.text_ex["Issuedate"]
        draw.text((0, 0), a, font=fnt, fill=(0, 0, 0))
        image.save(filename)

        # os.system(filename)
        angle = 270 + 180  # What angle would you like to rotate
        self.pixmap = QPixmap(filename)  # image for your label
        pixmap_rotated = self.pixmap.transformed(
            QTransform().rotate(angle), QtCore.Qt.SmoothTransformation)
        self.label_32.setPixmap(
            pixmap_rotated)  # set rotated pixmap into your QLabel
        self.label_32.setScaledContents(True)
        self.label_32.setAlignment(Qt.AlignCenter)

    def dd(self):
        if self.ui.checkBox_11.isChecked() == True:
            self.put_dd()
        else:
            pixmap = QPixmap(None)
            self.label_31.setPixmap(pixmap)
            self.label_31.setScaledContents(True)

    def id(self):
        if self.ui.checkBox_12.isChecked() == True:
            self.put_id()
        else:
            pixmap = QPixmap(None)
            self.label_32.setPixmap(pixmap)
            self.label_32.setScaledContents(True)

    def uid(self):
        if self.ui.checkBox_8.isChecked() == True:
            self.put_uid()
        else:
            pixmap = QPixmap(None)
            self.label_26.setPixmap(pixmap)
            self.label_26.setScaledContents(True)

    def open_settings(self):
        self.window = QtWidgets.QMainWindow()
        self.ui = Ui_MainWindow1()
        self.ui.setup(self.window)
        self.ui.checkBox_15.setChecked(True)
        self.ui.checkBox_15.toggled.connect(self.vid)
        self.ui.checkBox_14.toggled.connect(self.phnno)
        self.ui.checkBox_7.toggled.connect(self.barcode)
        self.ui.checkBox_2.setChecked(True)
        self.ui.checkBox_2.toggled.connect(self.frontpageheadermargin)
        self.ui.checkBox_5.setChecked(True)
        self.ui.checkBox_5.toggled.connect(self.RearPageFooterMargin)
        self.ui.checkBox.setChecked(True)
        self.ui.checkBox.toggled.connect(self.frontpageheader)
        self.ui.checkBox_6.setChecked(True)
        self.ui.checkBox_6.toggled.connect(self.rearpagefooter)
        # self.ui.checkBox_10.setChecked(True)
        self.ui.checkBox_10.toggled.connect(self.photoframe)
        self.ui.checkBox_4.setChecked(True)
        self.ui.checkBox_4.toggled.connect(self.rearpageheader)
        self.ui.checkBox_16.setChecked(True)
        self.ui.checkBox_16.toggled.connect(self.hindifooter)
        self.ui.checkBox_17.toggled.connect(self.Tamilfooter)
        self.ui.checkBox_18.toggled.connect(self.Punjabifooter)
        self.ui.checkBox_19.toggled.connect(self.Marathifooter)
        self.ui.checkBox_3.setChecked(True)
        self.ui.checkBox_3.toggled.connect(self.FrontPageFooter)
        self.ui.checkBox_11.toggled.connect(self.dd)
        self.ui.checkBox_12.toggled.connect(self.id)
        self.ui.checkBox_8.toggled.connect(self.uid)

        self.window.show()

    def resizeimage(self):
        self.Resize = QtWidgets.QMainWindow()
        self.ui2 = Ui_MainWindow9()
        self.ui2.setupUi(self.Resize)
        self.ui2.horizontalSlider_11.valueChanged[int].connect(self.height)
        self.ui2.horizontalSlider_10.valueChanged[int].connect(self.Width)
        self.ui2.horizontalSlider_9.valueChanged[int].connect(self.side)
        self.Resize.show()

    def side(self, value):
        w = self.ui2.horizontalSlider_9.value()
        self.label_25.resize(w, w)

    def height(self, value):
        w = self.ui2.horizontalSlider_10.value()
        self.label_9.resize(w, value)

    def Width(self, value):
        h = self.ui2.horizontalSlider_11.value()
        self.label_9.resize(value, h)
Ejemplo n.º 14
0
class IconEditor(QWidget):
    def __init__(self):
        super(IconEditor, self).__init__()
        self.setAttribute(Qt.WA_StaticContents)
        self.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Minimum)
        self.curColor = Qt.black
        self.zoom = 8 * 1
        self.image = QImage(16, 16, QImage.Format_ARGB32)
        self.image.fill(qRgba(0, 0, 0, 0))

    def penColor(self):
        return self.curColor

    def setPenColor(self, newColor):
        self.curColor = newColor

    def zoomFactor(self):
        return self.zoom

    def setZoomFactor(self, newZoom):
        if newZoom < 1:
            newZoom = 1

        if newZoom != self.zoom:
            self.zoom = newZoom
            self.update()
            self.updateGeometry()

    def iconImage(self):
        return self.image

    def setIconImage(self, newImage):

        if newImage != self.image:
            print('updating image')
            self.image = newImage.convertToFormat(QImage.Format_ARGB32)
            self.update()
            self.updateGeometry()

    def sizeHint(self):
        size = self.zoom * self.image.size()
        if self.zoom >= 3:
            size += QSize(1, 1)
        return size

    def pixelRect(self, i, j):
        if self.zoom >= 3:
            return QRect(self.zoom * i + 1, self.zoom * j + 1, self.zoom - 1,
                         self.zoom - 1)
        else:
            return QRect(self.zoom * i, self.zoom * j, self.zoom, self.zoom)

    def mousePressEvent(self, event):
        if event.button() == Qt.LeftButton:
            self.setImagePixel(event.pos(), True)
            print('mouse left press')
        elif event.button() == Qt.RightButton:
            self.setImagePixel(event.pos(), False)
            print('mouse right press')

    def mouseMoveEvent(self, event):
        if event.buttons() & Qt.LeftButton:
            self.setImagePixel(event.pos(), True)
        elif event.buttons() & Qt.RightButton:
            self.setImagePixel(event.pos(), False)

    def setImagePixel(self, pos, opaque):
        i = pos.x() // self.zoom
        j = pos.y() // self.zoom
        print(f'setting pixel ({i}, {j})')
        if self.image.rect().contains(i, j):
            if opaque:
                penC = QColor('black')
                self.image.setPixel(i, j, penC.rgba())
                # self.image.setPixel(i, j, QColor(255, i*2.56, j*2.56, 255).rgb())
            else:
                print('#' * 10)
                self.image.setPixel(QPoint(i, j), qRgba(0, 0, 0, 0))
            print(f'Pixel Rect: {self.pixelRect(i,j)}')
            self.update(self.pixelRect(i, j))

    def paintEvent(self, event):
        painter = QPainter(self)
        if self.zoom >= 3:
            painter.setPen(self.palette().foreground().color())
            # painter.setPen(QPen('red'))
            for i in range(0, self.image.width()):
                painter.drawLine(self.zoom * i, 0, self.zoom * i,
                                 self.zoom * self.image.height())
            for j in range(0, self.image.height()):
                painter.drawLine(0, self.zoom * j,
                                 self.zoom * self.image.width(), self.zoom * j)

        for i in range(0, self.image.width()):
            for j in range(0, self.image.height()):
                rect = self.pixelRect(i, j)
                if event.region().intersected(rect):
                    color = QColor.fromRgba(self.image.pixel(i, j))
                    if color.alpha() < 255:
                        painter.fillRect(rect, Qt.white)
                    painter.fillRect(rect, color)

    penColorProperty = property(QColor, penColor, setPenColor)
    iconImageProperty = property(QImage, iconImage, setIconImage)
    zoomFactorProperty = property(int, zoomFactor, setZoomFactor)