A complete JPEG encoding and decoding implementation in Python with a user-friendly GUI for image compression and quality assessment.
- JPEG encoding and decoding from scratch
- Adjustable compression quality (1-100)
- Quality metrics: PSNR, SSIM, MSE, MAE
- GUI with Tkinter
- Performance tracking (time, memory, compression ratio)
- Python 3.7+
- OpenCV (
cv2) - NumPy
- Matplotlib
- scikit-image
- Numba
pip install opencv-python numpy matplotlib scikit-image numbapython main.pyThis launches the Tkinter GUI with the following controls:
- JPEG Encode File: Select an image file (BMP, JPEG, PNG) and save as compressed JPEG
- JPEG Decode File: Select a JPEG file and decompress to standard format
- Quality Slider: Adjust compression quality (1-100)
- Low values (1-30): High compression, lower quality
- Medium values (40-70): Balanced compression and quality
- High values (80-100): Better quality, larger file size
from jpeg_encoder import JPEGEncoder
import cv2
# Initialize encoder with quality setting
encoder = JPEGEncoder(quality=80)
# Load and prepare image
image = encoder.load_image('input.jpg')
prepared = encoder.prepare_image(image)
# Convert to YCrCb color space
ycrcb = cv2.cvtColor(prepared, cv2.COLOR_BGR2YCrCb)
# Encode and save
encoder.encode(ycrcb, 'output.jpg')from jpeg_decoder import JPEGDecoder
import cv2
# Initialize decoder
decoder = JPEGDecoder()
# Decode JPEG file
decoded_image = decoder.decode('input.jpg', 'output.jpeg')from main import ImageQualityAssessor
import cv2
import numpy as np
assessor = ImageQualityAssessor()
original = cv2.imread('original.jpg').astype(np.float32) / 255.0
compressed = cv2.imread('compressed.jpg').astype(np.float32) / 255.0
metrics = assessor.assess_quality(original, compressed)
print(f"PSNR: {metrics['PSNR']:.4f}")
print(f"SSIM: {metrics['SSIM']:.4f}")Color conversion → Block splitting → DCT → Quantization → Zigzag scan → Huffman encoding → File output
Header parsing → Huffman decoding → Inverse quantization → IDCT → Color conversion → Image output
The quality slider (1-100) scales quantization tables. Higher values preserve more detail but increase file size.
The application tracks compression ratio, processing time, memory usage, and quality metrics (PSNR, SSIM, MSE, MAE). All data is automatically saved to performance_metrics.csv.
This project is provided as-is for educational and research purposes.