0

我目前正在编写一个脚本来将图像映射到一个杯子上以用于模拟目的。整个想法是消除对 Photoshop 的依赖,这样我们就可以批量自动化这个过程。然而,由于杯子的形状,图像必须变形才能看起来正确。
我在网上快速浏览了一下,发现了这篇关于这个主题的文章,它确实对学习者不太友好。我已经得到了我认为我需要的所有坐标,我只是不太确定如何输入数据。
我以这种方式布置了我的代码,以使我更容易访问(至少在我看来)和随心所欲地进行修改。但是,我似乎无法弄清楚如何实际使用通过 ImageMagick 的 Shepards 失真。我尝试导入 ImageMagick 和 MagickWand 变体的简短列表,但它们都返回“ImportError: No Module named x”,这是第一个问题。一旦我超过了这一点,我什至不确定我拥有的代码是否真的可以工作。如果有人能指出我正确的方向,我将非常感激。

MUG_SIDE = [[428,615,1221,1609],[".../mug-side.png"],[[0,0,499,44],[2100,0,2098,390],[4200,0,3784,175],[0,4800,606,3911],[2100,4800,2112,4347],[4200,4800,3720,4095]]]
MUG_FRONT = [[574,397,1557,1518],[".../mug-front.png"],[[0,0,37,62],[4200,0,3642,28],[0,4800,30,4744],[4200,4800,3670,4686]]]
MUG_MAIN = [[968,1052,968,1716],[".../mug-main.png"],[[0,0,360,774],[4200,0,2720,0],[0,4800,605,4539],[4200,4800,2860,3494]]]
MUGS = [MUG_SIDE,MUG_FRONT,MUG_MAIN]
i = 0
for item in MUGS:
    coor = []
    for coor_set in item[2]:
        for item in coor_set:
            coor += item
    print coor
    file = cStringIO.StringIO(urllib.urlopen(item[1]).read())
    mug_overlay = Image.open(item[1]).convert("RGBA")
    canvas = Image.new('RGB', (2000,2000), (255,255,255))

    ShepardsDistortion = DistortImageMethod(14)
    MagickWandGenesis()
    wand = NewMagickWand()
    MagickReadImage(wand,file)
    MagickDistortImage(wand,ShepardsDistortion, len(coor), coor, False)
    #RESIZE IMAGE HERE, PRE-SAVING
    MagickWriteImage(wand,location+"mug_warp_temp.png")

    design_warped = Image.open(location+"mug_warp_temp.png").convert("RGBA")
    width = item[0][2] - item[0][0]
    height = item[0][3] - item[0][1]

    design_warped = design_warped.resize( (width,height), Image.ANTIALIAS)
    #replace later

    canvas.paste(design_warped, (item[0][0],item[0][1]), mask=design_warped)
    canvas.paste(mug_overlay, mask=mug_overlay)
    if item[1][-8:] == "main.png":
        print "paste corner art"
    canvas.save(location+"mugtest_"+i+".png")
    i=i+1

不用说,如果有一种更简单的方法可以通过 Python 脚本围绕圆柱体弯曲图像,那也很酷。:p

4

0 回答 0