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.

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:
_).pip install Pillow
How to Use:
images).edited_images).Notes:
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中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号