您的位置 首页 知识分享

图像处理脚本:PNG转换器和resizer

this script automates image processing, ensuring transp…

this script automates image processing, ensuring transparency, cropping unused space, resizing to fit a 2:1 canvas, and cleaning filenames. let’s improve the clarity and structure for better understanding and mntainability.

图像处理脚本:PNG转换器和resizer

Image Processing Script: PNG Converter and Resizer

This Python script streamlines image processing by ensuring transparency, cropping excess space, resizing to a 2:1 aspect ratio, and standardizing filenames. Here’s a breakdown of its functionality:

  • Transparency Handling: Converts images to PNG format with transparency. If an image has a white background, it’s replaced with transparency.
  • Space Removal: Removes spaces from filenames, replacing them with underscores (_).
  • Filename Shortening: Truncates filenames exceeding a maximum length (30 characters).
  • Cropping: Crops any extra unused space around the image.
  • Resizing: Resizes images to fit a 2:1 canvas (e.g., 400×200), maintaining aspect ratio and centering the image.
  • Logging Skipped Images: Records filenames of images skipped due to unsupported formats, emptiness, or full transparency.
  • Dependencies: Requires the Pillow (PIL fork) library. Install it using: pip install Pillow

How to Use:

  1. Place your images in a folder (e.g., images).
  2. Run the script. It will process the images and save them to a new folder (e.g., edited_images).
  3. Processed images will be resized, cente, and saved as PNGs with transparency.

Notes:

The script handles only valid image formats and logs any issues with unsupported formats or transparency in the console.

Improved Python Script:

from PIL import Image import os  def ensure_transparency(image):     """Ensures the image has transparency; replaces white backgrounds with transparency."""     if image.mode != 'RGBA':         image = image.convert('RGBA')     if image.getchannel('A').getextrema()[0] != 0:         data = image.getdata()         new_data = [(r, g, b, 0) if r > 240 and g > 240 and b > 240 else (r, g, b, a) for r, g, b, a in data]         image.putdata(new_data)     return image  def crop_and_resize(image, target_width, target_height):     """Crops unused space and resizes to the target dimensions, maintaining aspect ratio."""     bbox = image.getbbox()     if bbox is None:         return None  # Image is empty or fully transparent      cropped = image.crop(bbox)     width, height = cropped.size     aspect_ratio = target_width / target_height      if width / height > aspect_ratio:         new_width = target_width         new_height = int(new_width * (height / width))     else:         new_height = target_height         new_width = int(new_height * (width / height))      resized = cropped.resize((new_width, new_height), Image.LANCZOS)     return resized  def process_image(input_path, output_path, target_width, target_height):     """Processes a single image: ensures transparency, crops, resizes, and saves."""     try:         image = Image.open(input_path)         image = ensure_transparency(image)         resized_image = crop_and_resize(image, target_width, target_height)         if resized_image:             canvas = Image.new("RGBA", (target_width, target_height), (255, 255, 255, 0))             x_offset = (target_width - resized_image.width) // 2             y_offset = (target_height - resized_image.height) // 2             canvas.paste(resized_image, (x_offset, y_offset))             canvas.save(output_path, "PNG")             return True         else:             return False     except IOError:         print(f"Error processing {input_path}")         return False  def shorten_filename(filename, max_length=30):     """Shortens filenames, preserving extensions."""     name, ext = os.path.splitext(filename)     return f"{name[:max_length]}{ext}"  def batch_process_images(input_dir, output_dir, target_width, target_height):     """Processes all images in the input directory."""     os.makedirs(output_dir, exist_ok=True)     skipped = []     for filename in os.listdir(input_dir):         if filename.lower().endswith(('.jpg', '.jpeg', '.png')):             input_path = os.path.join(input_dir, filename)             new_filename = shorten_filename(filename.replace(" ", "_"))             output_path = os.path.join(output_dir, new_filename)             if not process_image(input_path, output_path, target_width, target_height):                 skipped.append(filename)     if skipped:         print(" Skipped images:")         for filename in skipped:             print(f"- {filename}")   input_directory = './images' output_directory = './edited_images' batch_process_images(input_directory, output_directory, 400, 200) #Example 2:1 ratio
登录后复制

This revised script is more efficient, readable, and uses more descriptive variable names and function names. Error handling is improved, and the code is better organized into logical functions. Remember to create the images directory and place your images inside before running the script.

以上就是图像处理脚本:PNG转换器和resizer的详细内容,更多请关注php中文网其它相关文章!

本文来自网络,不代表甲倪知识立场,转载请注明出处:http://www.spjiani.cn/wp/9243.html

作者: nijia

发表评论

您的电子邮箱地址不会被公开。

联系我们

联系我们

0898-88881688

在线咨询: QQ交谈

邮箱: email@wangzhan.com

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部