Как рисуют картины в excel

Время на прочтение
4 мин

Количество просмотров 18K

Некоторое время тому на хабре появилась статья о художнике, который рисует картины в MS Excel, используя его векторные возможности. Но задолго до этого я натыкался на истории о феноменальных растровых рисунках в том же экселе, идея которых базируется на пиксель-арте. Т.е. кто-то попросту уменьшает размеры ячеек и использует заливку цветом для получения своеобразной мозаики. Выглядит довольно впечатляюще, хотя до векторных рисунков по качеству, конечно, не дотягивает.

Увидев такие картины я, конечно же, усомнился в том, что кому-то хватит усидчивости для создания их в ручном режиме и решил поискать способ автоматизировать «офисное творчество». Задача оказалась несложной для реализации на языке Java при условии использования библиотеки Apache POI, предназначенной для работы с проприетарными форматами Microsoft Office. Подробности под катом.

Итак, что мы имеем. Я поставил себе задачу создать приложение для конвертирования самой обыкновенной картинки JPG (или, в принципе, любого другого распространенного формата) в документ Excel. Сразу стоит упомянуть существующие ограничения:
ширина «картинки» не должна превышать 255 точек (максимальное количество столбцов на листе)
максимальное количество стилей оформления (в нашем случае это количество цветов) равно 4000
Таким образом либо придется предварительно найти и подготовить картинку (уменьшить размеры и глубину цвета) или же делать это программно. Мы пойдем вторым путем :)
image
Для начала набросаем Main-класс нашей программы, содержащий единственный метод:

public class Main {
    public static void main(String[] args) {
        IMGRead ir = new IMGRead();
        Map<String, Object[]> data = ir.read("C:\picture.jpg");
        POIWrite pw = new POIWrite();
       pw.write(data);
    }
}

Конечно, убого и хардкод, но для демонстрации сойдет.

Рассмотрим класс для чтения картинки из файла. Он содержит метод для собственно чтения картинки и возвращает результат в виде карты, содержащей объекты типа RGBColor, в которых хранится информация о трех составляющих цвета точки:

