Programación de Gráficos - Como hacer un zoom en la imagen?

 
Vista:

Como hacer un zoom en la imagen?

Publicado por jose (1 intervención) el 03/04/2006 18:58:57
Hola a todos. Tengo una duda que no logro resolver por internet así que espero que me puedan echar una mano.

El tema es que quiero hacer una función para hacer Zoom In y Out en una imagen jpg o bmp, me da igual, supongo que la mecanica es la misma. Si pudieran darme el algoritmo explicado y eso. Muchas gracias a todos por vuestra ayuda y tiempo. Un saludo
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Zoom in y zoom out en imágenes

Publicado por Alejandro (110 intervenciones) el 05/04/2024 23:33:16
¡Hola José! Claro, puedo ayudarte con eso. Aquí tienes un algoritmo para hacer zoom in y zoom out en una imagen en formato jpg o bmp:

1. Carga la imagen en memoria.
2. Determina el factor de escala para el zoom. Por ejemplo, si quieres hacer un zoom in de 2x, el factor de escala sería 2. Si quieres hacer un zoom out de 0.5x, el factor de escala sería 0.5.
3. Calcula las dimensiones de la imagen original y las dimensiones de la imagen resultante después del zoom. Para hacer un zoom in, las dimensiones de la imagen resultante serán el doble de las dimensiones originales. Para hacer un zoom out, las dimensiones de la imagen resultante serán la mitad de las dimensiones originales.
4. Crea una nueva imagen con las dimensiones calculadas en el paso anterior.
5. Recorre cada píxel de la imagen resultante y calcula su posición correspondiente en la imagen original.
6. Para cada píxel de la imagen resultante, encuentra el píxel correspondiente en la imagen original utilizando una interpolación bilineal. La interpolación bilineal calcula el valor del píxel resultante como una combinación lineal de los píxeles vecinos en la imagen original.
7. Asigna el valor calculado al píxel correspondiente en la imagen resultante.
8. Repite los pasos 5-7 para todos los píxeles de la imagen resultante.
9. Guarda la imagen resultante en el formato deseado (jpg o bmp).

Aquí tienes un ejemplo de código en Python utilizando la biblioteca PIL para realizar el zoom in y zoom out en una imagen:

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
from PIL import Image
 
def zoom_in_out(image_path, scale_factor):
    # Carga la imagen
    image = Image.open(image_path)
 
    # Calcula las dimensiones de la imagen resultante
    width, height = image.size
    new_width = int(width * scale_factor)
    new_height = int(height * scale_factor)
 
    # Crea una nueva imagen con las dimensiones calculadas
    new_image = Image.new("RGB", (new_width, new_height))
 
    # Recorre cada píxel de la imagen resultante
    for y in range(new_height):
        for x in range(new_width):
            # Calcula la posición correspondiente en la imagen original
            orig_x = int(x / scale_factor)
            orig_y = int(y / scale_factor)
 
            # Obtiene los píxeles vecinos en la imagen original
            pixel1 = image.getpixel((orig_x, orig_y))
            pixel2 = image.getpixel((orig_x + 1, orig_y))
            pixel3 = image.getpixel((orig_x, orig_y + 1))
            pixel4 = image.getpixel((orig_x + 1, orig_y + 1))
 
            # Calcula el valor del píxel resultante utilizando interpolación bilineal
            r = int((pixel1[0] + pixel2[0] + pixel3[0] + pixel4[0]) / 4)
            g = int((pixel1[1] + pixel2[1] + pixel3[1] + pixel4[1]) / 4)
            b = int((pixel1[2] + pixel2[2] + pixel3[2] + pixel4[2]) / 4)
 
            # Asigna el valor calculado al píxel correspondiente en la imagen resultante
            new_image.putpixel((x, y), (r, g, b))
 
    # Guarda la imagen resultante
    new_image.save("zoomed_image.jpg")
 
# Ejemplo de uso
zoom_in_out("imagen.jpg", 2)  # Zoom in de 2x
zoom_in_out("imagen.jpg", 0.5)  # Zoom out de 0.5x

Espero que esto te ayude a realizar el zoom in y zoom out en una imagen. ¡Buena suerte!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar