Ejemplo n.º 1
0
    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))
Ejemplo n.º 2
0
    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))
Ejemplo n.º 3
0
            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))
Ejemplo n.º 4
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")