5

ここに私のジレンマがあります...フォルダーからすべての.pngファイルを読み取り、それらをリストで指定したさまざまな寸法に変換するスクリプトを作成しています。1つの画像を処理した後に終了することを除いて、すべてが正常に機能します。

これが私のコードです:

sizeFormats = ["1024x1024", "114x114", "40x40", "58x58", "60x60", "640x1136", "640x960"]

def resizeImages():

widthList = []
heightList = []
resizedHeight = 0
resizedWidth = 0

#targetPath is the path to the folder that contains the images
folderToResizeContents = os.listdir(targetPath)

#This splits the dimensions into 2 separate lists for height and width (ex: 640x960 adds
#640 to widthList and 960 to heightList
for index in sizeFormats:
    widthList.append(index.split("x")[0])
    heightList.append(index.split("x")[1])

#for every image in the folder, apply the dimensions from the populated lists and save
for image,w,h in zip(folderToResizeContents,widthList,heightList):
    resizedWidth = int(w)
    resizedHeight = int(h)
    sourceFilePath = os.path.join(targetPath,image)
    imageFileToConvert = Image.open(sourceFilePath)
    outputFile = imageFileToConvert.resize((resizedWidth,resizedHeight), Image.ANTIALIAS)
    outputFile.save(sourceFilePath)

ターゲット フォルダーに image1.png、image2.png という名前の 2 つの画像が含まれている場合は、次のように返されます (視覚化のために、アンダースコアの後に画像に適用される寸法を追加します)。

image1_1024x1024.png, .............., image1_640x690.png (image1 の 7 つの異なるサイズをすべて返します)

image_2 に同じ変換を適用する必要がある場合は、そこで停止します。これは、widthList と heightList の長さが 7 要素しかないため、image2 が順番を取得する前にループを終了するためです。targetPath のすべての画像に対して widthList と heightList をループする方法はありますか?

4

3 に答える 3

0

for ループをネストすると、7 つの次元すべてを各画像に適用できます

for image in folderToResizeContents:
    for w,h in zip(widthList,heightList):

最初の for ループは、画像ごとに発生することを保証しますが、2 番目の for ループは、画像が各サイズにサイズ変更されることを保証します。

于 2013-06-25T19:09:31.267 に答える