使用 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保存时丢失了部分标签字符)