class_name ImageTools static func get_color_coverage(image: Image, color: Color = Color.WHITE) -> float: return float(get_color_pixel_count(image, color))/(image.get_width()*image.get_height()) static func get_color_pixel_count(image: Image, color: Color = Color.WHITE) -> int: var pixel_color_count = 0. for x in range(image.get_width()): for y in range(image.get_height()): if image.get_pixel(x, y) == color: pixel_color_count += 1. return pixel_color_count static func draw_circle(image: Image, center: Vector2i, length: int, color: Color = Color.WHITE, inverse = false): for x in range(image.get_width()): for y in range(image.get_height()): var center_distance = Vector2i(x, y).distance_to(center) if not inverse and (center_distance <= length) or inverse and (center_distance > length): image.set_pixel(x, y, color) static func draw_gradient(image: Image, center: Vector2i, length: int, color: Color = Color.WHITE, inverse := false): for x in range(image.get_width()): for y in range(image.get_height()): var original_pixel_color = image.get_pixel(x, y) var center_distance = Vector2i(x, y).distance_to(center) if (center_distance == 0): if not inverse: image.set_pixel(x, y, original_pixel_color.blend(color)) else: var color_to_add = Color(color, 1 / (center_distance / length)) if not inverse else Color(color, center_distance / length) image.set_pixel( x, y, original_pixel_color.blend(color_to_add) ) static func flatten(image: Image, threshold := 0.5): for x in range(image.get_width()): for y in range(image.get_height()): var original_pixel_color = image.get_pixel(x, y) if original_pixel_color.r > threshold: image.set_pixel( x, y, Color.WHITE ) else: image.set_pixel( x, y, Color.BLACK ) static func copy(from: Image, to : Image): for x in range(from.get_width()): for y in range(from.get_height()): to.set_pixel(x, y, from.get_pixel(x, y))