mcpField
T
thumbnail-generator

thumbnail-generator

github.com/dkyazzentwatwa创意与媒体12466 次安装29 周前更新
代码仓库

关于 thumbnail-generator

thumbnail-generator 是用于生成图像缩略图的 Python 库和命令行工具,适合需要多种尺寸或整批处理图片的工作流。它提供多种裁剪方式、预设、格式选择和质量控制。

主要功能

  1. 01智能裁剪,支持人脸与边缘检测
  2. 02一次生成多种尺寸
  3. 03网页、社交媒体、图标和 favicon 预设
  4. 04批量处理文件夹
  5. 05支持 JPEG、PNG 和 WebP
  6. 06调整图像质量

适用场景

  1. 01生成多种尺寸的商品缩略图
  2. 02批量制作图库缩略图
  3. 03制作社交媒体图片版本
  4. 04导出应用图标和 favicon

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/dkyazzentwatwa/chatgpt-skills --skill thumbnail-generator

安装后在 Claude Code 中输入/thumbnail-generator确认已加载。

附带文件scripts/requirements.txtscripts/thumbnail_gen.py

详细介绍

缩略图生成器

通过智能裁剪、多种输出尺寸和批量处理,创建优化后的缩略图。

功能

  • 智能裁剪:居中、面部感知或基于边缘检测的裁剪
  • 多种尺寸:一次生成多种尺寸的缩略图
  • 预设:网页、社交媒体、应用图标预设
  • 批量处理:处理整个文件夹
  • 质量控制:平衡文件大小与画质
  • 格式:输出 JPEG、PNG、WebP

快速开始

from thumbnail_gen import ThumbnailGenerator

gen = ThumbnailGenerator()
gen.load("photo.jpg")

# Create single thumbnail
gen.resize(200, 200).save("thumb.jpg")

# Create multiple sizes
gen.generate_sizes([
    (100, 100),
    (200, 200),
    (400, 400)
], output_dir="./thumbs/")

CLI 用法

# Single thumbnail
python thumbnail_gen.py --input photo.jpg --size 200x200 --output thumb.jpg

# Multiple sizes
python thumbnail_gen.py --input photo.jpg --sizes 100x100,200x200,400x400 --output ./thumbs/

# Batch process folder
python thumbnail_gen.py --input ./photos/ --size 200x200 --output ./thumbs/

# Use preset
python thumbnail_gen.py --input photo.jpg --preset social --output ./thumbs/

# Smart crop
python thumbnail_gen.py --input photo.jpg --size 200x200 --crop smart --output thumb.jpg

# WebP output
python thumbnail_gen.py --input photo.jpg --size 200x200 --format webp --output thumb.webp

API 参考

ThumbnailGenerator 类
class ThumbnailGenerator:
    def __init__(self)

    # Loading
    def load(self, filepath: str) -> 'ThumbnailGenerator'

    # Resizing
    def resize(self, width: int, height: int,
              crop: str = "fit") -> 'ThumbnailGenerator'
    def resize_width(self, width: int) -> 'ThumbnailGenerator'
    def resize_height(self, height: int) -> 'ThumbnailGenerator'

    # Cropping
    def crop_center(self, width: int, height: int) -> 'ThumbnailGenerator'
    def crop_smart(self, width: int, height: int) -> 'ThumbnailGenerator'
    def crop_position(self, width: int, height: int,
                     position: str = "center") -> 'ThumbnailGenerator'

    # Output
    def save(self, output: str, quality: int = 85,
            format: str = None) -> str
    def to_bytes(self, format: str = "JPEG", quality: int = 85) -> bytes

    # Batch operations
    def generate_sizes(self, sizes: list, output_dir: str,
                      prefix: str = None) -> list
    def process_folder(self, input_dir: str, output_dir: str,
                      width: int, height: int, recursive: bool = False) -> list

    # Presets
    def apply_preset(self, preset: str, output_dir: str) -> list

调整大小模式

适应(默认)

调整大小以适应边界,同时保持纵横比:

gen.resize(200, 200, crop="fit")
# Result: Image fits within 200x200, may have letterboxing
填充

调整大小以填满边界,裁剪多余部分:

gen.resize(200, 200, crop="fill")
# Result: Exactly 200x200, some content may be cropped
拉伸

调整为精确尺寸(会扭曲纵横比):

gen.resize(200, 200, crop="stretch")
# Result: Exactly 200x200, may be distorted

