def generateMissingImages(self): """ Generates image sizes that should be present but aren't by scaling from the next higher size. """ for required_size in (256, 128, 48, 32, 16): if required_size in self.images: continue sizes = sorted(self.images.keys()) if required_size * 2 in sizes: from_size = required_size * 2 else: from_size = 0 for from_size in sizes: if from_size > required_size: break if from_size > required_size: Icon.notify.warning( "Generating %dx%d icon by scaling down %dx%d image" % (required_size, required_size, from_size, from_size)) from_image = self.images[from_size] image = PNMImage(required_size, required_size) image.setColorType(from_image.getColorType()) if from_image.hasAlpha(): image.addAlpha() image.quickFilterFrom(from_image) self.images[required_size] = image else: Icon.notify.warning( "Cannot generate %dx%d icon; no higher resolution image available" % (required_size, required_size))
def writeSize(self, required_size, fn): if not isinstance(fn, Filename): fn = Filename.fromOsSpecific(fn) fn.setBinary() fn.makeDir() if required_size in self.images: image = self.images[required_size] else: # Find the next size up. sizes = sorted(self.images.keys()) if required_size * 2 in sizes: from_size = required_size * 2 else: from_size = 0 for from_size in sizes: if from_size > required_size: break if from_size > required_size: Icon.notify.warning( "Generating %dx%d icon by scaling down %dx%d image" % (required_size, required_size, from_size, from_size)) else: Icon.notify.warning( "Generating %dx%d icon by scaling up %dx%d image" % (required_size, required_size, from_size, from_size)) from_image = self.images[from_size] image = PNMImage(required_size, required_size) image.setColorType(from_image.getColorType()) image.quickFilterFrom(from_image) if not image.write(fn): Icon.notify.error("Failed to write %dx%d to %s" % (required_size, required_size, fn))
foundSize = True imgs[i] = img else: # assume it is a constant value val = float(fImg.getFullpath()) if is_sRGB: print("Converting", getChannelName(i), "to linear") # Convert to linear val = math.pow(val, 2.2) imgs[i] = val print("Size:", size) output = PNMImage(*size) output.setNumChannels(4) output.setColorType(PNMImageHeader.CTFourChannel) output.fill(1.0, 0.0, 0.0) output.alphaFill(1.0) for channel, img in imgs.items(): img print("Filling in", getChannelName(channel), "channel...") if isinstance(img, float): print("Value", img) for x in range(size[0]): for y in range(size[1]): if isinstance(img, float): setChannel(output, x, y, channel, img) else: setChannel(output, x, y, channel, getChannel(img, x, y, 0))
if channel == CHANNEL_AO: return img.getRed(x, y) elif channel == CHANNEL_ROUGHNESS: return img.getGreen(x, y) elif channel == CHANNEL_METALLIC: return img.getBlue(x, y) elif channel == CHANNEL_EMISSIVE: return img.getAlpha(x, y) armeFile = raw_input("ARME file: ") armeFilename = Filename.fromOsSpecific(armeFile) img = PNMImage() img.read(armeFilename) for i in range(4): name = getChannelName(i).lower() print("Writing", name) chImg = PNMImage(img.getReadXSize(), img.getReadYSize()) chImg.setNumChannels(1) chImg.setColorType(PNMImageHeader.CTGrayscale) for x in range(img.getReadXSize()): for y in range(img.getReadYSize()): val = getChannel(img, x, y, i) chImg.setXel(x, y, val) chImg.write( Filename(armeFilename.getFullpathWoExtension() + "_" + name + ".png")) print("Done")