Esempio n. 1
0
def import_img(project, urls, size=QtCore.QSize(0, 0), colorTable=[0]):
    imgs = []
    canceled = []
    # open all img
    canvasList = []
    for url in urls:
        if str(url).lower().endswith("png"):
            img = Canvas(project, str(url))
            canvasList.append((img, str(url)))
        elif str(url).lower().endswith("gif"):
            mov = QtGui.QMovie(str(url))
            for i in range(mov.frameCount()):
                mov.jumpToFrame(i)
                img = Canvas(project, mov.currentImage())
                canvasList.append((img, str(url)))
    # get the colortable and max size 
    for img, url in canvasList:
        if img.format() == QtGui.QImage.Format_Indexed8:
            colorMixed = img.mixColortable(colorTable)
        else:
            colorMixed = img.sniffColortable(colorTable)
        if colorMixed:
            colorTable = colorMixed
            imgs.append(img)
            size = size.expandedTo(img.size())
        else:
            canceled.append(url)
    # convert all image to the previously defined colortable and size
    for n, img in enumerate(imgs):
        if img.size() != size:
            img = Canvas(project, img.copy(0, 0, size.width(), size.height()).convertToFormat(QtGui.QImage.Format_Indexed8, colorTable))
        else:
            img = Canvas(project, img.convertToFormat(QtGui.QImage.Format_Indexed8, colorTable))
        imgs[n] = img
    # show an error and the list of canceled images
    if canceled:
        text = "Failed to import some files (too much colors):"
        for i in canceled:
            text = "%s\n %s" %(text, i)
        message = QtGui.QMessageBox()
        message.setWindowTitle("Import error")
        message.setText(text);
        message.setIcon(QtGui.QMessageBox.Warning)
        message.addButton("Ok", QtGui.QMessageBox.AcceptRole)
        message.exec_();
    return  size, imgs, colorTable
Esempio n. 2
0
def import_img(project, dirName, size=QSize(0, 0), colorTable=[0]):
    if not dirName:
        dirName = os.path.expanduser("~")
    urls = QFileDialog.getOpenFileNames(
        None, "Import PNG and GIF", dirName, "PNG and GIF files (*.png *.gif);;All files (*)")
    if not urls:
        return None, None, None, None
    imgs = []
    canceled = []
    # open all img get the colortable and max size 
    canvasList = []
    for url in urls:
        if str(url).endswith("png") or str(url).endswith("PNG"):
            img = Canvas(project, str(url))
            canvasList.append((img, str(url)))
        elif str(url).endswith("gif") or str(url).endswith("GIF"):
            mov = QMovie(str(url))
            for i in range(mov.frameCount()):
                mov.jumpToFrame(i)
                img = Canvas(project, mov.currentImage())
                canvasList.append((img, str(url)))

    for img, url in canvasList:
        if img.format() == QImage.Format_Indexed8:
            colorMixed = img.mixColortable(colorTable)
        else:
            colorMixed = img.sniffColortable(colorTable)
        if colorMixed:
            colorTable = colorMixed
            imgs.append(img)
            size = size.expandedTo(img.size())
        else:
            canceled.append(url)

    for n, img in enumerate(imgs):
        img = Canvas(project, img.convertToFormat(QImage.Format_Indexed8, colorTable))
        if img.size() != size:
            li = img.returnAsList()
            width = img.width()
            img = Canvas(project, size, colorTable)
            img.loadFromList(li, width)
        imgs[n] = img

    if canceled:
        text = "Failed to import some files (too much colors):"
        for i in canceled:
            text = "%s\n %s" % (text, i)
        message = QMessageBox()
        message.setWindowTitle("Import error")
        message.setText(text);
        message.setIcon(QMessageBox.Warning)
        message.addButton("Ok", QMessageBox.AcceptRole)
        message.exec_();
    return size, imgs, colorTable