Как изменить цвет части текста на желтый в этом коде?

Здравствуйте! Я новичок в программировании, и у меня есть код, который отвечает за оформление текста, извлекаемого из основного файла, чтобы создать изображение с текстом. <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
  • 22 декабря 2024 г. 0:34
Ответы на вопрос 2
Для того чтобы изменить цвет двоеточий на желтый в тексте, вам нужно будет обрабатывать текст по частям, чтобы выделить двоеточия и задать им отдельный цвет. Вы можете сделать это, разделив текст на части и рисуя их по отдельности. 

Ниже приведен доработанный код, который меняет цвет двоеточий на желтый:

```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)
Похожие вопросы