智能裁剪

自动检测图像中最引人注目的部分:

gen.load("photo.jpg")
gen.crop_smart(200, 200)
gen.save("thumb.jpg")

使用边缘检测查找感兴趣区域。

裁剪位置
# Predefined positions
gen.crop_position(200, 200, position="center")
gen.crop_position(200, 200, position="top")
gen.crop_position(200, 200, position="bottom")
gen.crop_position(200, 200, position="left")
gen.crop_position(200, 200, position="right")
gen.crop_position(200, 200, position="top-left")
gen.crop_position(200, 200, position="top-right")
gen.crop_position(200, 200, position="bottom-left")
gen.crop_position(200, 200, position="bottom-right")

预设

网页预设
gen.apply_preset("web", "./output/")

# Generates:
# - thumb_small.jpg (150x150)
# - thumb_medium.jpg (300x300)
# - thumb_large.jpg (600x600)
社交媒体预设
gen.apply_preset("social", "./output/")

# Generates:
# - instagram_square.jpg (1080x1080)
# - instagram_portrait.jpg (1080x1350)
# - instagram_landscape.jpg (1080x566)
# - twitter.jpg (1200x675)
# - facebook.jpg (1200x630)
# - linkedin.jpg (1200x627)
应用图标预设
gen.apply_preset("icons", "./output/")

# Generates:
# - icon_16.png (16x16)
# - icon_32.png (32x32)
# - icon_48.png (48x48)
# - icon_64.png (64x64)
# - icon_128.png (128x128)
# - icon_256.png (256x256)
# - icon_512.png (512x512)
Favicon 预设
gen.apply_preset("favicon", "./output/")

# Generates:
# - favicon_16.png (16x16)
# - favicon_32.png (32x32)
# - apple_touch.png (180x180)
# - android_192.png (192x192)
# - android_512.png (512x512)

多种尺寸

一次生成多种尺寸的缩略图:

gen.load("photo.jpg")
files = gen.generate_sizes(
    sizes=[(100, 100), (200, 200), (400, 400), (800, 800)],
    output_dir="./thumbs/",
    prefix="product"
)

# Creates:
# - product_100x100.jpg
# - product_200x200.jpg
# - product_400x400.jpg
# - product_800x800.jpg

批量处理

处理整个文件夹:

gen = ThumbnailGenerator()
results = gen.process_folder(
    input_dir="./photos/",
    output_dir="./thumbnails/",
    width=200,
    height=200,
    recursive=True
)

print(f"Processed {len(results)} images")

画质和格式

画质设置
# High quality (larger file)
gen.save("thumb.jpg", quality=95)

# Balanced (default)
gen.save("thumb.jpg", quality=85)

# Web optimized (smaller file)
gen.save("thumb.jpg", quality=70)
输出格式
# JPEG (best for photos)
gen.save("thumb.jpg", format="JPEG")

# PNG (best for graphics/transparency)
gen.save("thumb.png", format="PNG")

# WebP (modern, smaller files)
gen.save("thumb.webp", format="WEBP", quality=80)

输出结构

result = gen.generate_sizes(
    sizes=[(100, 100), (200, 200)],
    output_dir="./thumbs/"
)

# Returns:
[
    {
        "size": "100x100",
        "path": "./thumbs/image_100x100.jpg",
        "file_size": 5432
    },
    {
        "size": "200x200",
        "path": "./thumbs/image_200x200.jpg",
        "file_size": 15234
    }
]

工作流示例

电商产品图片
gen = ThumbnailGenerator()
gen.load("product.jpg")

# Generate product thumbnails
gen.generate_sizes(
    sizes=[
        (80, 80),    # Cart thumbnail
        (200, 200),  # Category listing
        (400, 400),  # Product page
        (800, 800)   # Zoom view
    ],
    output_dir="./product_images/",
    prefix="sku_12345"
)
图库缩略图
gen = ThumbnailGenerator()
results = gen.process_folder(
    input_dir="./gallery/",
    output_dir="./gallery/thumbs/",
    width=300,
    height=200
)
社交媒体批量处理
gen = ThumbnailGenerator()

for image in Path("./photos/").glob("*.jpg"):
    gen.load(str(image))
    gen.apply_preset("social", f"./social/{image.stem}/")

依赖项

  • pillow>=10.0.0
  • numpy>=1.24.0

评论

支持 Markdown