我目前正在编写一个脚本,将图像映射到一个杯子上,以便进行模拟。
整个想法是消除对Photoshop的依赖,因此我们可以批量自动化这个过程。但是,由于杯子的形状,图像必须翘曲才能看起来正确
我在网上快速浏览了一下,然后我找到了关于这个主题的this article,这对学习者来说真的不太友好。我已经得到了我需要的所有坐标,这是我需要的,我只是不太确定如何输入数据。
我以这种方式布置了我的代码,使我更容易访问(至少在我的脑海中)并随心所欲地修改。但是,我似乎无法弄清楚如何通过ImageMagick实际使用 Shepards Distortion。我试图导入一个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