testyaj.py
2.12 KB
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
87
88
89
90
91
92
__author__ = 'chunk'
import numpy as np
import mjsteg
import jpegObj
from common import *
timer = Timer()
sample = [[7, 12, 14, -12, 1, 0, -1, 0],
[6, 5, -10, 0, 6, 0, 0, 0],
[0, 6, -5, 4, 0, -1, 0, 0],
[0, -3, 0, 1, -1, 0, 0, 0],
[-3, 5, 0, 0, 0, 0, 0, 0],
[2, -1, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0]]
def diffblock(c1, c2):
diff = False
if np.array_equal(c1, c2):
print("blocks match")
else:
print("blocks not match")
diff = True
return diff
def diffblocks(a, b):
diff = False
for comp in range(a.image_components):
xmax, ymax = a.Jgetcompdim(comp)
for y in range(ymax):
for x in range(xmax):
if a.Jgetblock(x, y, comp) != b.Jgetblock(x, y, comp):
print("blocks({},{}) in component {} not match".format(y, x, comp))
diff = True
return diff
def test_setblocks():
"""
wholewise
"""
imb = jpegObj.Jpeg("res/test4.jpg")
block = imb.getCoefBlock(channel='Y', loc=(-1, 2))
print block
imb.setCoefMatrix(np.array([[0] * 800 for i in range(600)]), channel='Y')
block = imb.getCoefBlock(channel='Y', loc=(-1, 2))
print block
imb.Jwrite("res/test4.jpg")
ima = jpegObj.Jpeg("res/test3.jpg")
imb = jpegObj.Jpeg("res/test4.jpg")
diffblocks(ima, imb)
def test_setblock():
"""
blockwise
"""
imb = jpegObj.Jpeg("res/test4.jpg")
block = imb.getCoefBlock(channel='Y', loc=(0, 1))
print block
# print b.setCoefBlock(np.array([[27] + [0] * 7] + [[0] * 8 for i in range(7)]), loc=(0, 1))
imb.setCoefBlock(np.array(sample), loc=(0, 1))
blocks1 = imb.getCoefBlock(channel='Y', loc=(0, 1))
print blocks1
blocks2 = imb.Jgetblock(1, 0, 0)
block_to_show = np.frombuffer(blocks2, dtype=np.int16, count=-1, offset=0).reshape(8, 8)
print block_to_show
diffblock(blocks1, block_to_show)
if __name__ == '__main__':
timer.mark()
test_setblock()
timer.report()
timer.mark()
test_setblocks()
timer.report()