asciitest/AsciiArtGenerator.java

56 lines
2.0 KiB
Java

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
public class AsciiArtGenerator {
// Caracteres ordenados de menor a mayor intensidad
private static final String ASCII_CHARS = "@%#*+=-:. ";
public static void main(String[] args) {
if (args.length < 1) {
System.out.println("Uso: java AsciiArtGenerator <ruta de la imagen>");
return;
}
String imagePath = args[0];
try {
BufferedImage image = ImageIO.read(new File(imagePath));
String asciiArt = convertToAscii(image);
System.out.println(asciiArt);
} catch (IOException e) {
System.err.println("Error al cargar la imagen: " + e.getMessage());
}
}
private static String convertToAscii(BufferedImage image) {
StringBuilder sb = new StringBuilder();
int width = image.getWidth();
int height = image.getHeight();
// Redimensionar la imagen para que quepa en la consola
int newWidth = 100;
int newHeight = (int) (height * ((double) newWidth / width) / 2); // Dividir por 2 para ajustar la proporción
BufferedImage resizedImage = new BufferedImage(newWidth, newHeight, BufferedImage.TYPE_INT_RGB);
resizedImage.getGraphics().drawImage(image, 0, 0, newWidth, newHeight, null);
for (int y = 0; y < newHeight; y++) {
for (int x = 0; x < newWidth; x++) {
int pixel = resizedImage.getRGB(x, y);
int r = (pixel >> 16) & 0xff;
int g = (pixel >> 8) & 0xff;
int b = pixel & 0xff;
int gray = (r + g + b) / 3; // Convertir a escala de grises
// Mapear el valor de gris a un carácter ASCII
int index = gray * (ASCII_CHARS.length() - 1) / 255;
sb.append(ASCII_CHARS.charAt(index));
}
sb.append("\n");
}
return sb.toString();
}
}