Browse Source

pixelisation v3 : hac.py

rep 5 years ago
parent
commit
a54321559d
3 changed files with 186 additions and 48 deletions
  1. 16
    0
      geany_run_script.sh
  2. 111
    0
      hac.py
  3. 59
    48
      hacheur.py

+ 16
- 0
geany_run_script.sh View File

@@ -0,0 +1,16 @@
1
+#!/bin/sh
2
+
3
+rm $0
4
+
5
+python "hac.py"
6
+
7
+echo "
8
+
9
+------------------
10
+(program exited with code: $?)" 		
11
+
12
+
13
+echo "Press return to continue"
14
+#to be more compatible with shells like dash
15
+dummy_var=""
16
+read dummy_var

+ 111
- 0
hac.py View File

@@ -0,0 +1,111 @@
1
+#!/usr/bin/python
2
+# coding: utf-8
3
+
4
+import sys
5
+import Image
6
+import random
7
+import os
8
+import ImageDraw
9
+import ImageFont
10
+import ImageFilter
11
+from time import gmtime, strftime
12
+import time
13
+import ImageEnhance
14
+import pickle
15
+
16
+allongement = 2
17
+im1 = Image.open(str(sys.argv[1]))
18
+im2 = Image.new("RGBA",(im1.size[0], im1.size[1]))
19
+im3 = Image.new("RGBA",(im1.size[0], im1.size[1]))
20
+im4 = Image.new("RGBA",(im1.size[0], im1.size[1]))
21
+im5 = Image.new("RGBA",(im1.size[0], im1.size[1]))
22
+im6 = Image.new("RGBA",(im1.size[0]*allongement, im1.size[1]))
23
+
24
+Larg = im1.size[0]
25
+Haut = im1.size[1]
26
+loadfile = False
27
+	
28
+def randHaut():
29
+	return random.randint(0, im1.size[1]/8)*8
30
+
31
+
32
+randomCoupeHauteur = [0, \
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
+randHaut(),randHaut(),randHaut(),randHaut(), \
41
+im1.size[1]]
42
+randomCoupeHauteur.sort()
43
+	
44
+
45
+def Hacheur(haut, bas) :
46
+	n = 0
47
+	i = 0
48
+	while n<im6.size[0] :
49
+		i+=1
50
+		loop = 0
51
+
52
+		proportions = [\
53
+		(2,8),(2,16),(2,32),\
54
+		(4,4),(4,8),(4,16),(4,32),(4,64),\
55
+		(8,8),(8,16),(8,32),\
56
+		(16,2),(16,4),(16,8),(16,16),(16,32),\
57
+		(32,8),(32,16),(32,32),\
58
+		(64,4),(64,8),(64,16),\
59
+		(128,2),(128,4),(128,8),\
60
+		(256,1),(256,2),(256,4),\
61
+		(512,1),(512,2),\
62
+		(1024,1),(1024,2),\
63
+		(2048,1)]
64
+		
65
+		choix_rnd = random.randint(0, len(proportions)-1)
66
+		largeur = proportions[choix_rnd][0]
67
+		randomCopyPosi = random.randint(0, (im1.size[0]-largeur))
68
+		largeur = proportions[choix_rnd][0]			
69
+		repeat = proportions[choix_rnd][1]
70
+		
71
+		pixelSizeList = [1,1,2,4,8,16,32,64,128]
72
+		pixelSizeIndex = random.randint(0,len(pixelSizeList)-1)
73
+		pixelSize = pixelSizeList[pixelSizeIndex]
74
+		
75
+		hauteur = bas-haut
76
+		cropfinal = [largeur,hauteur]
77
+		
78
+		if largeur % pixelSize != 0:
79
+			croop = int(largeur / pixelSize)
80
+			largeur = (croop + 1 ) * pixelSize
81
+			
82
+		if  hauteur % pixelSize != 0:
83
+			croop2 = int(hauteur / pixelSize)
84
+			hauteur = (croop2 + 1 ) * pixelSize
85
+		
86
+		im2 = im1.crop((randomCopyPosi,haut,randomCopyPosi+largeur,haut+hauteur))
87
+		im3 = im2.resize((im2.size[0]/pixelSize, im2.size[1]/pixelSize), Image.NEAREST)
88
+		im4 = im3.resize((im3.size[0]*pixelSize, im3.size[1]*pixelSize), Image.NEAREST)
89
+		im5 = im4.crop((0,0,cropfinal[0],cropfinal[1]))
90
+		
91
+		while loop<repeat:
92
+			px1 = n
93
+			px2 = n + cropfinal[0]
94
+			
95
+			draw = ImageDraw.Draw(im5)
96
+			draw.line((0, 0, 4, 0), fill="rgb(255,255,255)")
97
+			draw.line((0, 0, 0, 4), fill="rgb(255,255,255)")
98
+			
99
+			im6.paste(im5, (px1, haut, px2, bas))
100
+			
101
+			n = n + cropfinal[0]
102
+			loop = loop + 1
103
+
104
+
105
+for j in range(len(randomCoupeHauteur)-1):
106
+	Hacheur(randomCoupeHauteur[j], randomCoupeHauteur[j+1])
107
+
108
+scriptpy = str(sys.argv[1])
109
+script = scriptpy[:-3]
110
+n = "1.1"
111
+im6.save(script+"."+n+"_"+strftime("%Y%m%d-%Hh%Mm%Ss", gmtime())+".png",'PNG', quality=100)

