Beispiel #1
0
    def NodeEvaluation(self, eval_info):
        image1 = eval_info.EvaluateParameter('Image')
        kernel_x = eval_info.EvaluateProperty('Kernel X')
        kernel_y = eval_info.EvaluateProperty('Kernel Y')
        filter_type = eval_info.EvaluateProperty('Filter Type')

        image = api.RenderImage()

        img = ArrayFromImage(image1.GetImage())

        if filter_type == "Box":
            output_img = cv2.boxFilter(img, -1, (kernel_x, kernel_y))
        elif filter_type == "Gaussian":

            # Both values must be odd
            if (kernel_x % 2) == 0 and (kernel_y % 2) == 0:
                kernel_y += 1
                kernel_x += 1

            output_img = cv2.GaussianBlur(img, (0, 0),
                                          sigmaX=kernel_x,
                                          sigmaY=kernel_y)

        image.SetAsImage(ArrayToImage(output_img).convert('RGBA'))

        self.NodeSetThumb(image.GetImage())
        return image
Beispiel #2
0
    def NodeEvaluation(self, eval_info):
        path = eval_info.EvaluateProperty('File Path')
        image = api.RenderImage()

        if path != "":
            if self._cachedPath != path:
                try:
                    image.SetAsOpenedImage(path)
                    img = image.GetImage().convert('RGBA')
                    self._cachedPath = path
                    self._cachedImage = img
                    image.SetAsImage(img)
                except FileNotFoundError:
                    print("FILE NOT FOUND")
            else:
                image.SetAsImage(self._cachedImage)

        # if path != '':
        #     try:
        #         image.SetAsOpenedImage(path)
        #         image.SetAsImage(image.GetImage().convert('RGBA'))
        #     except FileNotFoundError:
        #         pass

        self.NodeSetThumb(image.GetImage())
        return image
    def NodeEvaluation(self, eval_info):
        image1 = eval_info.EvaluateParameter('Image')
        sigma_val = eval_info.EvaluateProperty('Sigma')
        intensity_val = eval_info.EvaluateProperty('Intensity')

        # Convert the current image data to an array that scipy can use
        im = ArrayFromImage(image1.GetImage())

        # Create the image
        if im.ndim == 3:
            im_grey = np.zeros((im.shape[0], im.shape[1])).astype(float)
            im_grey = (im[..., 0] * 0.3 + im[..., 1] * 0.6 + im[..., 2] * 0.1)
            im = im_grey

        im_smooth = self.SmoothGaussian(im, sigma_val)
        sobel_x, sobel_y = self.Sobel(im_smooth)

        # Calculate the normal map
        generated_normal_map = self.ComputeNormalMap(
            sobel_x,
            sobel_y,
            intensity_val
        )

        image = api.RenderImage()
        image.SetAsImage(
            ArrayToImage(generated_normal_map).convert('RGBA')
        )
        self.NodeSetThumb(image.GetImage())
        return image
Beispiel #4
0
    def NodeEvaluation(self, eval_info):
        image1 = eval_info.EvaluateParameter('Image')

        image = api.RenderImage()
        image.SetAsImage(ImageChops.invert(image1.GetImage()).convert('RGBA'))
        self.NodeSetThumb(image.GetImage())
        return image
Beispiel #5
0
    def NodeEvaluation(self, eval_info):
        image1 = eval_info.EvaluateParameter('Image')
        channel = eval_info.EvaluateProperty('Image Channel')
        greyscale = eval_info.EvaluateProperty('Greyscale')

        image = api.RenderImage()
        channel_img = image1.GetImage().getchannel(channel)

        if greyscale != True and channel != "A":
            if channel == "R":
                color = (255, 0, 0)
            elif channel == "G":
                color = (0, 255, 0)
            elif channel == "B":
                color = (0, 0, 255)
            final_img = ImageOps.colorize(channel_img, (0, 0, 0), color)

        elif channel == "A":
            inverted_img = ImageChops.invert(channel_img)
            new_img = Image.new("RGBA", inverted_img.size, (0, 0, 0, 0))

            layer_image = ImageOps.fit(new_img, inverted_img.size)
            mask_image = ImageOps.fit(image1.GetImage(), inverted_img.size)

            final_img = Image.composite(inverted_img, layer_image, mask_image)

        else:
            final_img = channel_img

        image.SetAsImage(final_img.convert("RGBA"))

        self.NodeSetThumb(image.GetImage())
        return image
