Здравствуйте! Я новичок в программировании, и у меня есть код, который отвечает за оформление текста, извлекаемого из основного файла, чтобы создать изображение с текстом. <br/> Моя задача заключается в том, чтобы изменить цвет всех двоеточий ":" на желтый, при этом сохранив расположение и цвет остального текста без изменений. Я испытываю трудности с этим, не могли бы вы помочь? <br/> <br/> <pre><code class="python">from PIL import Image, ImageDraw, ImageFont
def create_advertisement_image(text, output_path="advertisement.png"):
# Проверяем, кого ищут (Мужа или Жену)
if 'Жену' in text:
# Цвета для Мужа
background_color = '#c02d23' # Красный фон
text_color = '#fafeff' # Белый текст
shadow_color = '#9b0a1f' # Тень для текста
elif 'Мужа' in text:
# Цвета для Жены
background_color = '#7e4db8' # Светлый розовый фон
text_color = '#fafeff' # Белый текст
shadow_color = '#67418e' # Тень для текста
else:
# Если не найдено ключевых слов, используем дефолтные цвета
background_color = '#FFE8B7'
text_color = '#5E0D26'
shadow_color = '#9b0a1f'
# Создаем изображение с выбранным фоном
image = Image.new('RGB', (1080, 1080), color=background_color)
draw = ImageDraw.Draw(image)
# Пробуем загрузить шрифт. Указываем полный путь к файлу шрифта (например, Nunito-Black.ttf)
try:
font_regular = ImageFont.truetype('Nunito-Black.ttf', size=50) # Обычный шрифт
font_large = ImageFont.truetype('Nunito-Black.ttf', size=80) # Большой шрифт для "Ищу: Жену"
except IOError:
print("Ошибка загрузки шрифта. Используется шрифт по умолчанию.")
font_regular = ImageFont.load_default()
font_larg
Для того чтобы изменить цвет двоеточий на желтый в тексте, вам нужно будет обрабатывать текст по частям, чтобы выделить двоеточия и задать им отдельный цвет. Вы можете сделать это, разделив текст на части и рисуя их по отдельности.
Ниже приведен доработанный код, который меняет цвет двоеточий на желтый:
```python
from PIL import Image, ImageDraw, ImageFont
def create_advertisement_image(text, output_path="advertisement.png"):
# Проверяем, кого ищут (Мужа или Жену)
if 'Жену' in text:
# Цвета для Мужа
background_color = '#c02d23' # Красный фон
text_color = '#fafeff' # Белый текст
shadow_color = '#9b0a1f' # Тень для текста
elif 'Мужа' in text:
# Цвета для Жены
background_color = '#7e4db8' # Светлый розовый фон
text_color = '#fafeff' # Белый текст
shadow_color = '#67418e' # Тень для текста
else:
# Если не найдено ключевых слов, используем дефолтные цвета
background_color = '#FFE8B7'
text_color = '#5E0D26'
shadow_color = '#9b0a1f'
# Создаем изображение с выбранным фоном
image = Image.new('RGB', (1080, 1080), color=background_color)
draw = ImageDraw.Draw(image)
# Пробуем загрузить шрифт. Указываем полный путь к файлу шрифта (например, Nunito-Black.ttf)
try:
font_regular = ImageFont.truetype('Nunito-Black.ttf', size=50) # Обычный шрифт
except IOError:
print("Ошибка загрузки шрифта. Используется шрифт по умолчанию.")
font_regular = ImageFont.load_default()
# Устанавливаем начальные координаты для текста
x, y = 50, 50
# Разделяем текст и обрабатываем его
parts = text.split(':')
for i, part in enumerate(parts):
# Рисуем часть текста
draw.text((x, y), part, fill=text_color, font=font_regular)
# Если это не последняя часть, рисуем двоеточие желтым цветом
if i < len(parts) - 1:
x_offset = draw.textsize(part, font=font_regular)[0] # Получаем ширину части текста
draw.text((x + x_offset, y), ':', fill='yellow', font=font_regular)
x += x_offset + draw.textsize(':', font=font_regular)[0] # Обновляем значение x для следующей части
else:
x += draw.textsize(part, font=font_regular)[0] # Обновляем значение x для последней части
# Сохраняем изображение
image.save(output_path)
print(f"Изображение сохранено как '{output_path}'.")
# Пример использования
create_advertisement_image("Я ищу: Жену")
```
В этом коде текст разбивается на части с помощью метода `split(':')`. Затем каждая часть рисуется на изображении, а между частями добавляется двоеточие желтого цвета. Таким образом, двоеточия будут отображаться в желтом цвете, а остальной текст останется без изменений.
Вроде так:from PIL import Image, ImageDraw, ImageFont def create_advertisement_image(text, output_path="advertisement.png"): if 'Жену' in text: background_color = '#c02d23' text_color = '#fafeff' shadow_color = '#9b0a1f' elif 'Мужа' in text: background_color = '#7e4db8' text_color = '#fafeff' shadow_color = '#67418e' else: background_color = '#FFE8B7' text_color = '#5E0D26' shadow_color = '#9b0a1f' image = Image.new('RGB', (1080, 1080), color=background_color) draw = ImageDraw.Draw(image) try: font_regular = ImageFont.truetype('Nunito-Black.ttf', size=50) font_large = ImageFont.truetype('Nunito-Black.ttf', size=80) except IOError: print("Ошибка загрузки шрифта. Используется шрифт по умолчанию.") font_regular = ImageFont.load_default() font_large = ImageFont.load_default() margin = 50 text_position = (margin, margin) parts = text.split(':') colored_text = [] for i, part in enumerate(parts): colored_text.append(part) if i < len(parts) - 1: colored_text.append(':') current_position = text_position for part in colored_text: if part == ':': draw.text((current_position[0] + 6, current_position[1] + 6), part, font=font_regular, fill=shadow_color) draw.text(current_position, part, font=font_regular, fill='yellow') else: draw.text((current_position[0] + 6, current_position[1] + 6), part, font=font_regular, fill=shadow_color) draw.text(current_position, part, font=font_regular, fill=text_color) current_position = (current_position[0] + draw.textsize(part, font=font_regular)[0], current_position[1]) image.save(output_path) with open('your_text_file.txt', 'r', encoding='utf-8') as file: text = file.read() create_advertisement_image(text)