1

私の意図は、flickr の写真を使用して、正方形のグリッドごとに何かを作成することです。私はすべてのコードを書きましたが、任意のサイズのグリッドを作成できるようにパラメーターを調整しようとしたところまですべて機能しました (常に厳密に 4x4 ではなく、代わりに 5x5 グリッドまたはあなたは何を持っていますか)

これは宿題で、できる限りのことをしました。コードを実行した後に画像が表示されない理由がわかりません。私はそれを何度もデバッグし、多くのウェブサイトを見ましたが、わかりません! プログラミングは比較的初心者なので、ご理解ください。アドバイスや手がかりを事前にありがとうございます!

import flickr import Image

def adjust_sizing(image):
    (w, h) = image.size

    #proportionality
    height = ((256*h)/w)
    width = ((w/h) * 256)

    if h > w:
        image = image.resize(( 256 , (height) ))
    elif w > h:
        image = image.resize(( (width) , 256 ))

    image = image.crop(( 0, 0, 256, 256))
    image.save("image.png")
    return image


def photocollage(tag, number, rawnum, canvas):
    url_list = flickr.getphotos(apicode, tag, number)

    #number is number of images needed total
    #rawnumb is number of rows/columns

    #Create list of all coordinates that need to be occupied
    coordinates = set()
    i = 0
    while i < rawnum:
        w = (256 * i)
        j = 0
        while j < rawnum:
            h = (256 * j)
            j += 1
            coordinates.add((w,h))
    i += 1
    coordinates.add((w,h))
    cords = list(coordinates)

    #Create list for all images that need to be matched with a coordinate
    imagelist = []
    for url in url_list:
        image = flickr.openphoto(url)
        image.save("image.png")
        image = adjust_sizing(image)
        imagelist.append(image)

    #paste to canvas image in image list[k] at coordinates cords[k]
    k = 0
    while k <= number:
        canvas.paste(imagelist[k], cords[k])  


    #return final image
    return canvas


 def create_wallpaper(tag, length, output_name):
          collage = Image.new('RGB', (length, length), 'white')
          image = photocollage(tag, (length**2), length, collage)
          image.save(output_name)
          image.show()        


 apicode = '219084039852' #I made this up for now, it's irrelevant

 create_wallpaper("cats", 4, "catpic.png")

かなり長いコード ブロックであることはわかっていますが、本当にイライラしています。サイズ調整機能が機能することは確かです。

このコードを 8 時間も見つめていたせいかもしれませんが、私のエラーを理解していただけると幸いです。私は勉強する必要があります!

4

1 に答える 1

0

あなたはインクリメントしていないkので、whileループは決して終了しません。

forループの代わりにループを使用することもできwhileます。

for k in range(0, number):
    canvas.paste(imagelist[k], cords[k]) 
于 2012-10-16T06:00:06.487 に答える