Beispiel #6
0
    def NodeEvaluation(self, eval_info):
        image1 = eval_info.EvaluateParameter('Image')
        kernel_size = eval_info.EvaluateProperty('Kernel Size')
        kernel_x = eval_info.EvaluateProperty('Kernel X')
        kernel_y = eval_info.EvaluateProperty('Kernel Y')
        filter_type = eval_info.EvaluateProperty('Filter Type')

        image = api.RenderImage()

        img = ArrayFromImage(image1.GetImage())
        img = img.copy(order='C')

        ctx = moderngl.create_standalone_context()

        texture = ctx.texture(img.shape[1::-1], img.shape[2], img)

        window_size = 3840 // 2, 2160 // 2
        image_processing = ImageTransformer(ctx, window_size)

        # Headless
        image_processing.render(texture)
        output_img = image_processing.write()

        image.SetAsImage(ArrayToImage(output_img).convert('RGBA'))

        self.NodeSetThumb(image.GetImage())
        return image
Beispiel #7
0
    def NodeEvaluation(self, eval_info):
        image1 = eval_info.EvaluateParameter('Image')
        distance = eval_info.EvaluateProperty('Distance')

        image = api.RenderImage()
        image.SetAsImage(image1.GetImage().effect_spread(distance))
        self.NodeSetThumb(image.GetImage())
        return image
Beispiel #8
0
    def NodeEvaluation(self, eval_info):
        color = eval_info.EvaluateProperty('Color')
        imgsize = eval_info.EvaluateProperty('Size')

        image = api.RenderImage()
        image.SetAsImage(Image.new("RGBA", (imgsize[0], imgsize[1]), color))
        self.NodeSetThumb(image.GetImage())
        return image
Beispiel #9
0
    def NodeEvaluation(self, eval_info):
        main_image = eval_info.EvaluateParameter('Image')

        text_pos = eval_info.EvaluateProperty('Text Position')
        text = eval_info.EvaluateProperty('Text')
        font = eval_info.EvaluateProperty('Font')
        font_size = eval_info.EvaluateProperty('Font Size')
        font_color = eval_info.EvaluateProperty('Font Color')

        image = api.RenderImage()

        # Create separate image so it doesn't draw on the original image
        text_image = Image.new("RGBA",
                               size=main_image.GetImage().size,
                               color=(0, 0, 0, 1))
        #draw = ImageDraw.Draw(text_image)
        print("before font")
        # # Load the font
        # if sys.platform == "win32":
        #     font_path_prefix = "C:/Windows/Fonts/"
        # elif sys.platform == "linux":
        #     font_path_prefix = "/usr/share/fonts/TTF/"
        # else:
        #     print("WARNING: The text node does not currently support your operating system")
        #     return

        # font_path = font_path_prefix + font + ".ttf"
        #fnt = ImageFont.truetype("arial", font_size)
        # print("after")
        # TODO: Add support for all parameters from ImageDraw.Draw.text
        # Todo: Add support for multiline text
        #draw.multiline_text(text_pos, text, font=fnt, fill=font_color)

        print(font_size, "size")

        draw_text = ImageDraw.Draw(text_image)
        text_font = ImageFont.truetype(font="C:/Windows/Fonts/arial.ttf",
                                       size=30)

        # Draw the text
        draw_text.text(xy=(0, 0),
                       text="text",
                       font=text_font,
                       fill="black",
                       spacing=6,
                       align='left',
                       stroke_width=1,
                       stroke_fill="blue")

        # Composite the two images together
        composited_image = Image.alpha_composite(main_image.GetImage(),
                                                 text_image)

        image.SetAsImage(composited_image)
        self.NodeSetThumb(image.GetImage())
        print("yes-past")
        return image
