Source code for cocopack.convert
import os
from copy import copy
from PIL import Image
__all__ = ['convert_image']
# Input / Image Conversion ----------------------------------------
def _make_opaque(img_input, bg_color=(255, 255, 255)):
# if input is path, load it as image
if isinstance(img_input, str):
img = Image.open(img_input)
else: # assume input is image
img = copy(img_input)
# Check if the image has an alpha channel
if img.mode in ('RGBA', 'LA') or ('transparency' in img.info):
# Create a new image with a white background
background = Image.new(img.mode[:-1], img.size, bg_color)
# Paste the image on the background (masking with itself)
background.paste(img, img.split()[-1])
image = background # ... using the alpha channel as mask
# Convert image to RGB
if img.mode != 'RGB':
img = img.convert('RGB')
return img # image updated with nontrasparent background
[docs]
def convert_image(source_path, target_format, **kwargs):
"""Convert an image file to another format.
Args:
source_path (str): Path to the source image file.
target_format (str): Target format to convert to (e.g., 'jpg', 'png', 'pdf').
**kwargs: Additional keyword arguments.
remove_original (bool): Whether to remove the original file. Defaults to True.
Returns:
str: Path to the converted image file.
"""
# Ensure the target format does not start with a dot
if target_format.startswith('.'):
target_format = target_format[1:]
# Load the image with PIL:
img = Image.open(source_path)
if target_format in ['jpg', 'pdf']:
img = _make_opaque(img)
# Define the new filename
base = os.path.splitext(source_path)[0]
target_path = f"{base}.{target_format.lower()}"
# Convert and save the image
img.save(target_path, target_format.upper())
if kwargs.pop('remove_original', True):
os.remove(source_path)
return target_path # return the new path