Browse code

pixelisation v3 : hac.py

rep authored on 10/12/2015 22:44:14
Showing 3 changed files
1 1
new file mode 100644
... ...
@@ -0,0 +1,16 @@
0
+#!/bin/sh
1
+
2
+rm $0
3
+
4
+python "hac.py"
5
+
6
+echo "
7
+
8
+------------------
9
+(program exited with code: $?)" 		
10
+
11
+
12
+echo "Press return to continue"
13
+#to be more compatible with shells like dash
14
+dummy_var=""
15
+read dummy_var
0 16
new file mode 100644
... ...
@@ -0,0 +1,111 @@
0
+#!/usr/bin/python
1
+# coding: utf-8
2
+
3
+import sys
4
+import Image
5
+import random
6
+import os
7
+import ImageDraw
8
+import ImageFont
9
+import ImageFilter
10
+from time import gmtime, strftime
11
+import time
12
+import ImageEnhance
13
+import pickle
14
+
15
+allongement = 2
16
+im1 = Image.open(str(sys.argv[1]))
17
+im2 = Image.new("RGBA",(im1.size[0], im1.size[1]))
18
+im3 = Image.new("RGBA",(im1.size[0], im1.size[1]))
19
+im4 = Image.new("RGBA",(im1.size[0], im1.size[1]))
20
+im5 = Image.new("RGBA",(im1.size[0], im1.size[1]))
21
+im6 = Image.new("RGBA",(im1.size[0]*allongement, im1.size[1]))
22
+
23
+Larg = im1.size[0]
24
+Haut = im1.size[1]
25
+loadfile = False
26
+	
27
+def randHaut():
28
+	return random.randint(0, im1.size[1]/8)*8
29
+
30
+
31
+randomCoupeHauteur = [0, \
32
+randHaut(),randHaut(),randHaut(),randHaut(), \
33
+randHaut(),randHaut(),randHaut(),randHaut(), \
34
+randHaut(),randHaut(),randHaut(),randHaut(), \
35
+randHaut(),randHaut(),randHaut(),randHaut(), \
36
+randHaut(),randHaut(),randHaut(),randHaut(), \
37
+randHaut(),randHaut(),randHaut(),randHaut(), \
38
+randHaut(),randHaut(),randHaut(),randHaut(), \
39
+randHaut(),randHaut(),randHaut(),randHaut(), \
40
+im1.size[1]]
41
+randomCoupeHauteur.sort()
42
+	
43
+
44
+def Hacheur(haut, bas) :
45
+	n = 0
46
+	i = 0
47
+	while n<im6.size[0] :
48
+		i+=1
49
+		loop = 0
50
+
51
+		proportions = [\
52
+		(2,8),(2,16),(2,32),\
53
+		(4,4),(4,8),(4,16),(4,32),(4,64),\
54
+		(8,8),(8,16),(8,32),\
55
+		(16,2),(16,4),(16,8),(16,16),(16,32),\
56
+		(32,8),(32,16),(32,32),\
57
+		(64,4),(64,8),(64,16),\
58
+		(128,2),(128,4),(128,8),\
59
+		(256,1),(256,2),(256,4),\
60
+		(512,1),(512,2),\
61
+		(1024,1),(1024,2),\
62
+		(2048,1)]
63
+		
64
+		choix_rnd = random.randint(0, len(proportions)-1)
65
+		largeur = proportions[choix_rnd][0]
66
+		randomCopyPosi = random.randint(0, (im1.size[0]-largeur))
67
+		largeur = proportions[choix_rnd][0]			
68
+		repeat = proportions[choix_rnd][1]
69
+		
70
+		pixelSizeList = [1,1,2,4,8,16,32,64,128]
71
+		pixelSizeIndex = random.randint(0,len(pixelSizeList)-1)
72
+		pixelSize = pixelSizeList[pixelSizeIndex]
73
+		
74
+		hauteur = bas-haut
75
+		cropfinal = [largeur,hauteur]
76
+		
77
+		if largeur % pixelSize != 0:
78
+			croop = int(largeur / pixelSize)
79
+			largeur = (croop + 1 ) * pixelSize
80
+			
81
+		if  hauteur % pixelSize != 0:
82
+			croop2 = int(hauteur / pixelSize)
83
+			hauteur = (croop2 + 1 ) * pixelSize
84
+		
85
+		im2 = im1.crop((randomCopyPosi,haut,randomCopyPosi+largeur,haut+hauteur))
86
+		im3 = im2.resize((im2.size[0]/pixelSize, im2.size[1]/pixelSize), Image.NEAREST)
87
+		im4 = im3.resize((im3.size[0]*pixelSize, im3.size[1]*pixelSize), Image.NEAREST)
88
+		im5 = im4.crop((0,0,cropfinal[0],cropfinal[1]))
89
+		
90
+		while loop<repeat:
91
+			px1 = n
92
+			px2 = n + cropfinal[0]
93
+			
94
+			draw = ImageDraw.Draw(im5)
95
+			draw.line((0, 0, 4, 0), fill="rgb(255,255,255)")
96
+			draw.line((0, 0, 0, 4), fill="rgb(255,255,255)")
97
+			
98
+			im6.paste(im5, (px1, haut, px2, bas))
99
+			
100
+			n = n + cropfinal[0]
101
+			loop = loop + 1
102
+
103
+
104
+for j in range(len(randomCoupeHauteur)-1):
105
+	Hacheur(randomCoupeHauteur[j], randomCoupeHauteur[j+1])
106
+
107
+scriptpy = str(sys.argv[1])
108
+script = scriptpy[:-3]
109
+n = "1.1"
110
+im6.save(script+"."+n+"_"+strftime("%Y%m%d-%Hh%Mm%Ss", gmtime())+".png",'PNG', quality=100)
... ...
@@ -27,7 +27,7 @@ multiples 768 :	768 1536 2304 3072 3840 4608 5376 	6144 6912 7680 8448 9216 9984
27 27
 