Beispiel #10
0
    def NodeEvaluation(self, eval_info):
        image1 = eval_info.EvaluateParameter('Image')
        amount = eval_info.EvaluateProperty('Amount')

        image = api.RenderImage()
        enhancer = ImageEnhance.Color(image1.GetImage())
        image.SetAsImage(enhancer.enhance(amount).convert('RGBA'))
        self.NodeSetThumb(image.GetImage())
        return image
    def NodeEvaluation(self, eval_info):
        sigma = eval_info.EvaluateProperty('Sigma')
        imgsize = eval_info.EvaluateProperty('Size')

        image = api.RenderImage()
        image.SetAsImage(
            Image.effect_noise((imgsize[0], imgsize[1]),
                               sigma).convert("RGBA"))
        self.NodeSetThumb(image.GetImage())
        return image
    def NodeEvaluation(self, eval_info):
        image1 = eval_info.EvaluateParameter('Image 1')
        image2 = eval_info.EvaluateParameter('Image 2')

        image = api.RenderImage()
        main_image = image1.GetImage()
        layer_image = ImageOps.fit(image2.GetImage(), main_image.size)
        image.SetAsImage(Image.alpha_composite(main_image, layer_image))
        self.NodeSetThumb(image.GetImage())
        return image
Beispiel #13
0
    def NodeEvaluation(self, eval_info):
        image1 = eval_info.EvaluateParameter('Image')
        radius = eval_info.EvaluateProperty('Radius')

        image = api.RenderImage()
        image.SetAsImage(image1.GetImage().filter(
            ImageFilter.GaussianBlur(radius)
            ).convert('RGBA'))

        self.NodeSetThumb(image.GetImage())
        return image
    def NodeEvaluation(self, eval_info):
        layer = eval_info.EvaluateProperty('Layer')

        layer_path = self._layers[layer]

        image = api.RenderImage()

        image.SetAsOpenedImage(layer_path)

        self.NodeSetThumb(image.GetImage())
        return image
Beispiel #15
0
    def NodeEvaluation(self, eval_info):
        image1 = eval_info.EvaluateParameter('Image')
        direction = eval_info.EvaluateProperty('Direction')

        image = api.RenderImage()

        if direction == 'Horizontal':
            image.SetAsImage(ImageOps.mirror(image1.GetImage()))
        else:
            image.SetAsImage(ImageOps.flip(image1.GetImage()))

        self.NodeSetThumb(image.GetImage())
        return image