+ 59
- 48
hacheur.py View File

@@ -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 142
 			largeur = proportions[choix_rnd][0]
153 143
 
154 144
 			# positionnement de la copie, aleatoirement, entre 0 et la largeur totale de l'image 
155
-			randomCopyPosi = random.randint(0, (im1.size[0]-largeur))
145
+			randomCopyPosi = random.randint(0, (im1.size[0]-largeur-32))
156 146
 			#randomCopyPosi = seq.randomCopyPosi
157 147
 			seq.randomCopyPosi.append(randomCopyPosi)
158 148
 		
@@ -172,12 +162,12 @@ def Hacheur(haut, bas) :
172 162
 		cx2 = randomCopyPosi + largeur
173 163
 		#print "im3 = im2.crop : "+str(im3.size)
174 164
 			
175
-		draw = ImageDraw.Draw(im4)
165
+		#draw = ImageDraw.Draw(im4)
176 166
 				
177 167
 		loop = 0
178 168
 		
179 169
 		#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]
170
+		pixelSizeList = [1,8,16,32]
181 171
 		pixelSizeIndex = random.randint(0,len(pixelSizeList)-1)
182 172
 		pixelSize = pixelSizeList[pixelSizeIndex]
183 173
 		
@@ -194,34 +184,49 @@ def Hacheur(haut, bas) :
194 184
 		bas droit (largeur-1, hauteur-1)
195 185
 		'''
196 186
 		
187
+		print
188
+		print "-------------------------------------------"
189
+		print "largeur="+str(largeur)
190
+		print "hauteur="+str(hauteur)
191
+		print pixelSize
192
+		
197 193
 		if largeur % pixelSize != 0:
198
-			croop = largeur / pixelSize
199
-			largeur = (int(croop) + 1 ) * pixelSize
194
+			croop = int(largeur / pixelSize)
195
+			largeur = (croop + 1 ) * pixelSize
196
+			print "croop="+str(croop)
197
+			print "pixelSize="+str(pixelSize)
198
+			print "largeur="+str(largeur)
200 199
 			
201 200
 		if  hauteur % pixelSize != 0:
202
-			croop2 = hauteur / pixelSize
203
-			hauteur = (int(croop2) + 1 ) * pixelSize
201
+			croop2 = int(hauteur / pixelSize)
202
+			hauteur = (croop2 + 1 ) * pixelSize
203
+			print "hauteur="+str(hauteur)
204 204
 		
205
-		# decoupage du sample
206
-		im5 = im2.crop((randomCopyPosi,haut,randomCopyPosi+largeur,haut+hauteur))
207
-		im3 = im2.crop((cx1,haut,cx2,bas))
208 205
 		
209
-		''' COLLAGE DU SAMPLE
210
-		'''
206
+		# decoupage du sample :
207
+		# sample aux dimensions de l'effet
208
+		im5 = im2.crop((randomCopyPosi,haut,randomCopyPosi+largeur,haut+hauteur))
211 209
 		
212
-		#boutImage = im3
213
-		#im3 = Image.new("RGBA",(im1.size[0], im1.size[1]))
214 210
 		
215 211
 		''' PIXELISATION '''
216 212
 		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)
213
+			boutImage = im5.resize((im5.size[0]/pixelSize, im5.size[1]/pixelSize), Image.NEAREST)
214
+			boutImage = im5.resize((im5.size[0]*pixelSize, im5.size[1]*pixelSize), Image.NEAREST)
215
+		else :
216
+			boutImage = im5
219 217
 		
220
-		im3 = im5.crop((0,0,cropfinal[0],cropfinal[1]))
218
+		# le sample final (bonnes dimensions)
219
+		im3 = boutImage.crop((0,0,cropfinal[0],cropfinal[1]))
221 220
 		
221
+		print "im5.size="+str(im5.size)
222
+		print "im3.size1="+str(im3.size)
223
+		
224
+		''' COLLAGE DU SAMPLE
225
+		'''
226
+
222 227
 		while loop<repeat:
223 228
 			px1 = n
224
-			px2 = n + largeur	
229
+			px2 = n + cropfinal[0]
225 230
 			#lignes colorées de 1 pix
226 231
 			#draw = ImageDraw.Draw(boutImage)
227 232
 			#draw.line((0,0,0,4), fill="rgb(128,128,128)")
@@ -230,11 +235,17 @@ def Hacheur(haut, bas) :
230 235
 			draw.line((0, 0, largeur-1, 0), fill="rgb(255,255,255)")
231 236
 			draw.line((largeur-1, 0, largeur-1, bas-haut), fill="rgb(255,255,255)")
232 237
 			
238
+			print "px2-px1="+str(px2-px1)
239
+			print "bas-haut="+str(bas-haut)
240
+			print "im4.size="+str(im4.size)
241
+			print
242
+			
233 243
 			im4.paste(im3, (px1, haut, px2, bas))
234 244
 			
235 245
 			n = n + largeur
236 246
 			loop = loop + 1
237
-
247
+			
248
+		print
238 249
 ''' OPTIONS '''	
239 250
 def TrancheHorizontale() :
240 251
 	# tirage au hasard de la bande copiee

Loading…
Cancel
Save