28 28
 
29 29
 #rapport d'allongement de la nouvelle image par rapport à la largeur de l'image originale
30
-allongement = 2
30
+allongement = 1
31 31
 
32 32
 #ouvertrure de l'image source et conversion en mode couleur 1bit
33 33
 #im1 = Image.open(str(sys.argv[1])).convert('1')
... ...
@@ -79,7 +79,7 @@ for i in range(1):
79 79
 # genre comme si qu'on avait un 16 pistes :)
80 80
 # nombre aleatoire compris dans les limites de l'image
81 81
 def randHaut():
82
-	return random.randint(0, im1.size[1]/32)*32
82
+	return random.randint(0, im1.size[1]/8)*8
83 83
 
84 84
 if loadfile:
85 85
 	randomCoupeHauteur = seq.randomCoupeHauteur
... ...
@@ -112,35 +112,25 @@ def Hacheur(haut, bas) :
112 112
 			choix_rnd = seq.choix[i]
113 113
 			randomCopyPosi = seq.randomCopyPosi[i]
114 114
 		else:
115
-			'''
116
-			8 16 24 32 40 48 56 64 72 80 88 96 104 112 120 128 136 144 152 160 168
117
-			'''
118
-			#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)]
119
-			#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)]
120
-			#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)]
121
-			#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)]
122
-			proportions = [	(16,2),(16,4),(16,8),(16,16),(16,32),\
123
-							(32,8),(32,16),(32,32),\
124
-							(64,4),(64,8),(64,16),\
125
-							(128,2),(128,4),(128,8),\
126
-							(256,1),(256,2),(256,4),\
127
-							(512,1),(512,2),\
128
-							(1024,1),(1024,2),\
129
-							(2048,1)]
130 115
 			
131 116
 			
132
-			'''
133
-			proportions = [	(768,2),\
134
-							(512,4),\
135
-							(256,8),\
136
-							(128,4),(128,16),\
137
-							(64,4),(64,8),(64,16),\
138
-							(32,8),(32,16),(32,32),(32,32),(32,64),(32,128),\
139
-							(16,1),(16,4),(16,16),(16,64)]
140
-			'''
141
-							
142
-			'''
143
-			1,2,4,8,16,32,64,128,256,512,1024
117
+			
118
+			
119
+			
120
+			
121
+			proportions = [\
122
+			(2,8),(2,16),(2,32),\
123
+			(4,4),(4,8),(4,16),(4,32),(4,64),\
124
+			(8,8),(8,16),(8,32),\
125
+			(16,2),(16,4),(16,8),(16,16),(16,32),\
126
+			(32,8),(32,16),(32,32),\
127
+			(64,4),(64,8),(64,16)]
128
+			'''			
129
+			(128,2),(128,4),(128,8),\
130
+			(256,1),(256,2),(256,4),\
131
+			(512,1),(512,2),\
132
+			(1024,1),(1024,2),\
133
+			(2048,1)]
144 134
 			'''
145 135
 			
146 136
 			seq.proportions = proportions
... ...
@@ -152,7 +142,7 @@ def Hacheur(haut, bas) :
152 152
 			largeur = proportions[choix_rnd][0]
153 153
 
154 154
 			# positionnement de la copie, aleatoirement, entre 0 et la largeur totale de l'image 
155
-			randomCopyPosi = random.randint(0, (im1.size[0]-largeur))
155
+			randomCopyPosi = random.randint(0, (im1.size[0]-largeur-32))
156 156
 			#randomCopyPosi = seq.randomCopyPosi
157 157
 			seq.randomCopyPosi.append(randomCopyPosi)
158 158
 		
... ...
@@ -172,12 +162,12 @@ def Hacheur(haut, bas) :
172 172
 		cx2 = randomCopyPosi + largeur
173 173
 		#print "im3 = im2.crop : "+str(im3.size)
174 174
 			
175
-		draw = ImageDraw.Draw(im4)
175
+		#draw = ImageDraw.Draw(im4)
176 176
 				
177 177
 		loop = 0
178 178
 		
179 179
 		#pixelSizeList = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,4,4,8]
180
-		pixelSizeList = [1,1,1,1,1,1,1,1,1,1,2,2,4,8,16]
180
+		pixelSizeList = [1,8,16,32]
181 181
 		pixelSizeIndex = random.randint(0,len(pixelSizeList)-1)
182 182
 		pixelSize = pixelSizeList[pixelSizeIndex]
183 183
 		
... ...
@@ -194,34 +184,49 @@ def Hacheur(haut, bas) :
194 194
 		bas droit (largeur-1, hauteur-1)
195 195
 		'''