Beispiel #16
0
    def NodeEvaluation(self, eval_info):
        image1 = eval_info.EvaluateParameter('Image')
        image2 = eval_info.EvaluateParameter('Overlay')
        blendmode = eval_info.EvaluateProperty('Blend Mode')

        image = api.RenderImage()
        main_image = image1.GetImage()
        layer_image = ImageOps.fit(image2.GetImage(), main_image.size)

        if blendmode == 'Add':
            img = ImageChops.add(main_image, layer_image)

        elif blendmode == 'Add Modulo':
            img = ImageChops.add_modulo(main_image, layer_image)

        elif blendmode == 'Subtract':
            img = ImageChops.subtract(main_image, layer_image)

        elif blendmode == 'Subtract Modulo':
            img = ImageChops.subtract_modulo(main_image, layer_image)

        elif blendmode == 'Multiply':
            img = ImageChops.multiply(main_image, layer_image)

        elif blendmode == 'Screen':
            img = ImageChops.screen(main_image, layer_image)

        elif blendmode == 'Difference':
            img = ImageChops.difference(main_image, layer_image)

        elif blendmode == 'Darker':
            img = ImageChops.darker(main_image, layer_image)

        elif blendmode == 'Lighter':
            img = ImageChops.lighter(main_image, layer_image)

        elif blendmode == 'Soft Light':
            img = ImageChops.soft_light(main_image, layer_image)

        elif blendmode == 'Hard Light':
            img = ImageChops.hard_light(main_image, layer_image)

        elif blendmode == 'Overlay':
            img = ImageChops.overlay(main_image, layer_image)

        image.SetAsImage(img)
        self.NodeSetThumb(image.GetImage())
        return image
    def NodeEvaluation(self, eval_info):
        gradient = 0.5  # eval_info.EvaluateProperty('Gradient')
        color1 = eval_info.EvaluateProperty('Color 1')
        color2 = eval_info.EvaluateProperty('Color 2')
        imgsize = eval_info.EvaluateProperty('Size')

        gradientimage = Image.new("L", (imgsize[0], 1))
        for x in range(imgsize[0]):
            gradientimage.putpixel(
                (x, 0),
                int(225. * (1. - float(gradient) * float(x) / imgsize[0])))

        gradient_image = ImageOps.colorize(
            gradientimage.resize((imgsize[0], imgsize[1])), color1, color2)
        image = api.RenderImage()
        image.SetAsImage(gradient_image.convert('RGBA'))
        self.NodeSetThumb(image.GetImage())
        return image
    def NodeEvaluation(self, eval_info):
        image1 = eval_info.EvaluateParameter('Image')
        saturation_val = eval_info.EvaluateProperty('Saturation')
        brightness_val = eval_info.EvaluateProperty('Brightness')
        gamma_val = eval_info.EvaluateProperty('Gamma')

        # Convert the current image data to an array
        # that we can use and greyscale it.
        im = ArrayFromImage(image1.GetImage())
        gray_scale_img = cv2.equalizeHist(cv2.cvtColor(im, cv2.COLOR_BGR2GRAY))

        generated_roughness_map = self.ComputeRoughnessMap(
            gray_scale_img, saturation_val, brightness_val, gamma_val)

        image = api.RenderImage()
        image.SetAsImage(ArrayToImage(generated_roughness_map).convert('RGBA'))
        self.NodeSetThumb(image.GetImage())
        return image
Beispiel #19
0
    def NodeEvaluation(self, eval_info):
        main_image = eval_info.EvaluateParameter('Image')

        text_pos = eval_info.EvaluateProperty('Text Position')
        text = eval_info.EvaluateProperty('Text')
        font = eval_info.EvaluateProperty('Font')
        font_size = eval_info.EvaluateProperty('Font Size')
        font_color = eval_info.EvaluateProperty('Font Color')

        image = api.RenderImage()

        # Create separate image so it doesn't draw on the original image
        text_image = Image.new("RGBA",
                               size=main_image.GetImage().size,
                               color=(0, 0, 0, 1))
        draw = ImageDraw.Draw(text_image)

        # Load the font
        if sys.platform == "win32":
            font_path_prefix = "C:/Windows/Fonts/"
        elif sys.platform == "linux":
            font_path_prefix = "/usr/share/fonts/TTF/"
        else:
            print(
                "WARNING: The text node does not currently support your operating system"
            )
            return

        font_path = font_path_prefix + font + ".ttf"
        fnt = ImageFont.truetype(font_path, font_size)

        # TODO: Add support for all parameters from ImageDraw.Draw.text
        # Todo: Add support for multiline text
        draw.text(text_pos, text, font=fnt, fill=font_color)

        # Composite the two images together
        composited_image = Image.alpha_composite(main_image.GetImage(),
                                                 text_image)

        image.SetAsImage(composited_image)
        self.NodeSetThumb(image.GetImage())

        return image
Beispiel #20
0
    def NodeEvaluation(self, eval_info):
        image1 = eval_info.EvaluateParameter('Image')
        opacity = eval_info.EvaluateProperty('Opacity')

        img = image1.GetImage().convert("RGBA")

        # Make correction for slider range of 1-100
        image_opacity = (opacity * 0.01)

        # Only reduce the opacity if the value is acceptable
        if not image_opacity < 0 or not image_opacity > 1:
            alpha = ImageEnhance.Brightness(
                img.split()[-1]).enhance(image_opacity)
            img.putalpha(alpha)

        image = api.RenderImage()
        image.SetAsImage(img)
        self.NodeSetThumb(image.GetImage())
        return image
