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.

hacheur.py 6.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282
  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 = 1
  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]/8)*8
  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. proportions = [\
  93. (2,8),(2,16),(2,32),\
  94. (4,4),(4,8),(4,16),(4,32),(4,64),\
  95. (8,8),(8,16),(8,32),\
  96. (16,2),(16,4),(16,8),(16,16),(16,32),\
  97. (32,8),(32,16),(32,32),\
  98. (64,4),(64,8),(64,16)]
  99. '''
  100. (128,2),(128,4),(128,8),\
  101. (256,1),(256,2),(256,4),\
  102. (512,1),(512,2),\
  103. (1024,1),(1024,2),\
  104. (2048,1)]
  105. '''
  106. seq.proportions = proportions
  107. #proportions = seq.proportions[]
  108. choix_rnd = random.randint(0, len(proportions)-1)
  109. #choix_rnd = random.randint(0, len(proportions)-1)
  110. seq.choix.append(choix_rnd)
  111. largeur = proportions[choix_rnd][0]
  112. # positionnement de la copie, aleatoirement, entre 0 et la largeur totale de l'image
  113. randomCopyPosi = random.randint(0, (im1.size[0]-largeur-32))
  114. #randomCopyPosi = seq.randomCopyPosi
  115. seq.randomCopyPosi.append(randomCopyPosi)
  116. i+=1
  117. # tirage au sort
  118. #seq["choix"].append(choix_rnd)
  119. # assignation des valeurs (paires) finales choisies
  120. largeur = proportions[choix_rnd][0]
  121. repeat = proportions[choix_rnd][1]
  122. #seq["randomCopyPosi"].append(randomCopyPosi)
  123. cx1 = randomCopyPosi
  124. cx2 = randomCopyPosi + largeur
  125. #print "im3 = im2.crop : "+str(im3.size)
  126. #draw = ImageDraw.Draw(im4)
  127. loop = 0
  128. #pixelSizeList = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,4,4,8]
  129. pixelSizeList = [1,8,16,32]
  130. pixelSizeIndex = random.randint(0,len(pixelSizeList)-1)
  131. pixelSize = pixelSizeList[pixelSizeIndex]
  132. #print " pixelSize = "+str(pixelSize)
  133. cropfinal = [largeur,bas-haut]
  134. hauteur = bas-haut
  135. '''
  136. haut gauche(0,0).
  137. haut droit (largeur-1 , 0).
  138. bas gauche (0 , hauteur-1).
  139. bas droit (largeur-1, hauteur-1)
  140. '''
  141. print
  142. print "-------------------------------------------"
  143. print "largeur="+str(largeur)
  144. print "hauteur="+str(hauteur)
  145. print pixelSize
  146. if largeur % pixelSize != 0:
  147. croop = int(largeur / pixelSize)
  148. largeur = (croop + 1 ) * pixelSize
  149. print "croop="+str(croop)
  150. print "pixelSize="+str(pixelSize)
  151. print "largeur="+str(largeur)
  152. if hauteur % pixelSize != 0:
  153. croop2 = int(hauteur / pixelSize)
  154. hauteur = (croop2 + 1 ) * pixelSize
  155. print "hauteur="+str(hauteur)
  156. # decoupage du sample :
  157. # sample aux dimensions de l'effet
  158. im5 = im2.crop((randomCopyPosi,haut,randomCopyPosi+largeur,haut+hauteur))
  159. ''' PIXELISATION '''
  160. if pixelSize > 1 :
  161. boutImage = im5.resize((im5.size[0]/pixelSize, im5.size[1]/pixelSize), Image.NEAREST)
  162. boutImage = im5.resize((im5.size[0]*pixelSize, im5.size[1]*pixelSize), Image.NEAREST)
  163. else :
  164. boutImage = im5
  165. # le sample final (bonnes dimensions)
  166. im3 = boutImage.crop((0,0,cropfinal[0],cropfinal[1]))
  167. print "im5.size="+str(im5.size)
  168. print "im3.size1="+str(im3.size)
  169. ''' COLLAGE DU SAMPLE
  170. '''
  171. while loop<repeat:
  172. px1 = n
  173. px2 = n + cropfinal[0]
  174. #lignes colorées de 1 pix
  175. #draw = ImageDraw.Draw(boutImage)
  176. #draw.line((0,0,0,4), fill="rgb(128,128,128)")
  177. draw = ImageDraw.Draw(im3)
  178. draw.line((0, 0, largeur-1, 0), fill="rgb(255,255,255)")
  179. draw.line((largeur-1, 0, largeur-1, bas-haut), fill="rgb(255,255,255)")
  180. print "px2-px1="+str(px2-px1)
  181. print "bas-haut="+str(bas-haut)
  182. print "im4.size="+str(im4.size)
  183. print
  184. im4.paste(im3, (px1, haut, px2, bas))
  185. n = n + largeur
  186. loop = loop + 1
  187. print
  188. ''' OPTIONS '''
  189. def TrancheHorizontale() :
  190. # tirage au hasard de la bande copiee
  191. pos = random.randint(0, im1.size[1]-im1.size[1]/20)
  192. # copiage
  193. im5 = im2.crop((0,pos,im1.size[0],pos+im1.size[1]/20))
  194. # le soulignage en blanc
  195. draw = ImageDraw.Draw(im5)
  196. draw.line((0, im5.size[1]-1, im5.size[0], im5.size[1]-1), fill="black")
  197. draw.line((0, 1, im5.size[0], 1), fill="black")
  198. # collage
  199. im4.paste(im5, (0,pos,im1.size[0],pos+im1.size[1]/20))
  200. # HAACHEUUR
  201. for j in range(len(randomCoupeHauteur)-1):
  202. Hacheur(randomCoupeHauteur[j], randomCoupeHauteur[j+1])
  203. ''' SAUVEGARDE '''
  204. # CTRL + S
  205. #chemin du script : scriptpy = sys.argv[0]
  206. #chemin de l'image : str(sys.argv[1])
  207. scriptpy = str(sys.argv[1])
  208. script = scriptpy[:-3]
  209. #n = "%05d" % i
  210. n = "1.1"
  211. im4.save(script+"."+n+"_"+strftime("%Y%m%d-%Hh%Mm%Ss", gmtime())+".png",'PNG', quality=100)
  212. pickle.dump(seq, open(script+"."+n+"_"+strftime("%Y%m%d-%Hh%Mm%Ss", gmtime())+".pickle","w"))
  213. #print script+"."+str(i)+"_"+strftime("%Y%m%d-%Hh%Mm%Ss", gmtime())+".jpg"
  214. #millis = int(round(time.time() * 1000))
  215. #print "millis-secondes : "+str(millis)