Skip to content

Commit

Permalink
Added GUI
Browse files Browse the repository at this point in the history
  • Loading branch information
2xB committed Oct 25, 2018
1 parent 8cd7c79 commit f5fce04
Show file tree
Hide file tree
Showing 3 changed files with 210 additions and 13 deletions.
14 changes: 9 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,19 +1,23 @@
# Dellscan
# Dlscan

## Overview
Scans files from device "Dell S2825cdn". Provides a simple command line interface.
Scans files from device "Dell S2825cdn". Provides simple GUI and command line interfaces.
```
$ dlscan --help
Scan document from Dell S2825cdn device.
Usage: dlscan file [--greyscale] [-gs] [FILE]
Usage: dlscan [--gui] [file] [--greyscale] [-gs] [FILE]
Filenames cannot start with '-'.
```

## Requirements
NumPy: <https://www.numpy.org/>
PyUSB: <https://pyusb.github.io/pyusb/>
PyUSB: <https://pyusb.github.io/pyusb/>

Only if `--gui` is used:
PyQt5: <https://www.riverbankcomputing.com/software/pyqt/>

All dependencies are available through pip.
```

## Installation:
```
Expand Down
70 changes: 62 additions & 8 deletions dlscan.py
Original file line number Diff line number Diff line change
Expand Up @@ -166,12 +166,65 @@ def scan(greyscale=False):

def save_array_as_img(realcolors, name):
im = Image.fromarray(np.uint8(realcolors))
im.save(name)
if name[-4] == ".":
im.save(name)
else:
im.save(name,"png")

def gui():
global QtCore, QtWidgets, QtGui, uic, os, ImageQt
from PyQt5 import QtCore, QtWidgets, QtGui, uic
import os
from PIL.ImageQt import ImageQt

class ScanGui(QtWidgets.QMainWindow):
def __init__(self):
QtWidgets.QMainWindow.__init__(self)
uipath = os.path.join(os.path.dirname(__file__), 'scan_gui.ui')
uic.loadUi(uipath, self)

self.preview_view.ui.histogram.hide()
self.preview_view.ui.roiBtn.hide()
self.preview_view.ui.menuBtn.hide()

self.settings_scan.clicked.connect(self.buttons_settings_scan)
self.preview_save.clicked.connect(self.buttons_preview_save)

def buttons_settings_scan(self):
greyscale = self.settings_color.currentIndex() == 1

self.realcolors = scan(greyscale)
colors = self.realcolors
self.preview_save.setEnabled(True)

self.preview_view.ui.histogram.show()
if greyscale:
arr = self.realcolors.T
else:
arr = self.realcolors.transpose(1,0,2)
self.preview_view.setImage(arr)
self.preview_view.ui.histogram.hide()

def buttons_preview_save(self):
name = QtWidgets.QFileDialog.getSaveFileName(self,
self.tr("Save Image"), '',
self.tr("Image Files (*.png *.jpg *.bmp)"))[0]
save_array_as_img(self.realcolors, name)

app = QtWidgets.QApplication([])
scan_gui = ScanGui()
scan_gui.show()
app.exec_()


if __name__ == "__main__":
args = sys.argv[1:]
greyscale = False
filename = ""
display_gui = False
if "--gui" in args:
display_gui = True
gui()
if len(args) == 2 and (args[0] == "--greyscale" or args[0] == "-gs"):
greyscale = True
filename = args[1]
Expand All @@ -181,11 +234,12 @@ def save_array_as_img(realcolors, name):
elif len(args) == 1:
filename = args[0]

if filename == "" or filename[0] == '-':
print("Scan document from Dell S2825cdn device.\n" + \
"Usage: dlscan file [--greyscale] [-gs] [FILE]\n"+\
"Filenames cannot start with '-'.")
else:
arr= scan(greyscale)
save_array_as_img(arr, filename)
if not display_gui:
if filename == "" or filename[0] == '-':
print("Scan document from Dell S2825cdn device.\n" + \
"Usage: dlscan [--gui] [file] [--greyscale] [-gs] [FILE]\n"+\
"Filenames cannot start with '-'.")
else:
arr= scan(greyscale)
save_array_as_img(arr, filename)

139 changes: 139 additions & 0 deletions scan_gui.ui
Original file line number Diff line number Diff line change
@@ -0,0 +1,139 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>800</width>
<height>600</height>
</rect>
</property>
<property name="windowTitle">
<string>MainWindow</string>
</property>
<widget class="QWidget" name="centralwidget">
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QFrame" name="frame">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QLabel" name="label">
<property name="text">
<string>Settings</string>
</property>
</widget>
</item>
<item>
<widget class="Line" name="line_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="settings_color">
<property name="sizeAdjustPolicy">
<enum>QComboBox::AdjustToContents</enum>
</property>
<item>
<property name="text">
<string>color (24 bit)</string>
</property>
</item>
<item>
<property name="text">
<string>greyscale (8 bit)</string>
</property>
</item>
</widget>
</item>
<item>
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="settings_scan">
<property name="text">
<string>Scan</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="Line" name="line">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
</widget>
</item>
<item>
<widget class="QWidget" name="widget" native="true">
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QLabel" name="label_2">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Maximum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Preview</string>
</property>
</widget>
</item>
<item>
<widget class="ImageView" name="preview_view"/>
</item>
<item>
<widget class="QPushButton" name="preview_save">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string>Save</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
<widget class="QStatusBar" name="statusbar"/>
</widget>
<customwidgets>
<customwidget>
<class>ImageView</class>
<extends>QGraphicsView</extends>
<header>pyqtgraph</header>
</customwidget>
</customwidgets>
<resources/>
<connections/>
</ui>

0 comments on commit f5fce04

Please sign in to comment.