File size: 2,676 Bytes
45b0453
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
import json
import base64
import random
from PIL import Image, ImageEnhance
from io import BytesIO
import numpy as np
import time

def load_image_data(json_path='AgPixelGen.json'):
    with open(json_path, 'r') as f:
        return json.load(f)

def decode_image_from_base64(base64_string):
    image_bytes = base64.b64decode(base64_string)
    image = Image.open(BytesIO(image_bytes))
    return image

def random_transform(image):
    random.seed(time.time())
    transforms = ['color_change', 'noise']
    random.shuffle(transforms)

    for transform_type in transforms:
        if transform_type == 'color_change':
            image = color_change(image)
        
        elif transform_type == 'noise':
            image = add_noise(image)
    
    return image

def color_change(image):
    enhancer = ImageEnhance.Color(image)
    image = enhancer.enhance(random.uniform(0.2, 3.0))
    
    enhancer = ImageEnhance.Brightness(image)
    image = enhancer.enhance(random.uniform(0.5, 2.0))

    enhancer = ImageEnhance.Contrast(image)
    image = enhancer.enhance(random.uniform(0.5, 2.0))
    
    return image

def add_noise(image):
    width, height = image.size
    pixels = np.array(image)
    
    noise_factor = random.uniform(0.02, 0.1)
    noise = np.random.normal(scale=noise_factor, size=(height, width, 3))
    
    noisy_pixels = pixels + noise * 255
    noisy_pixels = np.clip(noisy_pixels, 0, 255).astype(np.uint8)
    
    return Image.fromarray(noisy_pixels)

def decode_and_transform_image(image_data, key):
    image = decode_image_from_base64(image_data[key])
    transformed_image = random_transform(image)
    return transformed_image

def save_image(image, output_path='output.jpg'):
    image.save(output_path)

def generate_image(user_prompt=""):
    image_data = load_image_data()
    if user_prompt:
        key = user_prompt.replace(' ', '+')
    else:
        matched_keys = [k for k in image_data.keys() if all(word.lower() in k.lower() for word in user_prompt.split())]
        if matched_keys:
            key = random.choice(matched_keys)
        else:
            key = None

    if not key or key not in image_data:
        matched_keys = [k for k in image_data.keys() if all(word.lower() in k.lower() for word in user_prompt.split())]
        
        if matched_keys:
            key = random.choice(matched_keys)
        else:
            return "<error>"

    transformed_image = decode_and_transform_image(image_data, key)
    save_image(transformed_image)
    return "Image generated and saved."

if __name__ == "__main__":
    user_prompt = input("Enter your prompt: ")
    result = generate_image(user_prompt)
    print(result)