diff --git a/examples/compareImages.py b/examples/compareImages.py index df2f40cb0a..9cc762ae23 100644 --- a/examples/compareImages.py +++ b/examples/compareImages.py @@ -34,84 +34,10 @@ import silx.io from silx.gui import qt import silx.test.utils -from silx.io.url import DataUrl from silx.gui.plot.CompareImages import CompareImages -from silx.gui.widgets.UrlSelectionTable import UrlSelectionTable _logger = logging.getLogger(__name__) -import fabio - -try: - import PIL -except ImportError: - _logger.debug("Backtrace", exc_info=True) - PIL = None - - -class CompareImagesSelection(qt.QMainWindow): - def __init__(self, backend): - qt.QMainWindow.__init__(self, parent=None) - self._plot = CompareImages(parent=self, backend=backend) - - self._selectionTable = UrlSelectionTable(parent=self) - self._dockWidgetMenu = qt.QDockWidget(parent=self) - self._dockWidgetMenu.layout().setContentsMargins(0, 0, 0, 0) - self._dockWidgetMenu.setFeatures(qt.QDockWidget.DockWidgetMovable) - self._dockWidgetMenu.setWidget(self._selectionTable) - self.addDockWidget(qt.Qt.LeftDockWidgetArea, self._dockWidgetMenu) - - self.setCentralWidget(self._plot) - - self._selectionTable.sigImageAChanged.connect(self._updateImageA) - self._selectionTable.sigImageBChanged.connect(self._updateImageB) - - def setUrls(self, urls): - for url in urls: - self._selectionTable.addUrl(url) - - def setFiles(self, files): - urls = list() - for _file in files: - if os.path.isfile(_file): - urls.append(DataUrl(file_path=_file, scheme=None)) - urls.sort(key=lambda url: url.path()) - window.setUrls(urls) - window._selectionTable.setSelection(url_img_a=urls[0].path(), - url_img_b=urls[1].path()) - - def clear(self): - self._plot.clear() - self._selectionTable.clear() - - def _updateImageA(self, urlpath): - self._updateImage(urlpath, self._plot.setImage1) - - def _updateImage(self, urlpath, fctptr): - def getData(): - _url = silx.io.url.DataUrl(path=urlpath) - for scheme in ('silx', 'fabio'): - try: - dataImg = silx.io.utils.get_data( - silx.io.url.DataUrl(file_path=_url.file_path(), - data_slice=_url.data_slice(), - data_path=_url.data_path(), - scheme=scheme)) - except: - _logger.debug("Error while loading image with %s" % scheme, - exc_info=True) - else: - # TODO: check is an image - return dataImg - return None - - data = getData() - if data is not None: - fctptr(data) - - def _updateImageB(self, urlpath): - self._updateImage(urlpath, self._plot.setImage2) - def createTestData(): data = numpy.arange(100 * 100) @@ -124,52 +50,14 @@ def createTestData(): return data1, data2 -def loadImage(filename): - try: - return silx.io.get_data(filename) - except Exception: - _logger.debug("Error while loading image with silx.io", exc_info=True) - - try: - return fabio.open(filename).data - except Exception: - _logger.debug("Error while loading image with fabio", exc_info=True) - - if PIL is not None: - try: - return numpy.asarray(PIL.Image.open(filename)) - except Exception: - _logger.debug("Error while loading image with PIL", exc_info=True) - - raise Exception("Impossible to load '%s' with the available image libraries" % filename) - - -file_description = """ -Image data to compare (HDF5 file with path, EDF files, JPEG/PNG image files). -Data from HDF5 files can be accessed using dataset path and slicing as an URL: silx:../my_file.h5?path=/entry/data&slice=10 -EDF file frames also can can be accessed using URL: fabio:../my_file.edf?slice=10 -Using URL in command like usually have to be quoted: "URL". -""" - - def createParser(): parser = argparse.ArgumentParser(description=__doc__) - parser.add_argument( - 'files', - nargs=argparse.ZERO_OR_MORE, - help=file_description) parser.add_argument( '--debug', dest="debug", action="store_true", default=False, help='Set logging system in debug mode') - parser.add_argument( - '--testdata', - dest="testdata", - action="store_true", - default=False, - help='Use synthetic images to test the application') parser.add_argument( '--use-opengl-plot', dest="use_opengl_plot", @@ -192,19 +80,9 @@ def createParser(): backend = "mpl" app = qt.QApplication([]) - if options.testdata or len(options.files) == 2: - if options.testdata: - _logger.info("Generate test data") - data1, data2 = createTestData() - else: - data1 = loadImage(options.files[0]) - data2 = loadImage(options.files[1]) - window = CompareImages(backend=backend) - window.setData(data1, data2) - else: - data = options.files - window = CompareImagesSelection(backend=backend) - window.setFiles(options.files) + data1, data2 = createTestData() + window = CompareImages(backend=backend) + window.setData(data1, data2) window.setVisible(True) app.exec()