图钉画中一个图钉代表一个像素,所以关键在于像素渣化,降低分辨率,图钉的色彩有限,还需要降低图片的色彩数量,统计各种色彩的数量及位置。
以上都可以用Pillow完成,Pillow是Python中用来兼容或者代替PIL的图像处理库。
pipinstallpillow以下图为例:
首先降分辨率,大概1万个图钉可以达到较好的外观效果,以此可以确定图片的长宽:
>>>fromPILimportImage>>>img=Image.open('20180707.jpg')>>>printimg.size(512,512)>>>img=img.resize((img.width/5,img.height/5))>>>img.save('target.jpg')效果如下:
渣化很明显了,放大后可以看到一个个的像素格子。
转成32色:
>>>img=Image.open('e:/target.jpg')>>>img=img.convert('P',colors=32,palette=1)>>>img.save('e:/32_target.jpg')统计色彩数量:
>>>img=Image.open('e:/32_target.png')>>>printimg.getcolors()[(332,0),(416,1),(253,2),(359,3),(292,4),(335,5),(435,6),(231,7),(404,8),(218,9),(377,10),(268,11),(467,12),(303,13),(256,14),(255,15),(455,16),(391,17),(241,18),(368,19),(244,20),(470,21),(266,22),(215,23),(397,24),(276,25),(285,26),(308,27),(352,28),(400,29),(295,30),(240,31)]可以看到从0号-31号色的数量,
不清楚颜色的话,可以转化成RGB模式:
>>>img=img.convert('RGB')>>>printimg.getcolors()[(253,(240,173,157)),(292,(236,151,129))...]就可以根据RGB去对比颜色买图钉了。
确定每个位置的颜色:
>>>px=img.load()>>>forxinxrange(102):foryinxrange(102):printpx[x,y]然后就要对比颜色买图钉,买相框,买纸板,买图纸,标记位置,打印等等。
考虑到以上一切,我还是决定某宝了。学以致用难啊。
一万多个图钉,断断续续做了大概一个月,做完的感想是绝对不要做第二次,所以要做的同志请慎重。