首页 > 其他 > 详细

Image Viewer-py

时间:2019-11-01 19:39:21      阅读:94      评论:0      收藏:0      [点我收藏+]

‘‘‘

# This file is image_viewer.py. It is used with main_win.py, which comes from main_win.ui by

# pyuic5. This app uses PyQt5, so you need to install this package. It can extract some exif

# tags from image, you alse need exifread lib.

# And main_win.ui is designed by Qt‘s Designer, it‘s content is in Image Viewer-Ui.

# <PyQt5快速开发与实战.pdf> is referenced during it‘s design, and PIL.Image‘s doc also.

# Thank this book‘s author and doc‘s author/contributors.

# I will spare time to add some comment in code.

# "xxx\\xxx\\xx.txt" in code is a txt file that contains all kinds of EXIF tag.

# A tag occupies a line.

# xxx in ‘C:\\Users\\xxx\\Pictures‘ is user name on your computer.

‘‘‘

import sys

from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QFileDialog

from PyQt5.QtCore import QRect

from PyQt5.QtGui import QPainter, QPaintEvent, QPixmap

from main_win import Ui_MainWindow

import exifread

from PIL import Image, ImageQt

###

class tag_list():

  #

  def __init__(self, f):

    self.tag = []

    self.f_name = f

    self.filter_str = [‘EXIF UserComment‘, ‘EXIF MakerNote‘]

  #

  def get_tag_list(self):

    self.fd = self._open_file(self.f_name)

    while(True):

      c = self.fd.readline()

      if c == ‘‘:

        break

      else:

        self.tag.append(c.strip(‘\n‘))

    self.fd.close()

    return self.tag

  #

  def filter_tag(self, str_list):

    pass

  #

  def _open_file_(self, f):

    try:

      fd = open(f, ‘r‘)

    except Exception as e:

      print(e)

      return None

    return fd

###

  class image_viewer(QMainWindow, Ui_MainWindow):

      #

      def __init__(self, parent=None):

        super(image_viewer, self).__init__(parent)

        self.setupUi(self)

        self.create_actions()

      #

      def create_actions(self):

        self.actionFileOpen.triggered.connect(self.open_file)

        self.actionFileClose.triggered.connect(self.close_file)

        self.actionFileOpen2.triggered.connect(self.open_file)

      #

      def _open_file_(self):

        try:

          fd = open(self.img_file, ‘rb‘)

        except Exception as e:

          print(e)

          return None

        return fd

      #

      def get_tag_dict(self, fd):

        self.tag = exifread.process_file(fd)

        fd.close()

      #

      def get_img_size(self):

        w = int(self.tag[‘EXIF ExifImageWidth‘].printable)

        h = int(self.tag[‘EXIF ExifImageHeight‘].printable)

        return (w, h)

      #

      def get_other_info(self):

        t = tag_list(‘xxx\\xxx\\xx.txt‘)

        s = t.get_tag_list()

        r = []

        for i in s:

          e = ‘‘

          if i in self.tag:

            c = self.tag[i]

            if isinstance(c, exifread.classes.IfdTag):

              e += i

              e += ‘ : ‘

              e += str(c.printable)

              r.append(e)

        return r

      #

      def disp_info(self, t):

        self.listWidget.clear()

        self.listWidget.addItems(t)

      #

      def open_file(self):

        img_file, ok = QFileDialog.getOpenFileName(self, ‘Open‘, ‘C:\\Users\\xxx\\Pictures‘, ‘Picture Files (*.jpg)‘)

        self.img_file = img_file

        if ok != ‘‘:

          r = self._open_file_()

          if r:

            self.statusBar.showMessage(self.img_file)

            self.get_tag_dict(r)

            self.disp_img()

            c = self.get_other_info()

            self.disp_info(c)

          else:

            self.close_file()

            print(‘Open file error !‘)

        else:

          self.close_file()

          print(‘No file choosed ...‘)

      #

      def close_file(self):

        self.labelPicDisp.clear()

        self.listWidget.clear()

        self.statusBar.clearMessage()

      #

      def paintEvent(self, event):

        pass

      #

      def disp_img(self):

      self.labelPicDisp.clear()

      im = Image.open(self.img_file)

      im.thumbnail((128, 128))

      qt_image = ImageQt.ImageQt(im)

      self.labelPicDisp.setPixmap(QPixmap.fromImage(qt_image))

      im.close()

 

if __name__ = ‘__main__‘:

  app = QApplication(sys.argv)

  img_v = image_viewer()

  img_v.show()

  sys.exit(app.exec_())

 

Image Viewer-py

原文:https://www.cnblogs.com/suohaicheng/p/11778639.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!