Создание мемов в excel с помощью python | от Ahsen Parwez
Да, вы правильно поняли! Это настоящий мем, нарисованный в Excel. Каждая ячейка на листе Excel имеет цветовой формат в соответствии с исходным изображением, воссоздавая знаменитый мем «удивленный пикачу».
Итак, как нам нарисовать мем (или, если уж на то пошло, любое изображение) в Excel? Излишне говорить, что ручное редактирование каждой ячейки — невыполнимая задача. Поэтому мы напишем скрипт на Python, который завершит работу за нас. Этот скрипт выполняет четыре простые задачи:
- Прочитайте исходное изображение и при необходимости измените его размер. Запишите значения RGB для каждого пикселя изображения.
- Создайте пустой файл Excel и соответствующим образом измените размер ячеек на листе. Изменение размера важно, так как пиксели изображения имеют квадратную форму, а ячейки Excel по умолчанию прямоугольные.
- Выполните любые дополнительные настройки, например укажите цвет полей и фона, преобразование в черно-белое изображение или задайте уровень масштабирования для листа Excel.
- Для каждого пикселя заполните соответствующую ячейку значениями RGB.
Мы используем две библиотеки Python: PIL для обработки изображений и openpyxl для работы с Excel. Обе эти библиотеки предустановлены в пакете anaconda.
Начнем с импорта необходимых библиотек и чтения (и изменения размера) исходного изображения:
из PIL import Image
import openpyxlim = Image.open('meme.jpg', 'r')
width = max_width
height = int(width*(im.size[1]/im.size[0]))
im = im.resize((ширина, высота))
px = im.load()
«max_width» — это регулируемый параметр, который я установил в соответствии с размером экрана моего ноутбука. В коде есть несколько таких параметров, значения которых объявлены в начале кода:
max_width = 350
sheet_zoom = 15 # Zeem уровень листа excel
column_size = 2
row_size = 10
img_left_margin = 10
img_top_margin = 10
img_right_margin = 10
img_bottom_margin = 10
bg_col = 'FFFFFF' # Цвет фона - по умолчанию белый
black_and_white = 0 # Установите значение 1, если вы хотите черно-белое изображение
После прочтения изображения мы создаем пустой файл Excel и меняем размер ячеек:
wb = openpyxl.Workbook()
ws = wb. activefor i в диапазоне (0, height+img_top_margin+img_bottom_margin):
t = ws.cell (строка = i+1, столбец = 1)
ws.row_dimensions[t.row].height = row_size
для j в диапазоне ( 0, width+img_left_margin+img_right_margin):
t = ws.cell(строка = 1, столбец = j+1)
ws.column_dimensions[t.coordinate.replace(str(t.row),'')].width = размер_столбца
Мы также можем изменить цвет фона:
для i в диапазоне (0, width+img_left_margin+img_right_margin):
для j в диапазоне (0, height+img_top_margin+img_bottom_margin):
a = ws.cell(row = j+1, column = i+1)
a.fill = openpyxl.styles.PatternFill(fill_type = 'solid', start_color = bg_col, end_color = bg_col)
Наконец, мы берем массив ячеек, равный по размеру разрешение изображения и раскрасьте каждую ячейку массива соответствующими значениями RGB пикселя.
для i в диапазоне (0, ширина):
для j в диапазоне (0, высота):
a = ws.cell (строка = j+img_top_margin, столбец = i+img_left_margin)
col = px[i, j ]
c1 = col[0]
c2 = col[1]
c3 = col[2]if black_and_white == 1:
bw = int(0.2126*c1 + 0.7152*c2 + 0.0722*c3)
val = ' {:02X}'.format(bw)
c = val + val + val
еще:
c = '{:02X}{:02X}{:02X}'.format(c1, c2, c3) c_fill = openpyxl .styles.PatternFill(fill_type = 'solid', start_color = c, end_color = c)
a.fill = c_fillws.sheet_view.zoomScale = sheet_zoom
wb.save(filename = 'meme_pic.xlsx')
PatternFill принимает цвет в шестнадцатеричном формате, а px[0,i, ] выводит цвет в формате RGB. Поэтому мы преобразовали значения цвета RGB в шестнадцатеричный формат. Для этого мы берем каждый цветовой компонент, преобразуем его в шестнадцатеричный формат, а затем записываем три преобразованных шестнадцатеричных значения рядом, чтобы получить цвет в шестнадцатеричном формате. Например, предположим, что значения RGB равны (200, 187, 83). Мы вычисляем шестнадцатеричные значения индивидуально: hex(200) = C8, hex(187) = BB и hex(83) = 53. Следовательно, цвет в hex будет C8BB53. Python делает это преобразование, используя ‘{:02X}’. format(). ‘X’ означает, что число в скобках должно быть преобразовано в шестнадцатеричное, а ’02’ указывает минимальную длину вывода (например, если шестнадцатеричный вывод E , ’02’ дает 0E ) .
Вот и весь скрипт:
Итак, есть ли практическая польза от всего этого? Честно говоря, я в растерянности, чтобы найти. Я не могу придумать ни одной реальной ситуации, когда мне нужно будет рисовать изображение из ячеек Excel. Тем не менее, это был хороший пример работы с Excel и обработки изображений. Например, скрипт позволяет создавать собственные черно-белые изображения из исходной картинки. Черно-белые изображения имеют одинаковые значения компонентов R, G и B. Следовательно, требуется функция, которая для каждого пикселя принимает три входных данных (компоненты R, G и B в цветном изображении) и вычисляет одно выходное значение для этого пикселя. Я использовал линейную функцию, присваивая трем компонентам разные веса (примерно 21% красного + 72% зеленого + 7% синего). Можно исследовать, как изменяется черно-белая версия изображения, изменяя веса или исследуя нелинейную функцию.
Более того, поскольку вы контролируете изображение на уровне пикселей, у вас есть огромная степень гибкости при внесении изменений. Например, я попробовал отключить зеленый цвет (установил c2 = 0 в строке 47), и результирующее изображение выглядит довольно круто:
Изображение с отключенным зеленым цветомИтак, несмотря на то, что оно совершенно бесполезно с практической точки зрения, Я думаю, что это была веселая работа!
Спасибо, что являетесь частью нашего сообщества! Подпишитесь на наш канал YouTube или присоединитесь к курсу собеседования Skilled.dev по программированию .
Курс по прохождению собеседования по программированию
skill.dev
Рисунок Чаки Финстера (сделанный на ее мобильном телефоне) Meme Generator
Самый быстрый генератор мемов на планете.

