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

心靈之曲
发布: 2025-02-15 22:42:23
原创
538人浏览过

this python 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 maintainability.

图像处理脚本: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., 400x200), 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, centered, and saved as PNGs with transparency.

Notes:

PNG Maker
PNG Maker

利用 PNG Maker AI 将文本转换为 PNG 图像。

PNG Maker 36
查看详情 PNG Maker

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

Improved Python Script:

<code class="python">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("\nSkipped 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</code>
登录后复制

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中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号