【发布时间】:2019-01-26 03:35:18
【问题描述】:
为了工作,我必须调整数百张图像的大小以适应 830x1000 像素的画布,同时保持纵横比(因此图像不会被拉伸和扭曲)。我使用 PIL 编写了一个 python 脚本。这适用于大多数图像,但运行脚本后有些图像大小会失真。
我知道问题出在案例陈述中,但我不确定问题出在哪里。
def resize():
openFiles = glob.glob('*.jpg')
for files in openFiles:
inFile = Image.open(files)
fileName = os.path.splitext(files)[0] # gets filename
outFile = fileName + ".jpg"
print (fileName)
print ("Original size ",inFile.size)
xDim = inFile.size[0]
yDim = inFile.size[1]
newSize = aspectRatio(xDim, yDim)
inFile = inFile.resize((int(newSize[0]),int(newSize[1])),Image.ANTIALIAS)
inFile.save(outFile)
print ("New Size ",inFile.size, "\n")
return None
def aspectRatio(xDim, yDim):
Ratio = float(xDim/yDim)
xDelta = 830 - xDim
yDelta = 1000 - yDim
Oddball = [.99, .98, .97, .96, .95, .94, .93, .92, .91, .90, .89, .88, .87, .86, .85, .84, .83, .82, .81, .80]
New1 = [xDim+xDelta, yDim+xDelta*Ratio]
New2 = [xDim+yDelta*Ratio, yDim+yDelta]
if xDim == 830 and yDim == 1000:
print('No Change Needed')
return(xDim, yDim)
if xDim == yDim:
xDim = 830
yDim = 830
return(xDim, yDim)
else:
if New1[0] == 830 and New1[1] <= 1000:
xDim = float(New1[0])
yDim = float(New1[1])
return(xDim, yDim)
elif New1[0] <= 830 and New1[1] <= 1000:
xDim = float(New1[0])
yDim = float(New1[1])
return(xDim, yDim)
elif New2[0] <= 830 and New2[1] ==1000:
xDim = float(New2[0])
yDim = float(New2[1])
return(xDim, yDim)
elif .83 < Ratio < 1:
i = 0
while xDim >= 830 and yDim >= 1000:
xDim = float(New2[0] * Oddball[i])
yDim = float(New2[1] * Oddball[i])
i =+ 1
return(xDim,yDim)
else:
print('Manual Change Required')
return(xDim, yDim)
以下图片尺寸是目前给我带来问题的尺寸。
原始尺寸(220、643) 新尺寸(830、851)
原始尺寸(440、617) 新尺寸(830、895)
原始尺寸(597、480) 新尺寸 (830, 769)
原始尺寸(308、631) 新尺寸(830、885)
原始尺寸(450、625) 新尺寸(830、898)
原始尺寸(398、631) 新尺寸(830、903)
原始尺寸(220、643) 新尺寸(830、851)
原始尺寸(240、643) 新尺寸(830、863)
【问题讨论】:
标签: python python-imaging-library