Без пробеловВерх и низВерхВниз
Автоматический цветБелыйЧерный
10%15%20%25%35%50%75%100%
Popular
My
loading…
Blank
Просмотреть все шаблоны мемов (1,0000s more…)
← Цвет фона. Нажмите, чтобы изменить.
Примечание. Шрифт можно настроить для каждого текстового поля, щелкнув значок шестеренки.
Совет: если вы , ваши мемы будут сохранены в вашей учетной записи
Избранный рисунок Чаки Финстера (сделанный на ее мобильном телефоне) Мемы Просмотреть все
Что такое генератор мемов?
Это бесплатный онлайн-редактор изображений, который позволяет добавлять в шаблоны текст, изображения и многое другое с изменяемым размером.
Люди часто используют генератор для настройки существующих мемов,
такие как те, которые можно найти в коллекции шаблонов мемов Imgflip.
Однако вы также можете загрузить свои собственные шаблоны или начать с нуля с пустыми шаблонами.
Как сделать мем
- Выберите шаблон. Вы можете использовать один из популярных шаблонов, поиск по более чем 1 миллиону загруженные пользователем шаблоны с помощью ввода поиска или нажмите «Загрузить новый шаблон», чтобы загрузить свой собственный шаблон с вашего устройства или с URL-адреса. Для проектирования с нуля попробуйте найти «пустые» или «пустые» шаблоны.
- Добавить настройки. Добавляйте текст, изображения, наклейки, рисунки и интервалы с помощью кнопок рядом с ваш мем холст.
- Создавайте и делитесь. Нажмите «Создать мем», а затем выберите, как поделиться и сохранить свой мем. Ты можешь поделиться в социальных приложениях или через телефон, или поделиться ссылкой, или загрузить на свое устройство. Вы также можете поделиться с одним из многочисленных мем-сообществ Imgflip.
Как настроить мем?
- Вы можете перемещать текстовые поля и изменять их размер, перетаскивая их. Если вы используете мобильное устройство,
возможно, вам придется сначала установить флажок «Включить перетаскивание» в разделе «Дополнительные параметры».
Вы можете добавить столько дополнительные текстовые поля, как вы хотите, с помощью кнопки «Добавить текст».
- Вы можете настроить цвет шрифта и цвет контура рядом с местом ввода текста.
- Вы можете дополнительно настроить шрифт для каждого текстового поля, используя значок шестеренки рядом с полем ввода текста. Imgflip поддерживает все шрифты, установленные на вашем устройстве, включая стандартные Windows, Mac и веб-шрифты. включая полужирный и курсив. Более 1300 бесплатных шрифтов также поддерживаются для всех устройств. Любой другой шрифт который вы хотите, можно использовать, если вы сначала установите его на свое устройство, а затем введите имя шрифта на Imgflip.
- Вы можете вставлять популярные или пользовательские наклейки и другие изображения, включая шляпы отморозков, смиритесь с этим
солнцезащитные очки, речевые пузыри и многое другое. Поддерживаются непрозрачность и изменение размера, и вы можете копировать/вставлять изображения.
используя CMD/CTRL + C/V для быстрого создания.
- Вы можете вращать, переворачивать и обрезать любые загруженные вами шаблоны.
- Вы можете рисовать, набрасывать или делать наброски на своем меме, используя панель над изображением предварительного просмотра мема.
- Вы можете создавать «цепочки мемов» из нескольких изображений, расположенных вертикально, добавляя новые изображения с Настройка «ниже текущего изображения».
- Вы можете добавлять специальные эффекты изображения, такие как постеризация, артефакты JPEG, размытие, повышение резкости и цветовые фильтры. такие как оттенки серого, сепия, инвертирование и яркость.
- Вы можете удалить наш незаметный водяной знак imgflip.com (а также удалить рекламу и повысить качество изображения возможности создания) с помощью Imgflip Pro или .
Могу ли я использовать генератор не только для создания мемов?
Да! Генератор мемов — это гибкий инструмент для многих целей. Загружая пользовательские изображения и используя
все настройки, вы можете создавать множество творческих работ, в том числе
плакаты, баннеры, рекламные объявления и другая нестандартная графика.