Beispiel #21
0
    def NodeEvaluation(self, eval_info):
        # TODO: Add a circle crop option
        input_image = eval_info.EvaluateParameter('Image')

        method = eval_info.EvaluateProperty("Method")
        # Rectangle
        x = eval_info.EvaluateProperty("X")
        y = eval_info.EvaluateProperty("Y")
        width = eval_info.EvaluateProperty("Width")
        height = eval_info.EvaluateProperty("Height")
        # Circle
        center = eval_info.EvaluateProperty("Center")
        radius = eval_info.EvaluateProperty("Radius")

        input_image_array = ArrayFromImage(input_image.GetImage())
        if method == "Rectangle":
            output_image_array = input_image_array[y:y + height, x:x + width]
        else:
            # Create a blank mask
            mask = np.zeros(shape=input_image_array.data.shape, dtype=np.uint8)
            # Create the circle
            circle_mask_colour = cv2.circle(mask, tuple(center), radius,
                                            (255, 255, 255), -1)
            # Convert the mask to gray scale
            circle_mask = cv2.cvtColor(circle_mask_colour, cv2.COLOR_BGR2GRAY)
            # Combine the mask and image
            cropped_img = cv2.bitwise_and(input_image_array,
                                          input_image_array,
                                          mask=circle_mask)

            # Crop the circle
            circle_rect = cropped_img[center[1] - radius:center[1] + radius,
                                      center[0] - radius:center[0] + radius]
            output_image_array = circle_rect

        image = api.RenderImage()

        image.SetAsImage(ArrayToImage(output_image_array).convert("RGBA"))

        self.NodeSetThumb(image.GetImage().convert("RGBA"))
        return image
Beispiel #22
0
    def NodeEvaluation(self, eval_info):
        input_image = eval_info.EvaluateParameter("Image")
        method = eval_info.EvaluateProperty("Method")
        lower_threshold = eval_info.EvaluateProperty("Lower Threshold")
        higher_threshold = eval_info.EvaluateProperty("Higher Threshold")

        image = api.RenderImage()

        # Consider removing the Pillow method?
        if method == "Find Edges":
            img = input_image.GetImage().convert("L").filter(
                ImageFilter.FIND_EDGES)
            image.SetAsImage(img.convert("RGBA"))
        elif method == "Canny":
            input_image_array = ArrayFromImage(input_image.GetImage())
            output_image_array = cv2.Canny(input_image_array, lower_threshold,
                                           higher_threshold)
            image.SetAsImage(ArrayToImage(output_image_array).convert("RGBA"))
        else:
            image.SetAsImage(input_image.GetImage())

        self.NodeSetThumb(image.GetImage())
        return image
    def NodeEvaluation(self, eval_info):
        image1 = eval_info.EvaluateParameter('Image')
        kernel_shape = eval_info.EvaluateProperty('Kernel Shape')
        kernel_size = eval_info.EvaluateProperty('Kernel Size')
        operation = eval_info.EvaluateProperty('Operation')

        image = api.RenderImage()

        img = ArrayFromImage(image1.GetImage())

        if kernel_shape == "Rectangle":
            kshape = cv2.MORPH_RECT
        elif kernel_shape == "Ellipse":
            kshape = cv2.MORPH_ELLIPSE
        elif kernel_shape == "Cross":
            kshape = cv2.MORPH_CROSS

        kernel_img = cv2.getStructuringElement(kshape,
                                               (kernel_size, kernel_size))

        if operation == "Erode":
            output_img = cv2.erode(img, kernel_img, iterations=1)
        elif operation == "Dilate":
            output_img = cv2.dilate(img, kernel_img, iterations=1)
        elif operation == "Opening":
            output_img = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel_img)
        elif operation == "Closing":
            output_img = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel_img)
        elif operation == "Top Hat":
            output_img = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel_img)
        elif operation == "Black Hat":
            output_img = cv2.morphologyEx(img, cv2.MORPH_BLACKHAT, kernel_img)

        image.SetAsImage(ArrayToImage(output_img).convert("RGBA"))

        self.NodeSetThumb(image.GetImage())
        return image