Ce projet essai, en partant d'une IMAGESOURCE de : - appliquer des effets à l'image - la redimmensionner - changer son mode de couleur - la HAACHEER...
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

haacheuur.py 7.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271
  1. #!/usr/bin/python
  2. # coding: utf-8
  3. # haacheuur 0.24
  4. # port industriel de port la nouvelle - couleur - 60cm*30cm
  5. # image source : pln.jpg
  6. # image obtenue : pln..20150910-11h59m53s.jpg
  7. import sys
  8. import Image
  9. import random
  10. import os
  11. import ImageDraw
  12. import ImageFont
  13. import ImageFilter
  14. from time import gmtime, strftime
  15. import time
  16. # modifs du 30/10/2013
  17. import ImageEnhance
  18. '''
  19. multiples 1024 : 1024 2048 3072 4096 5120 6144 7168 8192 9216 10240
  20. multiples 768 : 768 1536 2304 3072 3840 4608 5376 6144 6912 7680 8448 9216 9984 10752
  21. '''
  22. #rapport d'allongement de la nouvelle image par rapport à la largeur de l'image originale
  23. allongement = 2
  24. #ouvertrure de l'image source et conversion en mode couleur 1bit
  25. #im1 = Image.open(str(sys.argv[1])).convert('1')
  26. #im1 = Image.open(str(sys.argv[1])).convert('L')
  27. im1 = Image.open(str(sys.argv[1]))
  28. im2 = im1.copy()
  29. im4 = Image.new("RGBA",(im1.size[0]*allongement, im1.size[1]))
  30. im5 = Image.new("RGBA",(im1.size[0]*allongement, im1.size[1]))
  31. boutImage = Image.new("RGBA",(im1.size[0], im1.size[1]))
  32. Larg = im1.size[0]
  33. Haut = im1.size[1]
  34. import pickle
  35. loadfile = False
  36. class Sequence:
  37. def __init__(s):
  38. randomCoupeHauteur = []
  39. s.randomCopyPosi =[]
  40. s.proportions=[]
  41. s.choix=[]
  42. s.sizeOutput=None
  43. s.sizeInput=None
  44. """
  45. seq = dict()
  46. seq["randomCoupeHauteur"] = []
  47. seq["randomCopyPosi"] = []
  48. seq["proportions"] = []
  49. seq["choix"] = []
  50. seq["sizeOutput"]= im4.size
  51. seq["sizeInput"] = im1.size
  52. """
  53. if loadfile:
  54. seq=pickle.load(open("test.pickle"))
  55. else :
  56. seq=Sequence()
  57. '''
  58. for i in range(1):
  59. '''
  60. # constitution de la liste des tranches horizontales
  61. # genre comme si qu'on avait un 16 pistes :)
  62. # nombre aleatoire compris dans les limites de l'image
  63. def randHaut():
  64. return random.randint(0, im1.size[1]/32)*32
  65. if loadfile:
  66. randomCoupeHauteur = seq.randomCoupeHauteur
  67. else:
  68. randomCoupeHauteur = [0, \
  69. randHaut(),randHaut(),randHaut(),randHaut(), \
  70. randHaut(),randHaut(),randHaut(),randHaut(), \
  71. randHaut(),randHaut(),randHaut(),randHaut(), \
  72. randHaut(),randHaut(),randHaut(),randHaut(), \
  73. randHaut(),randHaut(),randHaut(),randHaut(), \
  74. randHaut(),randHaut(),randHaut(),randHaut(), \
  75. randHaut(),randHaut(),randHaut(),randHaut(), \
  76. randHaut(),randHaut(),randHaut(),randHaut(), \
  77. im1.size[1]]
  78. # rangement des valeurs des plus petites au plus grandes
  79. randomCoupeHauteur.sort()
  80. seq.randomCoupeHauteur = randomCoupeHauteur
  81. # les hachures
  82. def Hacheur(haut, bas) :
  83. n=0
  84. i=0
  85. #!!!!!!!!!!
  86. while n<im4.size[0] :
  87. if loadfile:
  88. proportions = seq.proportions
  89. choix_rnd = seq.choix[i]
  90. randomCopyPosi = seq.randomCopyPosi[i]
  91. else:
  92. '''
  93. 8 16 24 32 40 48 56 64 72 80 88 96 104 112 120 128 136 144 152 160 168
  94. '''
  95. #proportions = [(160,6),(120,4),(120,8),(80,16),(60,16),(20,32),(8,24),(8,16),(5,64),(3,24),(2,24),(1,256),(1,128),(1,64),(1,32),(1,16),(1,8)]
  96. #proportions = [(2560,1),(1280,2),(1280,1),(640,2),(640,1),(320,4),(320,2),(160,6),(160,2),(120,4),(120,8),(120,1),(80,16),(80,4),(64,16),(64,8),(64,1),(24,32),(24,16),(16,32),(16,16),(16,8),(16,2),(16,1),(8,24),(8,16),(8,8),(8,4),(8,2),(8,1)]
  97. #proportions = [(2560,1),(1280,2),(1280,1),(640,2),(640,1),(320,4),(320,2),(160,6),(160,2),(120,4),(120,8),(120,1),(80,16),(80,4),(64,16),(64,8),(64,1),(32,1),(32,2),(32,4),(32,8),(32,32),(16,1),(16,2),(16,4),(16,16),(16,32)]
  98. #proportions = [(2560,1),(1280,2),(1280,1),(640,2),(640,1),(320,4),(320,2),(160,6),(160,2),(120,4),(120,8),(120,1),(80,16),(80,4),(64,16),(64,8),(64,1),(32,1),(32,2),(32,4),(32,8),(32,32),(16,1),(16,2),(16,4),(16,16),(16,32)]
  99. proportions = [ (16,2),(16,4),(16,8),(16,16),(16,32),\
  100. (32,8),(32,16),(32,32),\
  101. (64,4),(64,8),(64,16),\
  102. (128,2),(128,4),(128,8),\
  103. (256,1),(256,2),(256,4),\
  104. (512,1),(512,2),\
  105. (1024,1),(1024,2),\
  106. (2048,1)]
  107. '''
  108. proportions = [ (768,2),\
  109. (512,4),\
  110. (256,8),\
  111. (128,4),(128,16),\
  112. (64,4),(64,8),(64,16),\
  113. (32,8),(32,16),(32,32),(32,32),(32,64),(32,128),\
  114. (16,1),(16,4),(16,16),(16,64)]
  115. '''
  116. '''
  117. 1,2,4,8,16,32,64,128,256,512,1024
  118. '''
  119. seq.proportions = proportions
  120. #proportions = seq.proportions[]
  121. choix_rnd = random.randint(0, len(proportions)-1)
  122. #choix_rnd = random.randint(0, len(proportions)-1)
  123. seq.choix.append(choix_rnd)
  124. largeur = proportions[choix_rnd][0]
  125. # positionnement de la copie, aleatoirement, entre 0 et la largeur totale de l'image
  126. randomCopyPosi = random.randint(0, (im1.size[0]-largeur))
  127. #randomCopyPosi = seq.randomCopyPosi
  128. seq.randomCopyPosi.append(randomCopyPosi)
  129. i+=1
  130. # tirage au sort
  131. #seq["choix"].append(choix_rnd)
  132. # assignation des valeurs (paires) finales choisies
  133. largeur = proportions[choix_rnd][0]
  134. repeat = proportions[choix_rnd][1]
  135. #seq["randomCopyPosi"].append(randomCopyPosi)
  136. cx1 = randomCopyPosi
  137. cx2 = randomCopyPosi + largeur
  138. #print "im3 = im2.crop : "+str(im3.size)
  139. draw = ImageDraw.Draw(im4)
  140. loop = 0
  141. #pixelSizeList = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,4,4,8]
  142. pixelSizeList = [1,1,1,1,1,1,1,1,1,1,2,2,4,8,16]
  143. pixelSizeIndex = random.randint(0,len(pixelSizeList)-1)
  144. pixelSize = pixelSizeList[pixelSizeIndex]
  145. #print " pixelSize = "+str(pixelSize)
  146. cropfinal = [largeur,bas-haut]
  147. hauteur = bas-haut
  148. '''
  149. haut gauche(0,0).
  150. haut droit (largeur-1 , 0).
  151. bas gauche (0 , hauteur-1).
  152. bas droit (largeur-1, hauteur-1)
  153. '''
  154. if largeur % pixelSize != 0:
  155. croop = largeur / pixelSize
  156. largeur = (int(croop) + 1 ) * pixelSize
  157. if hauteur % pixelSize != 0:
  158. croop2 = hauteur / pixelSize
  159. hauteur = (int(croop2) + 1 ) * pixelSize
  160. # decoupage du sample
  161. im5 = im2.crop((randomCopyPosi,haut,randomCopyPosi+largeur,haut+hauteur))
  162. im3 = im2.crop((cx1,haut,cx2,bas))
  163. ''' COLLAGE DU SAMPLE
  164. '''
  165. #boutImage = im3
  166. #im3 = Image.new("RGBA",(im1.size[0], im1.size[1]))
  167. ''' PIXELISATION '''
  168. if pixelSize > 1 :
  169. im5 = im5.resize((im3.size[0]/pixelSize, im3.size[1]/pixelSize), Image.NEAREST)
  170. im5 = im5.resize((im3.size[0]*pixelSize, im3.size[1]*pixelSize), Image.NEAREST)
  171. im3 = im5.crop((0,0,cropfinal[0],cropfinal[1]))
  172. while loop<repeat:
  173. px1 = n
  174. px2 = n + largeur
  175. #lignes colorées de 1 pix
  176. #draw = ImageDraw.Draw(boutImage)
  177. #draw.line((0,0,0,4), fill="rgb(128,128,128)")
  178. draw = ImageDraw.Draw(im3)
  179. draw.line((0, 0, largeur-1, 0), fill="rgb(255,255,255)")
  180. draw.line((largeur-1, 0, largeur-1, bas-haut), fill="rgb(255,255,255)")
  181. im4.paste(im3, (px1, haut, px2, bas))
  182. n = n + largeur
  183. loop = loop + 1
  184. ''' OPTIONS '''
  185. def TrancheHorizontale() :
  186. # tirage au hasard de la bande copiee
  187. pos = random.randint(0, im1.size[1]-im1.size[1]/20)
  188. # copiage
  189. im5 = im2.crop((0,pos,im1.size[0],pos+im1.size[1]/20))
  190. # le soulignage en blanc
  191. draw = ImageDraw.Draw(im5)
  192. draw.line((0, im5.size[1]-1, im5.size[0], im5.size[1]-1), fill="black")
  193. draw.line((0, 1, im5.size[0], 1), fill="black")
  194. # collage
  195. im4.paste(im5, (0,pos,im1.size[0],pos+im1.size[1]/20))
  196. # HAACHEUUR
  197. for j in range(len(randomCoupeHauteur)-1):
  198. Hacheur(randomCoupeHauteur[j], randomCoupeHauteur[j+1])
  199. ''' SAUVEGARDE '''
  200. # CTRL + S
  201. #chemin du script : scriptpy = sys.argv[0]
  202. #chemin de l'image : str(sys.argv[1])
  203. scriptpy = str(sys.argv[1])
  204. script = scriptpy[:-3]
  205. #n = "%05d" % i
  206. n = "1.1"
  207. im4.save(script+"."+n+"_"+strftime("%Y%m%d-%Hh%Mm%Ss", gmtime())+".png",'PNG', quality=100)
  208. pickle.dump(seq, open(script+"."+n+"_"+strftime("%Y%m%d-%Hh%Mm%Ss", gmtime())+".pickle","w"))
  209. #print script+"."+str(i)+"_"+strftime("%Y%m%d-%Hh%Mm%Ss", gmtime())+".jpg"
  210. #millis = int(round(time.time() * 1000))
  211. #print "millis-secondes : "+str(millis)