A jpeg encoder written in python. It can encode a BMP image file to a JPEG file. A jpeg decoder written in python is not needed because the encoder will create a standardized JPEG file, which can be opened with any picture viewer.
python jpegEncoder.py inputBMPFileName outputJPEGFileName quality(from 1 to 100) debugMode(0 or 1)
Example:
python ./jpegEncoder.py ./lena.bmp ./output.jpg 95 0
If debugMode
is 1, you will get more details about encoding process.
For example, run jpegEncoder.py
by:
python ./jpegEncoder.py ./8x8.bmp ./output.jpg 95 1
And you will get:
srcImageWidth = 8 srcImageHeight = 8
srcImage info:
<PIL.BmpImagePlugin.BmpImageFile image mode=RGB size=8x8 at 0x7F9E8AD4F908>
added to: 8 8
yImageMatrix:
[[255 255 255 255 255 255 255 255]
[255 255 255 255 255 255 255 255]
[255 255 255 255 255 255 255 255]
[255 255 255 255 255 255 255 255]
[255 255 255 255 255 255 255 255]
[255 255 255 255 255 255 255 255]
[255 255 255 255 255 255 255 255]
[255 255 255 255 255 255 255 255]]
uImageMatrix:
[[128 128 128 128 128 128 128 128]
[128 128 128 128 128 128 128 128]
[128 128 128 128 128 128 128 128]
[128 128 128 128 128 128 128 128]
[128 128 128 128 128 128 128 128]
[128 128 128 128 128 128 128 128]
[128 128 128 128 128 128 128 128]
[128 128 128 128 128 128 128 128]]
vImageMatrix:
[[128 128 128 128 128 128 128 128]
[128 128 128 128 128 128 128 128]
[128 128 128 128 128 128 128 128]
[128 128 128 128 128 128 128 128]
[128 128 128 128 128 128 128 128]
[128 128 128 128 128 128 128 128]
[128 128 128 128 128 128 128 128]
[128 128 128 128 128 128 128 128]]
luminanceQuantTbl:
[[ 2 1 1 2 2 4 5 6]
[ 1 1 1 2 3 6 6 6]
[ 1 1 2 2 4 6 7 6]
[ 1 2 2 3 5 9 8 6]
[ 2 2 4 6 7 11 10 8]
[ 2 4 6 6 8 10 11 9]
[ 5 6 8 9 10 12 12 10]
[ 7 9 10 10 11 10 10 10]]
chrominanceQuantTbl:
[[ 2 2 2 5 10 10 10 10]
[ 2 2 3 7 10 10 10 10]
[ 2 3 6 10 10 10 10 10]
[ 5 7 10 10 10 10 10 10]
[10 10 10 10 10 10 10 10]
[10 10 10 10 10 10 10 10]
[10 10 10 10 10 10 10 10]
[10 10 10 10 10 10 10 10]]
blockSum = 1
block (y,x): 0 0 -> 8 8
yDctMatrix:
[[1024. 0. 0. 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 0. 0. 0.]]
uDctMatrix:
[[8. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0.]]
vDctMatrix:
[[8. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0.]]
yQuantMatrix:
[[512. 0. 0. 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 0. 0. 0.]]
uQuantMatrix:
[[4. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0.]]
vQuantMatrix:
[[4. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0.]]
encode dyDC: 512
isLuminance= 1 (size,value)= 10 512 code= [1, 1, 1, 1, 1, 1, 0] [1, 0, 0, 0, 0, 0, 0, 0, 0, 0]
encode yAC: [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
EOB [1, 1, 0, 0]
encode duDC: 4
isLuminance= 0 (size,value)= 3 4 code= [1, 0, 1] [1, 0, 0]
encode uAC: [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
EOB [0, 1]
encode dvDC: 4
isLuminance= 0 (size,value)= 3 4 code= [1, 0, 1] [1, 0, 0]
encode vAC: [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
EOB [0, 1]