Skip to main content

Pilmoji for nonebot-plugin-parser

Reason this release was yanked:

bug

Project description

Pilmoji for Parser

A simplified emoji renderer for Pillow, Python's imaging library. This is a streamlined fork optimized for use with nonebot-plugin-parser.

โœจ Features

  • ๐ŸŽจ Unicode Emoji Support - Render standard Unicode emojis
  • ๐Ÿ’ฌ Discord Emoji Support - Render custom Discord emojis
  • ๐Ÿ“ Multi-line Text - Automatic line break handling
  • ๐ŸŽญ Multiple Emoji Styles - Apple, Google, Twitter, Facebook
  • โšก Async/Await - Built with modern async Python
  • ๐Ÿ’พ Smart Caching - Local file caching for better performance
  • ๐Ÿ”ง Simple API - Easy-to-use interface with sensible defaults

๐Ÿ“ฆ Installation

Requirements: Python 3.10 or higher

pip install apilmoji

Or install from source:

git clone https://github.com/fllesser/apilmoji.git
cd apilmoji
pip install .

๐Ÿš€ Quick Start

Basic Usage (Unicode Emoji Only)

import asyncio
from pilmoji import Pilmoji
from PIL import Image, ImageFont

async def main():
    text = '''
    Hello, world! ๐Ÿ‘‹
    Here are some emojis: ๐ŸŽจ ๐ŸŒŠ ๐Ÿ˜Ž
    Multi-line support! ๐Ÿš€ โœจ
    '''

    # Create image
    image = Image.new('RGB', (550, 150), (255, 255, 255))
    font = ImageFont.truetype('arial.ttf', 24)

    # Render text with emojis
    async with Pilmoji() as pilmoji:
        await pilmoji.text(image, (10, 10), text.strip(), font, fill=(0, 0, 0))

    image.save('output.png')
    image.show()

asyncio.run(main())

With Discord Emoji Support

async def main():
    text = '''
    Unicode emoji: ๐Ÿ‘‹ ๐ŸŽจ ๐Ÿ˜Ž
    Discord emoji: <:custom:123456789012345678>
    '''

    image = Image.new('RGB', (550, 100), (255, 255, 255))
    font = ImageFont.truetype('arial.ttf', 24)

    async with Pilmoji() as pilmoji:
        await pilmoji.text_with_discord_emoji(
            image, (10, 10), text.strip(), font, fill=(0, 0, 0)
        )

    image.save('output.png')

asyncio.run(main())

๐ŸŽจ Emoji Styles

Choose from different emoji styles:

from pilmoji import Pilmoji, EmojiStyle, EmojiCDNSource

# Apple style (default)
source = EmojiCDNSource(style=EmojiStyle.APPLE)

# Google style
source = EmojiCDNSource(style=EmojiStyle.GOOGLE)

# Twitter style
source = EmojiCDNSource(style=EmojiStyle.TWITTER)

# Facebook style
source = EmojiCDNSource(style=EmojiStyle.FACEBOOK)

async with Pilmoji(source=source) as pilmoji:
    await pilmoji.text(image, (10, 10), "Hello ๐Ÿ‘‹", font)

๐Ÿ”ง API Reference

Pilmoji

Main class for rendering text with emojis.

Constructor:

Pilmoji(
    source: BaseSource = EmojiCDNSource(),
    cache: bool = True
)

Parameters:

  • source: Emoji source to use (default: EmojiCDNSource())
  • cache: Enable emoji caching (default: True)

Methods:

async text(image, xy, text, font, fill=None)

Render text with Unicode emoji support.

  • image: PIL Image object to render onto
  • xy: Tuple of (x, y) coordinates for text position
  • text: Text string to render (supports multiple lines)
  • font: PIL Font object
  • fill: Text color (default: black)

async text_with_discord_emoji(image, xy, text, font, fill=None)

Render text with both Unicode and Discord emoji support.

Parameters are the same as text().

EmojiCDNSource

Default emoji source using emojicdn.elk.sh.

Constructor:

EmojiCDNSource(
    style: EmojiStyle = EmojiStyle.APPLE,
    cache_dir: Path | None = None
)

Parameters:

  • style: Emoji style to use (Apple, Google, Twitter, Facebook)
  • cache_dir: Custom cache directory (default: ~/.cache/pilmoji)

๐Ÿ”Œ Custom Emoji Sources

Create your own emoji source by subclassing BaseSource:

from pilmoji import BaseSource
from io import BytesIO

class CustomEmojiSource(BaseSource):
    async def get_emoji(self, emoji: str) -> BytesIO | None:
        # Your custom emoji fetching logic
        pass

    async def get_discord_emoji(self, id: int) -> BytesIO | None:
        # Your custom Discord emoji fetching logic
        pass

# Use your custom source
async with Pilmoji(source=CustomEmojiSource()) as pilmoji:
    await pilmoji.text(image, (10, 10), "Hello ๐Ÿ‘‹", font)

๐Ÿ“ Examples

Different Text Colors

# Red text
await pilmoji.text(image, (10, 10), "Red text ๐Ÿ”ด", font, fill=(255, 0, 0))

# RGB tuple
await pilmoji.text(image, (10, 50), "Blue text ๐Ÿ”ต", font, fill=(0, 0, 255))

# RGBA tuple with transparency
await pilmoji.text(image, (10, 90), "Semi-transparent ๐Ÿ‘ป", font, fill=(0, 0, 0, 128))

Multi-line Text

text = """Line 1 with emoji ๐ŸŽจ
Line 2 with emoji ๐ŸŒŠ
Line 3 with emoji ๐Ÿ˜Ž"""

await pilmoji.text(image, (10, 10), text, font, fill=(0, 0, 0))

Without Context Manager

pilmoji = Pilmoji()
await pilmoji.text(image, (10, 10), "Hello ๐Ÿ‘‹", font)
await pilmoji.aclose()  # Don't forget to close!

๐Ÿงช Development

Setup

# Clone the repository
git clone https://github.com/fllesser/apilmoji.git
cd apilmoji

# Install dependencies
uv sync --dev

# Run tests
uv run pytest

# Run linting
uv run ruff check src/

Running Tests

# Run all tests
uv run poe test

# Run with coverage
uv run pytest --cov=src --cov-report=html

๐Ÿ“„ License

This project is licensed under the MIT License - see the LICENSE file for details.

๐Ÿ™ Acknowledgments

๐Ÿ”— Links

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

apilmoji-0.1.0.tar.gz (8.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

apilmoji-0.1.0-py3-none-any.whl (9.3 kB view details)

Uploaded Python 3

File details

Details for the file apilmoji-0.1.0.tar.gz.

File metadata

  • Download URL: apilmoji-0.1.0.tar.gz
  • Upload date:
  • Size: 8.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.9.15 {"installer":{"name":"uv","version":"0.9.15","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for apilmoji-0.1.0.tar.gz
Algorithm Hash digest
SHA256 66685bbac4bee1427cc6b05c4ef094959b15c7b4925ed8a9fcef18f2908b8784
MD5 e1a2235fd695060b99b55822966cf66a
BLAKE2b-256 3173a9f2c012bc087975822928e5ced175acc72bb0ea94b50450bfda289546b3

See more details on using hashes here.

File details

Details for the file apilmoji-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: apilmoji-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 9.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.9.15 {"installer":{"name":"uv","version":"0.9.15","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for apilmoji-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 58306ebcdc994069e9c074338ff8497cf25d0cfd67216be06e0f6ecb9dd3b037
MD5 6bf53f6dd4d55b516b8782c637f5f875
BLAKE2b-256 30d03e3d5118abd129d06af01698d8165c4fa9ebaca889b048a356c2b09a1161

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page