196 196
 		
197
+		print
198
+		print "-------------------------------------------"
199
+		print "largeur="+str(largeur)
200
+		print "hauteur="+str(hauteur)
201
+		print pixelSize
202
+		
197 203
 		if largeur % pixelSize != 0:
198
-			croop = largeur / pixelSize
199
-			largeur = (int(croop) + 1 ) * pixelSize
204
+			croop = int(largeur / pixelSize)
205
+			largeur = (croop + 1 ) * pixelSize
206
+			print "croop="+str(croop)
207
+			print "pixelSize="+str(pixelSize)
208
+			print "largeur="+str(largeur)
200 209
 			
201 210
 		if  hauteur % pixelSize != 0:
202
-			croop2 = hauteur / pixelSize
203
-			hauteur = (int(croop2) + 1 ) * pixelSize
211
+			croop2 = int(hauteur / pixelSize)
212
+			hauteur = (croop2 + 1 ) * pixelSize
213
+			print "hauteur="+str(hauteur)
204 214
 		
205
-		# decoupage du sample
206
-		im5 = im2.crop((randomCopyPosi,haut,randomCopyPosi+largeur,haut+hauteur))
207
-		im3 = im2.crop((cx1,haut,cx2,bas))
208 215
 		
209
-		''' COLLAGE DU SAMPLE
210
-		'''
216
+		# decoupage du sample :
217
+		# sample aux dimensions de l'effet
218
+		im5 = im2.crop((randomCopyPosi,haut,randomCopyPosi+largeur,haut+hauteur))
211 219
 		
212
-		#boutImage = im3
213
-		#im3 = Image.new("RGBA",(im1.size[0], im1.size[1]))
214 220
 		
215 221
 		''' PIXELISATION '''
216 222
 		if pixelSize > 1 :
217
-			im5 = im5.resize((im3.size[0]/pixelSize, im3.size[1]/pixelSize), Image.NEAREST)
218
-			im5 = im5.resize((im3.size[0]*pixelSize, im3.size[1]*pixelSize), Image.NEAREST)
223
+			boutImage = im5.resize((im5.size[0]/pixelSize, im5.size[1]/pixelSize), Image.NEAREST)
224
+			boutImage = im5.resize((im5.size[0]*pixelSize, im5.size[1]*pixelSize), Image.NEAREST)
225
+		else :
226
+			boutImage = im5
219 227
 		
220
-		im3 = im5.crop((0,0,cropfinal[0],cropfinal[1]))
228
+		# le sample final (bonnes dimensions)
229
+		im3 = boutImage.crop((0,0,cropfinal[0],cropfinal[1]))
221 230
 		
231
+		print "im5.size="+str(im5.size)
232
+		print "im3.size1="+str(im3.size)
233
+		
234
+		''' COLLAGE DU SAMPLE
235
+		'''
236
+
222 237
 		while loop<repeat:
223 238
 			px1 = n
224
-			px2 = n + largeur	
239
+			px2 = n + cropfinal[0]
225 240
 			#lignes colorées de 1 pix
226 241
 			#draw = ImageDraw.Draw(boutImage)
227 242
 			#draw.line((0,0,0,4), fill="rgb(128,128,128)")
... ...
@@ -230,11 +235,17 @@ def Hacheur(haut, bas) :
230 230
 			draw.line((0, 0, largeur-1, 0), fill="rgb(255,255,255)")
231 231
 			draw.line((largeur-1, 0, largeur-1, bas-haut), fill="rgb(255,255,255)")
232 232
 			
233
+			print "px2-px1="+str(px2-px1)
234
+			print "bas-haut="+str(bas-haut)
235
+			print "im4.size="+str(im4.size)
236
+			print
237
+			
233 238
 			im4.paste(im3, (px1, haut, px2, bas))
234 239
 			
235 240
 			n = n + largeur
236 241
 			loop = loop + 1
237
-
242
+			
243
+		print
238 244
 ''' OPTIONS '''	
239 245
 def TrancheHorizontale() :
240 246
 	# tirage au hasard de la bande copiee