Skip to main content

A Python library built on top of PIL to easily edit/modify images

Project description

Easy PIL

PyPI Lint & Test License

A Python library built on top of Pillow to easily edit/modify images.

Installation

pip install easy-pil

Requires Python 3.11 or higher.

Quick Example

from easy_pil import Editor, Canvas

canvas = Canvas(width=500, height=500)
editor = Editor(canvas)

editor.text((10, 10), "Hello World")
editor.show()  # or .save("output.png")

Effects System

Apply 38+ effects using the unified effect() method with Effect classes:

from easy_pil import Editor, load_image
from easy_pil import Vignette, Glow, Gradient, Blur, Sepia, PixelSort

editor = Editor(load_image("image.jpg"))

# Single effect
editor.effect(Vignette(radius=120, feather=60))

# Chain multiple effects
editor.effect(Blur(amount=2)).effect(Sepia()).save("out.png")

All Effects

Category Effects
Blur & Filters Blur (box/gaussian), Contour, Emboss, EdgeEnhance, Sharpen, Smooth, Pixelate
Color Grayscale, Sepia, Invert, Posterize, Solarize, Threshold, Duotone
Overlay ColorOverlay, Gradient, Vignette, Noise, Scanlines, Halftone, Dither
Lighting Glow, Bloom, Neon, EdgeGlow
Shadow DropShadow
Distort Ripple, Vortex, Glitch, PixelSort, Kaleidoscope
Artistic OilPaint, TiltShift, Sketch, Cartoon, Thermal
Region PixelateRegion

Each Effect class has configurable parameters — see the API Reference for details.

Text Features

from easy_pil import Editor, Font, Text

editor = Editor("image.jpg")

# Simple text
editor.text((10, 10), "Hello", font=Font.poppins(size=32), color="white")

# Rich text with mixed colors/fonts
editor.rich_text((10, 50), [
    Text("Hello", Font.poppins(size=32), "red"),
    Text("World", Font.poppins(size=24), "blue"),
])

# Auto-wrapping text box
editor.text_box((10, 100), "Long text that wraps automatically...",
                font=Font.poppins(size=20), max_width=400)

# Text with drop shadow
editor.text_shadow((200, 300), "Hello", font=Font.poppins(size=40),
                   shadow_color="black", shadow_offset=(3, 3))

# Auto-fit text to width (accepts Font, FreeTypeFont, or path string)
font = editor.fit_text("Title", max_width=300, font=Font.poppins(size=40))
editor.text((10, 10), "Title", font=font)

# Centered text (no position — auto-centers on image)
editor.centered_text("Centered", font=Font.poppins(size=30))

Drawing Shapes

editor.rectangle((10, 10), width=100, height=50, fill="red")
editor.ellipse((150, 10), width=80, height=80, outline="blue", stroke_width=3)
editor.bar((10, 70), width=200, height=20, fill="green")
editor.rounded_bar((10, 100), width=200, height=20, fill="purple", radius=10)
editor.polygon([(300, 10), (350, 50), (250, 50)], fill="orange")
editor.arc((10, 150), width=100, height=100, start=0, rotation=180, fill="pink", stroke_width=3)
editor.line((10, 300), (200, 350), width=4, fill="black")
editor.donut((300, 300), inner_radius=30, outer_radius=60, fill="teal")

Image Adjustments

editor.resize((400, 400))
editor.rotate(45, expand=True)
editor.crop((50, 50, 200, 200))
editor.flip(horizontal=True)
editor.thumbnail((200, 200))
editor.contrast(1.5)
editor.brightness(1.2)
editor.saturation(0.8)
editor.invert()
editor.blur(mode="gaussian", amount=5)

Compositing

editor.blend(other_image, alpha=0.5)
editor.paste(overlay, position=(50, 50))
editor.mask(mask_image, invert=False)
editor.compose([img1, img2, img3], direction="vertical", align="center")
editor.rounded_corners(radius=20)
editor.circle_image()
editor.add_border(width=5, color="black")

Image I/O

editor = Editor.open("image.png")
editor.save("output.png")
editor.show()
editor.to_bytes(fmt="PNG")  # -> bytes

# Context manager — auto-closes image on exit
with Editor("image.png") as e:
    e.resize((400, 400)).save("thumb.png")

Async Support

from easy_pil import load_image_async

img = await load_image_async("https://example.com/image.png")

GIF Editing

from easy_pil import GifEditor

with GifEditor("animation.gif") as gif:
    gif.rotate(90)
    gif.save("rotated.gif")

Documentation

Support

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

easy_pil-0.5.0.tar.gz (2.2 MB view details)

Uploaded Source

Built Distribution

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

easy_pil-0.5.0-py3-none-any.whl (909.2 kB view details)

Uploaded Python 3

File details

Details for the file easy_pil-0.5.0.tar.gz.

File metadata

  • Download URL: easy_pil-0.5.0.tar.gz
  • Upload date:
  • Size: 2.2 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for easy_pil-0.5.0.tar.gz
Algorithm Hash digest
SHA256 b61a223c5f68a4bd7c9473fa4ce38b6a6e0fcf341ede533df33d30a01658196c
MD5 a6ad5e8bb44f9a44b6ddcb0897035a20
BLAKE2b-256 caa500b382f0d4c6ac37be700a9d5ba0eeba63d178e91944b6bed61dd87826a4

See more details on using hashes here.

Provenance

The following attestation bundles were made for easy_pil-0.5.0.tar.gz:

Publisher: publish.yml on shahriyardx/easy-pil

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file easy_pil-0.5.0-py3-none-any.whl.

File metadata

  • Download URL: easy_pil-0.5.0-py3-none-any.whl
  • Upload date:
  • Size: 909.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for easy_pil-0.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 2da19eaed2b56dd023c0ffa42a353bbdb4108af8f8f927f68f98073b0b81f643
MD5 62af0c9e429f2cdcaacd7409bb5d6a01
BLAKE2b-256 9cec91c33100b14777f5724baa258b481c57a2c492a8f5dc254ffb849aa5971d

See more details on using hashes here.

Provenance

The following attestation bundles were made for easy_pil-0.5.0-py3-none-any.whl:

Publisher: publish.yml on shahriyardx/easy-pil

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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