public Map<String, Object[]> read(String fileName) {
        File file = new File(fileName);
        BufferedImage source, image;//source and resized images
        Map<String, Object[]> data = new TreeMap<String, Object[]>();
        try {
            source = ImageIO.read(file);//read picture from file
            int type = source.getType() == 0? BufferedImage.TYPE_INT_ARGB : source.getType();//get type
            image = resizeImage(source, type);//resize
            source = convert8(image);
            image = source; // :)

            // Getting pixel color for every pixel
            for (Integer y = 0; y < image.getHeight(); y++) {
                Object[] line = new Object[image.getWidth()];
                for (int x = 0; x < image.getWidth(); x++) {
                    int clr = image.getRGB(x, y);
                    int red = (clr & 0x00ff0000) >> 16;
                    int green = (clr & 0x0000ff00) >> 8;
                    int blue = clr & 0x000000ff;
                    line[x] = new RGBColor(red, green, blue);

                }
                data.put(String.format("%03d", y), line);

            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return data;
    }

Так же мы имеем метод для ресайза картинки:

private static BufferedImage resizeImage(BufferedImage originalImage, int type) {
        BufferedImage resizedImage = new BufferedImage(IMG_WIDTH, IMG_HEIGHT, type);
        Graphics2D g = resizedImage.createGraphics();
        g.drawImage(originalImage, 0, 0, IMG_WIDTH, IMG_HEIGHT, null);
        g.dispose();

        return resizedImage;
    }

И метод для уменьшения цветности (я использую восьмибитный цвет, для других вариантов смотрите источник):

public static BufferedImage convert8(BufferedImage src) {
        BufferedImage dest = new BufferedImage(src.getWidth(), src.getHeight(),
            BufferedImage.TYPE_BYTE_INDEXED);
        ColorConvertOp cco = new ColorConvertOp(src.getColorModel()
            .getColorSpace(), dest.getColorModel().getColorSpace(), null);
        cco.filter(src, dest);
        return dest;
      }

Переходим к классу, реализующему запись «картинки» в документ экселя. Тут у нас 2 метода, в первом из них осуществляется запись в файл:

public void write(Map<String, Object[]> data) {
        HSSFWorkbook workbook = new HSSFWorkbook();
        HSSFSheet sheet = workbook.createSheet("Picture");
        Map<String, HSSFCellStyle> colorToStyle = new HashMap<String, HSSFCellStyle>();
        HSSFCellStyle style;

        Set<String> keyset = data.keySet();
        int rownum = 0;
        for (String key : keyset) {
            Row row = sheet.createRow(rownum++);
            row.setHeight((short) 50);
            Object[] objArr = data.get(key);
            int cellnum = 0;
            for (Object obj : objArr) {
                sheet.setColumnWidth(cellnum, 100);
                Cell cell = row.createCell(cellnum++);
                RGBColor rgb = (RGBColor) obj;
                try {
                    style = colorToStyle.get(rgb.toString());
                    cell.setCellStyle(style);
                } catch (Exception e) {
                    style = workbook.createCellStyle();
                    style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
                    style.setFillForegroundColor(setColor(workbook, rgb.getR(), rgb.getG(), rgb.getB()).getIndex());
                    colorToStyle.put(rgb.toString(), style);
                    cell.setCellStyle(style);
                }
            }
        }

        try {
            FileOutputStream out =
                    new FileOutputStream(new File("C:\picture.xls"));
            workbook.write(out);
            out.close();

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

Карта colorToStyle служит для хранения стилей оформления ячеек. Создавая новый стиль, мы ассоциируем его с определенным цветом и каждый раз при закраске новой ячейки проверяем существует ли для нужного цвета готовый стиль, или же необходимо его создать.

Ну и, наконец, метод для преобразования RGB-цвета в формат HSSFColor, используемый в Apache POI. Обратите внимание на то, что используется метод findSimilarColor(), который пытается автоматически подобрать похожий цвет в палитре.

public HSSFColor setColor(HSSFWorkbook workbook, byte r, byte g, byte b) {
        HSSFPalette palette = workbook.getCustomPalette();
        HSSFColor hssfColor = null;
        try {
            hssfColor = palette.findSimilarColor(r, g, b);
            if (hssfColor == null) {
                System.err.println("null " + r + " " + g + " " + b);
                palette.setColorAtIndex(HSSFColor.RED.index, r, g, b);
                hssfColor = palette.getColor(HSSFColor.RED.index);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        return hssfColor;
    }

Результаты «творчества»:

  • Иконка файрфокса
  • Картинка побольше (Google Docs ее отображает как 2 части, но при скачивании получается нормальная картина)
  • Исходники проекта на GitHub

Конечно, до шедевра таким мозаикам далеко, но при правильном подборе цветов в изображении и его размера можно получить довольно симпатичные «рисунки». Умеет ли Apache POI (или какая-либо другая либа) работать с веркторными рисунками в офисных документах я не знаю :(

Для многих пользователей Microsoft Excel ассоциируется с обилием скучных таблиц и утомительных графиков. Но есть человек, который сломал все стереотипы об этой программе. Знакомьтесь: Тацуо Хориучи (Tatsuo Horiuchi), 77-летний художник из Страны восходящего солнца, «рисующий» в Excel детальные японские ландшафты.

Источник: ThisIsColossal

Уже 15 лет японский художник Тацуо Хориучи создает тонкие детали горных пейзажей и цветущих сакур с помощью невероятного инструмента — электронных таблиц Microsoft Excel.

Когда Тацуо Хориучи вышел на пенсию, чтобы не скучать, он решил заняться компьютерной графикой. Но почему именно в Excel?

«Графическое программное обеспечение обычно достаточно дорогое, а Excel предустановлен на большинстве компьютеров, — объяснил господин Хориучи. — В нем больше функций, и его проще использовать, чем Paint».

Используя простые векторные инструменты, разработанные в первую очередь для построения графиков, Хориучи вместо этого рисует панорамы японской сельской жизни.

«Я никогда не пользовался Excel на работе, но видел, как другие люди делают в нем довольно красивые диаграммы и графики, и подумал, что, наверное, смогу рисовать с его помощью».

Тацуо купил компьютер и стал создавать картины с традиционными японскими мотивами: сакура в цвету, Фудзияма, сосны, карпы в водопаде… С годами они стали невероятно сложными. Сегодня Тацуо Хориучи — признанный мастер цифрового искусства, его «полотна» побеждают на конкурсах и демонстрируются на выставках, а сам он открыл курсы рисования в Excel.

Смотрите также: Японская бабушка стала фотографом в 72 и теперь делает смешные автопортреты

А вы знали, что у нас есть Telegram и Instagram?

Подписывайтесь, если вы ценитель красивых фото и интересных историй!

Картина в ExcelВы считаете электронные таблицы MS Excel слишком скучной программой, предназначенной для серьёзных расчётов, ведения бухгалтерской отчётности и построения сложных графиков на основе полученных данных?
А вот японский дедушка Horiuchi так не считает :) Он приспособил Excel для рисования потрясающих картин по японским мотивам.

 
Картина в Excel
Картина в Excel

Его работы можно увидеть на этом сайте (на японском)…

 
А в Excel_е рисуют даже арты из Аниме и Манги…:)

 
< Предыдущая публикация — Следующая публикация >

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.

Рисование в Excel – крайне редко встречается. Но, с другой стороны, красивые рисунки очень украшают отчетные таблицы. Особенно, если рисунки и фотографии подобраны по теме таблицы. Рисование в Excel – это очень просто. Умеете рисовать в Word – умеете рисовать в Excel. Тут я могу отправить вас на статьи по Word:

  1. Урок 69. Рисунок в тексте
  2. Урок 70. Рисунок в Word
  3. Урок 71. Изображение в Word
  4. Урок 72. Рисование в Word
  5. Урок 73. Рисование Word

Так что повторяться не буду. Но рисование в Excel имеет свои особенности, которые мы рассмотрим в этой статье.

По окончании этого урока вы сможете:

  1. Привязать рисунок к ячейке двумя способами
  2. «Разыскать» потерянный рисунок

1. Два способа привязки рисунка к ячейке

Шаг 1. Предлагаю покрасить ячейку, к которой будем привязывать рисунок, в желтый цвет:

Рисование в Excel

Не снимаем выделение с ячейки

Шаг 2. Вставляем рисунок (лента Вставка → группа команд Иллюстрации → команда Значки → рабочее окно с библиотекой значков → значок Яблоко):

Рисование в Excel

Вы можете загрузить рисунок или фотографию, без разницы. Просто лучше отработать на небольшом рисунке.

Шаг 3. Открываем рабочее окно «Форматировать рисунок» (ПМ на выделенном объекте → команда Форматировать рисунок из контекстного меню):

Рисование в Excel

Рабочее окно «Форматировать рисунок» нельзя вызвать другим способом, только при выделенном объекте. Но теперь это окно будет висеть постоянно вне зависимости от того, есть ли у нас объекты или нет, до тех пор, пока мы его сами не закроем.

Шаг 4. В рабочем окне «Форматировать рисунок» переходим на закладку «Размер и свойства» и открываем выпадающее меню «Свойства»:

Рисование в Excel

Нас интересуют три режима:

  1. Перемещать и изменять размеры вместе с ячейками
  2. Перемещать вместе с ячейками, но не изменять размеры
  3. Не перемещать вместе с ячейками и не изменять размеры

С третьим режимом все понятно: объект в любом случае живет своей жизнью, не зависящей от ячеек. А вот первые два интересны. Второй режим задан по умолчанию. Но вот беда: добраться до ячейки и потаскать её по таблице не получится – вся ячейка перекрыта нашим объектом.

Шаг 5. Отведем объект в сторону, чтобы освободить ячейку, и подвигаем нашу желтую ячейку:

Рисование в Excel

Ничего не происходит! А теперь сделаем так, как задумывали создатели Microsoft Office.

Шаг 6. Делаем как на скриншоте:

Рисование в Excel

  • Увеличиваем размер нашей желтой ячейки
  • Вставляем значок «Яблоко» (Шаг 2) и устанавливаем режим (1) «Перемещать и изменять размеры вместе с ячейками»
  • Вставляем (можно скопировать и вставить из буфера обмена) значок «Яблоко» и устанавливаем режим (2) «Перемещать вместе с ячейками, но не изменять размеры»

Шаг 7. Уменьшаем высоту ячейки (курсор изменения высоты ячейки (нажимаем ЛМ и тащим) – статья «Excel 3. Введение в Excel»:

Рисование в Excel

Шаг 8. Совершаем манипуляции с жёлтой ячейкой:

Рисование в Excel

  1. Я перетащила ячейку B6 на место ячейки C6 – оба яблока послушно переместились на новое место
  2. Я скопировала ячейку C6 и вставила на ячейку E2 – оба яблока переместились, но яблоко 1 уменьшилось в размерах в соответствии с размерами ячейки, а яблоко 2, не изменив размеры, оказалось за пределами ячейки
  3. Я скопировала ячейку E2 и вставила на ячейку A6 – яблоко 1 увеличилось в размерах в соответствии с размерами ячейки, а вот яблоко 2 потеряли
Вывод Режимы 1. «Перемещать и изменять размеры вместе с ячейками» и 2. «Перемещать вместе с ячейками, но не изменять размеры» работают только в том случае, если объект практически не выходит за пределы ячейки.

Так что будьте внимательны при работе с рисунками. Иначе вы рискуете потерять рисунки. Поэтому моделируем такую ситуацию.

2. Восстановление объекта

Мне часто приходится работать с формулами.

Шаг 1. Лента Вставка → группа команд Символы → команда πУравнение:

Область выделения в Excel

Я не буду подробно останавливаться на возможностях редактора формул – они велики! Формулам и уравнениям я посвящу отдельную статью в рубрике «Тонкости Word» (и может не одну).

Шаг 2. Я выбрала обычную дробь «три пятых» ⅗:

Область выделения в Excel

Шаг 3. Совершаем три действия:

Область выделения Excel

  1. Помещаем свою дробь в желтую ячейку С2
  2. Устанавливаем режим «Перемещать и изменять размеры вместе с ячейками»
  3. Копируем ячейку С2 и вставляем на ячейку D4 – и теряем формулу! А может она не скопировалась?

Чтобы найти потерянный объект вспоминаем статью «Excel 25. Диаграмма»

Шаг 4. Открываем Область выделения (лента Главная → группа команд Редактирование → команда Найти и выделить → команда Область выделения из выпадающего меню)

В списке объектов смотрим по порядку, поскольку объектов всего два, то находим быстро:

Область выделения Excel

Вон какой маленький объект! Правильно, мы же назначили режим «Перемещать и изменять размеры вместе с ячейками», поэтому наша формула так сжалась!

Шаг 5. Корректируем размер объекта

Область выделения Excel

  1. Лента Формат фигуры → группа команд Размер → корректируем высоту объекта или …
  2. Рабочее окно Формат фигуры (которое достаем из контекстного меню или с Боковой панели) → режим «Подгонять размер фигуры под текст» – это предпочтительней

Не теряйте рисунки! В статье «Excel 25. Диаграмма» я рассказала, что несколько раз мне пришлось бороться с последствиями такой невнимательностью.

Теперь вы сможете:

  1. Привязать рисунок к ячейке двумя способами
  2. «Разыскать» потерянный рисунок

      Вчера одноклассник попросил меня нарисовать простую картину с Excel. Я смеялся над своим сердцем. Кто все еще использовал Excel, чтобы рисовать картинки в эту эпоху и готовился использовать Matlab или Python для рисования картинок.

Одноклассник показал мне складывающую диаграмму, нарисованную Excel. Я был шокирован, и Excel мог нарисовать такую ​​картину, поэтому я сразу же попросил одноклассника попросить одноклассника организовать настройки рисунка Excel, которые я узнал, и поделиться им через пример.

Цель: Нарисуйте изменения в точках звезды (спутниковая информация). 

(1) Выберите координаты XY и нарисуйте эскизы.

  • Выберите набор данных по желанию, а затем нажмите«вставлять», Выберите нужный тип значка, здесьКарта рассеянияНапример. Как показано на рисунке, вы можете получить эскиз.

  • Затем нажмите на эскиз, который появится выше, появится выше, появится выше«Инструмент диаграммы»,выбирать«дизайн», Затем щелкните вправо«Выберите данные»Как показано на рисунке ниже, следующий выбор«редактировать»Мы можем выбрать необходимые данные о оси x и y.

  • Дайте имя рисунка (эквивалентно влиянию легенды) и выберите требуемые данные о оси x и даты оси Y одновременно, как показано на рисунке ниже, а затем нажмите OK.

  • Вы можете нарисовать несколько графиков на одном графике, вы можете выбрать на рисунке ниже«Добавить к», А затем продолжить«редактировать», Выберите оси x и оси y графики и, наконец, нажмите OK, чтобы завершить эскиз.

(2) Измените графику, чтобы украсить графику.

  • Двойной щелкните данные по оси координат, и правая сторона появится«Установите формат оси координат», Сначала выберите«Координировать параметры оси»,существует«линия»Часть цвета до«Черный»Ширина изменена на«1 фунт»Сущность (Как правило, рисовать картинки, черные линии и 1 фунт, конечно, вы также можете измениться в соответствии со своими собственными предпочтениями), как показано на рисунке ниже:

  • Затем выберите четвертый ниже, второй и третий, как правило, не нужно менять. Мы здесь «Координировать варианты вала «Вам нужно изменить здесьМинимальное и максимальное значениеВ дополнение к первымГлавный и вторичныйЭто также может быть изменено. Здесь в основном относится к интервалу координат 30, а вторичная точка относится к подразделению между основной координатой на 10.Перекрестный перекресток осиЭто означает, что значение вертикальной координаты, пересекающиеся с горизонтальными координатами

  • Затем измените нижнюю часть опции оси координат«Шкала»,выбирать«Основной тип»а также«Вторичный типЭто отобразит линию шкалы, я обычно выбираю«внешний»
  • Измените цвет значения на оси координат, выберите «Параметры текста» и измените цвет шрифта. Как правило, выберите«Черный»,Как показано ниже:

  • Точно так же модифицируется координата x. Помните, что если вертикальные координаты находятся в крайнем правом правом, то значение вертикальной оси необходимо изменить, как показано ниже: (другие операции)

  • Измените промежуточную сетку, в соответствии с требованиями графики в книге, мы сохраняем только горизонтальные линии. Мы нажимаем на сеткуВертикальная линияПосле отбора,удалить удалить, Выберите прямые линии, щелкните справа«Установите параметры линии сетки»,Изменять«цвет»а также»Тип строки разделения «,Как показано ниже:

  • Затем нажмите на край рамки провода, чтобы сделатьНастройки линии сетки, Ниже«Рамка»Выбирать«Сплошная линия»,ЗатемОтрегулируйте цвета такжеширинаЭффект согласованности является наилучшим эффектом с настройками оси координат.

  • Затем мы устанавливаем конкретные линии в графическом поле, двойной щелчок, появляются справа«Установить формат серии данных»Выберите первое«линия», Изменить строкиЦвет, ширина, тип линии секции(Вы можете настроить в соответствии с фактической ситуацией), а затем выбрать«отметка», Изменить рассеянную точку, вы можете изменитьцвет,так же какНет края,Выберите черный и безграничный здесь. Это почти более красивая графика.

(3) Добавьте информацию о оси координат и легенду.

  • Как показано на рисунке, нажмите«Добавить элементы графика»Вы можете получить соответствующую информацию, и вы можете добавить ее. Здесь добавлен только заголовок оси.

  • в конце концовДважды -щелкните заголовок оси, К названию осиЦвет шрифта и размерПросто измените его, если вы добавите егоФигура и заголовокВы также можете удвоить -щелкнуть, чтобы изменить. Окончательная графика показана на рисунке ниже:

Получите больше сухих товаров, пожалуйста, обратите внимание на общественный счет «Happy Research».

Понравилась статья? Поделить с друзьями:

А вот еще интересные статьи:

  • Как с программы adobe reader перевести в word
  • Как рисуют графики в excel
  • Как с презентации скопировать весь текст в word
  • Как рисунок растянуть на весь лист в word
  • Как с помощью эцп подписать документ word

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии