Beispiel #1
0
    def __file_dialog(self, mode):
        """Creates a file dialog box for loading or saving ~b ImageFile objects.

        Args:
            mode(string): The mode of the file operation  'r' or 'w'

        Returns:
            A filename to be used for the file operation.
        """
        patterns = (('png', '*.png'))

        if self.filename is not None:
            filename = os.path.basename(self.filename)
            dirname = os.path.dirname(self.filename)
        else:
            filename = ""
            dirname = ""
        if "r" in mode:
            mode = "file"
        elif "w" in mode:
            mode = "save"
        else:
            mode = "directory"
        dlg = get_filedialog(what=mode,
                             initialdir=dirname,
                             initialfile=filename,
                             filetypes=patterns)
        if len(dlg) != 0:
            self.filename = dlg
            return self.filename
        else:
            return None
Beispiel #2
0
    def _dialog(self, message="Select Folder", new_directory=True):
        """Creates a directory dialog box for working with.

        Keyword Arguments:
            message (string):
                Message to display in dialog
            new_directory (bool):
                True if allowed to create new directory

        Returns:
            A directory to be used for the file operation.
        """
        # Wildcard pattern to be used in file dialogs.
        if not self.multifile:
            mode = "directory"
        else:
            mode = "files"
        dlg = get_filedialog(what=mode,
                             title=message,
                             mustexist=not new_directory)
        if len(dlg) != 0:
            if not self.multifile:
                self.directory = dlg
                ret = self.directory
            else:
                ret = None
        else:
            self.pattern = [path.basename(name) for name in dlg]
            self.directory = path.commonprefix(dlg)
            ret = self.directory
        return ret
Beispiel #3
0
    def _dialog(self, message="Select Folder", new_directory=True):
        """Creates a directory dialog box for working with

        Keyword Arguments:
            message (string): Message to display in dialog
            new_directory (bool): True if allowed to create new directory

        Returns:
            A directory to be used for the file operation.
        """
        # Wildcard pattern to be used in file dialogs.
        if not self.multifile:
            mode = "directory"
        else:
            mode = "files"
        dlg = get_filedialog(what=mode, title=message, mustexist=not new_directory)
        if len(dlg) != 0:
            if not self.multifile:
                self.directory = dlg
                ret = self.directory
            else:
                ret = None
        else:
            self.pattern = [path.basename(name) for name in dlg]
            self.directory = path.commonprefix(dlg)
            ret = self.directory
        return ret
Beispiel #4
0
    def __new__(cls, *args, **kargs):
        """Construct an ImageArray object.
        
        We're using __new__ rather than __init__ to imitate a numpy array as 
        close as possible.
        """

        if len(args) not in [0, 1]:
            raise ValueError(
                'ImageArray expects 0 or 1 arguments, {} given'.format(
                    len(args)))

        ### Deal with kwargs
        array_arg_keys = ['dtype', 'copy', 'order', 'subok',
                          'ndmin']  #kwargs for array setup
        array_args = {
            k: kargs.pop(k)
            for k in array_arg_keys if k in kargs.keys()
        }
        user_metadata = kargs.pop('metadata', {})
        asfloat = kargs.pop('asfloat', False) or kargs.pop(
            'convert_float', False)  #convert_float for back compatability
        _debug = kargs.pop('debug', False)

        ### 0 args initialisation
        if len(args) == 0:
            ret = np.empty((0, 0), dtype=float).view(cls)
        else:

            ### 1 args initialisation
            arg = args[0]
            loadfromfile = False
            if isinstance(arg, cls):
                ret = arg
            elif isinstance(arg, np.ndarray):
                # numpy array or ImageArray)
                if len(arg.shape) == 2:
                    ret = arg.view(ImageArray)
                elif len(arg.shape) == 1:
                    arg = np.array([arg])  #force 2d array
                    ret = arg.view(ImageArray)
                else:
                    raise ValueError(
                        'Array dimension 0 must be at most 2. Got {}'.format(
                            len(arg.shape)))
                ret.metadata = getattr(arg, "metadata", typeHintedDict())
            elif isinstance(arg, bool) and not arg:
                patterns = (('png', '*.png'), ('npy', '*.npy'))
                arg = get_filedialog(what='r', filetypes=patterns)
                if len(arg) == 0:
                    raise ValueError('No file given')
                else:
                    loadfromfile = True
            elif isinstance(arg, string_types) or loadfromfile:
                # Filename- load datafile
                if not os.path.exists(arg):
                    raise ValueError('File path does not exist {}'.format(arg))
                ret = cls._load(arg, **array_args)
            elif isinstance(arg, ImageFile):
                #extract the image
                ret = arg.image
            else:
                try:  #try converting to a numpy array (eg a list type)
                    ret = np.asarray(arg, **array_args).view(cls)
                    if ret.dtype == 'O':  #object dtype - can't deal with this
                        raise ValueError
                except ValueError:  #ok couldn't load from iterable, we're done
                    raise ValueError("No constructor for {}".format(type(arg)))
            if asfloat and ret.dtype.kind != 'f':  #convert to float type in place
                dl = dtype_range[ret.dtype.type]
                ret = np.array(ret, dtype=np.float64).view(cls)
                ret = ret / float(dl[1])

        #all constructors call array_finalise so metadata is now initialised
        if 'Loaded from' not in ret.metadata.keys():
            ret.metadata['Loaded from'] = ''
        ret.filename = ret.metadata['Loaded from']
        ret.metadata.update(user_metadata)
        ret.debug = _debug
        return ret