使用 Python 自动裁剪图像

Posted

技术标签:

【中文标题】使用 Python 自动裁剪图像【英文标题】:Automated Cropping of images using Python 【发布时间】:2017-12-04 15:36:07 【问题描述】:

我正在尝试编写一个脚本来协助我的行业项目,但我无法让此代码正常工作。它应该做的是将目录中的所有图像裁剪它们,每张图像的裁剪都相同,然后导出裁剪的图像。

import sys
import os
from PIL import Image

filepath = "C:\Users\Ellis\Desktop\bunny_test"
os.listdir = filepath

# Loop through all provided arguments
for i in range(1, len(filepath)):
try:
    # Attempt to open an image file
    #filepath = sys.argv[i]
    image = Image.open(filepath)
except IOError, e:
    # Report error, and then skip to the next argument
    print "Problem opening", filepath, ":", e
    continue

# Perform operations on the image here
image = image.crop(261, 435, 153, 343)

# Split our origional filename into name and extension 
(name, extension) = os.path.splittext(filepath)

# Save the image as "(origional_name)_thumb.jpg
image.save("C:\Users\Ellis\Desktop\cropped", name + '_cropped.jpg')

【问题讨论】:

为什么底部三行操作没有在for循环内缩进?这只会裁剪列表中的最后一张图片:/ 在什么情况下它不起作用?另外,请修复您的缩进..如果这实际上是您的代码缩进的方式,那么您有一个 emptyfor 循环 【参考方案1】:

您的源代码中有很多错误。

错误的缩进(虽然我认为在复制粘贴代码时会发生这种情况,因为上面的程序甚至无法通过解析步骤) 缺少文件名循环,请使用os.listdir() image.crop 接受一个元组,而您提供了 4 个参数 用os.path.join 连接路径和文件名(image.save 不接受两个参数) 是splitext,不是splittext

这是应该起作用的东西:

import sys
import os
from PIL import Image

filepath = "C:\Users\Ellis\Desktop\bunny_test"

# Loop through all provided arguments
for filename in os.listdir(filepath):
    if "." not in filename:
        continue
    ending = filename.split(".")[1]
    if ending not in ["jpg", "gif", "png"]:
        continue

    try:
        # Attempt to open an image file
        image = Image.open(os.path.join(filepath, filename))
    except IOError, e:
        # Report error, and then skip to the next argument
        print "Problem opening", filepath, ":", e
        continue

    # Perform operations on the image here
    image = image.crop((261, 435, 153, 343))

    # Split our origional filename into name and extension 
    name, extension = os.path.splitext(filename)

    # Save the image as "(origional_name)_thumb.jpg
    print(name + '_cropped.jpg')
    image.save(os.path.join("C:\Users\Ellis\Desktop\cropped", name + '_cropped.jpg'))

【讨论】:

干杯 hansapast 这很好用!对糟糕的源代码表示歉意,在编码方面仍然是初学者。 @EllisC 很高兴能帮上忙,也很高兴我能推动你的第一个项目。每个人都开始一次。如果您对它感到满意,可以更新/接受答案吗?

以上是关于使用 Python 自动裁剪图像的主要内容,如果未能解决你的问题,请参考以下文章

Python使用matplotlib保存图像时发生自动裁剪丢了部分标签信息解决方案(plt.savefig保存时丢失了部分标签字符)

python - 裁剪手写数字的图像

图像裁剪工具 (Python)

使用 Imagemagick 从图像中自动裁剪文本(签名)并更改背景颜色

扫描图像后自动裁剪

使用Python从OpenCV中扫描裁剪矩形照片