File size: 1,635 Bytes
f3ca73d
6802cd9
9cd282f
 
 
ec7e5e3
4d58dd6
 
 
ec7e5e3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9cd282f
ec7e5e3
 
 
 
9cd282f
ec7e5e3
9cd282f
ec7e5e3
 
786baa3
ec7e5e3
04ebd2c
ec7e5e3
04ebd2c
 
786baa3
ec7e5e3
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
from fastapi import APIRouter, Query, HTTPException
from fastapi.responses import StreamingResponse
from PIL import Image
import requests
from io import BytesIO
import base64

router = APIRouter()

def image_to_custom_string(img: Image.Image) -> str:
    img = img.convert("RGB").resize((32, 32))  # Reduz pra facilitar
    pixels = list(img.getdata())

    # Representa cada pixel como R,G,B separado por vírgula e ponto-e-vírgula por pixel
    pixel_data = ";".join([f"{r},{g},{b}" for r, g, b in pixels])
    return pixel_data

def custom_string_to_image(data: str, size=(32, 32)) -> Image.Image:
    pixels = [
        tuple(map(int, pixel.split(",")))
        for pixel in data.strip().split(";") if pixel
    ]
    img = Image.new("RGB", size)
    img.putdata(pixels)
    return img

@router.get("/encode")
def encode_image(url: str = Query(..., description="URL da imagem")):
    try:
        response = requests.get(url)
        image = Image.open(BytesIO(response.content))
        encoded_string = image_to_custom_string(image)
        return {"encoded": encoded_string}
    except Exception as e:
        raise HTTPException(status_code=400, detail=f"Erro ao processar imagem: {e}")

@router.get("/decode")
def decode_image(encoded: str = Query(..., description="String da imagem codificada")):
    try:
        image = custom_string_to_image(encoded)
        buffer = BytesIO()
        image.save(buffer, format="PNG")
        buffer.seek(0)
        return StreamingResponse(buffer, media_type="image/png")
    except Exception as e:
        raise HTTPException(status_code=400, detail=f"Erro ao decodificar imagem: {e}")