/
DanLiz456
/
java-diplom
Обзор
Документация
Войти
/
DanLiz456
/
java-diplom
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
ImageToTextConverter.java
92 строки
3 KB
Даниил Ушаков
upload files
05 дек 2025, 09:16
05 дек 2025, 09:16
7c0b5c5
Код
Авторство
О чём код?
package ru.netology.graphics.server; import ru.netology.graphics.image.TextGraphicsConverter; import ru.netology.graphics.image.BadImageSizeException; import ru.netology.graphics.image.TextColorSchema; import javax.imageio.ImageIO; import java.awt.*; import java.awt.image.BufferedImage; import java.awt.image.WritableRaster; import java.io.IOException; import java.net.URL; public class ImageToTextConverter implements TextGraphicsConverter { private int maxWidth = Integer.MAX_VALUE; private int maxHeight = Integer.MAX_VALUE; private double maxRatio = Double.MAX_VALUE; private TextColorSchema schema = new GServer.DefaultTextColorSchema(); @Override public String convert(String url) throws IOException, BadImageSizeException { // Скачиваем картинку из интернета BufferedImage img = ImageIO.read(new URL(url)); // Проверка соотношения сторон double ratio = (double) img.getWidth() / img.getHeight(); if (ratio > maxRatio) { throw new BadImageSizeException("Соотношение сторон превышает допустимое значение"); } // Вычисление новых размеров int newWidth = Math.min(img.getWidth(), maxWidth); int newHeight = Math.min(img.getHeight(), maxHeight); // Если нужно соблюдать пропорции if (newWidth > maxWidth) { double scaleFactor = (double) maxWidth / newWidth; newWidth = maxWidth; newHeight = (int) (newHeight * scaleFactor); } if (newHeight > maxHeight) { double scaleFactor = (double) maxHeight / newHeight; newHeight = maxHeight; newWidth = (int) (newWidth * scaleFactor); } // Масштабирование изображения Image scaledImage = img.getScaledInstance(newWidth, newHeight, BufferedImage.SCALE_SMOOTH); // Преобразование в чёрно-белое изображение BufferedImage bwImg = new BufferedImage(newWidth, newHeight, BufferedImage.TYPE_BYTE_GRAY); Graphics2D graphics = bwImg.createGraphics(); graphics.drawImage(scaledImage, 0, 0, null); // Получение пикселей WritableRaster bwRaster = bwImg.getRaster(); StringBuilder result = new StringBuilder(); for (int h = 0; h < newHeight; h++) { for (int w = 0; w < newWidth; w++) { int color = bwRaster.getPixel(w, h, new int[3])[0]; char c = schema.convert(color); result.append(c).append(c); // Повторяем символ для лучшего визуального эффекта } result.append("\n"); } return result.toString(); } @Override public void setMaxRatio(double maxRatio) { this.maxRatio = maxRatio; } @Override public void setMaxHeight(int maxHeight) { this.maxHeight = maxHeight; } @Override public void setMaxWidth(int maxWidth) { this.maxWidth = maxWidth; } @Override public void setTextColorSchema(TextColorSchema schema) { this.schema = schema; } }