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
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