-
Notifications
You must be signed in to change notification settings - Fork 12
/
Copy pathautocrop.py
86 lines (70 loc) · 2.39 KB
/
autocrop.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
'''
Copyright (C) 2014 Muhd Amirul Ashraf bin Mohd Fauzi <[email protected]>
This file is part of Automatic IIUM Schedule Formatter.
Automatic IIUM Schedule Formatter is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Automatic IIUM Schedule Formatter is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Automatic IIUM Schedule Formatter. If not, see <http://www.gnu.org/licenses/>.
'''
from PIL import Image
import StringIO
def autocrop_image(raw):
thephoto=Image.open(StringIO.StringIO(raw))
pdata=thephoto.load()
size=thephoto.size
threshold=240
def is_ok(var):
if(var[0]<threshold):
return False
if(var[1]<threshold):
return False
if(var[2]<threshold):
return False
return True
#find topright
def find_top():
for y in xrange(size[1]):
for x in xrange(size[0]) :
val=pdata[x,y]
if(not is_ok(val)):
return y
def find_bottom():
for y in reversed(xrange(size[1])):
for x in xrange(size[0]) :
val=pdata[x,y]
if(not is_ok(val)):
return y
def find_left():
for x in xrange(size[0]):
for y in xrange(size[1]):
val=pdata[x,y]
if(not is_ok(val)):
return x
def find_right():
for x in reversed(xrange(size[0])):
for y in xrange(size[1]):
val=pdata[x,y]
if(not is_ok(val)):
return x
top=find_top()
bottom=find_bottom()
left=find_left()
right=find_right()
thephoto=thephoto.crop((left,top,right,bottom))
output=StringIO.StringIO()
thephoto.save(output,"png")
thephoto=output.getvalue()
return thephoto
def test():
theraw=open("test.jpg").read()
result=autocrop_image(theraw)
savefile=open("result.png","w")
savefile.write(result)
savefile.close()
print("ok")