From 104874fd03adacfc96e6b0f8f1bdc1bafe271197 Mon Sep 17 00:00:00 2001
From: Anthony Stirling <77850077+Frooodle@users.noreply.github.com.>
Date: Fri, 9 May 2025 14:53:43 +0100
Subject: [PATCH] fixes and stuff
---
.../api/misc/CompressController.java | 49 +++++++++++--------
.../resources/templates/fragments/common.html | 2 +-
src/main/resources/templates/home.html | 2 +-
3 files changed, 31 insertions(+), 22 deletions(-)
diff --git a/src/main/java/stirling/software/SPDF/controller/api/misc/CompressController.java b/src/main/java/stirling/software/SPDF/controller/api/misc/CompressController.java
index 79d46cc45..751582d1f 100644
--- a/src/main/java/stirling/software/SPDF/controller/api/misc/CompressController.java
+++ b/src/main/java/stirling/software/SPDF/controller/api/misc/CompressController.java
@@ -626,25 +626,30 @@ public class CompressController {
// Scale factors for different optimization levels
private double getScaleFactorForLevel(int optimizeLevel) {
- return switch (optimizeLevel) {
- case 4 -> 0.9; // 90% - lite compression
- case 5 -> 0.8; // 80% - lite compression
- case 6 -> 0.7; // 70% - lite compression
- case 7 -> 0.6; // 60% - intense compression
- case 8 -> 0.5; // 50% - intense compression
- case 9, 10 -> 0.4; // 40% - intense compression
- default -> 1.0; // No scaling for levels 1-3
- };
+ return switch (optimizeLevel) {
+ case 3 -> 0.85;
+ case 4 -> 0.75;
+ case 5 -> 0.65;
+ case 6 -> 0.55;
+ case 7 -> 0.45;
+ case 8 -> 0.35;
+ case 9 -> 0.25;
+ default -> 1.0;
+ };
}
// JPEG quality for different optimization levels
private float getJpegQualityForLevel(int optimizeLevel) {
- return switch (optimizeLevel) {
- case 7 -> 0.8f; // 80% quality
- case 8 -> 0.6f; // 60% quality
- case 9, 10 -> 0.4f; // 40% quality
- default -> 0.7f; // 70% quality for levels 1-6
- };
+ return switch (optimizeLevel) {
+ case 3 -> 0.85f;
+ case 4 -> 0.80f;
+ case 5 -> 0.75f;
+ case 6 -> 0.70f;
+ case 7 -> 0.60f;
+ case 8 -> 0.50f;
+ case 9 -> 0.35f;
+ default -> 0.7f;
+ };
}
@PostMapping(consumes = "multipart/form-data", value = "/compress-pdf")
@@ -698,7 +703,7 @@ public class CompressController {
while (!sizeMet && optimizeLevel <= 9) {
// Apply image compression for levels 4-9
- if ((optimizeLevel >= 4 || Boolean.TRUE.equals(convertToGrayscale))
+ if ((optimizeLevel >= 3 || Boolean.TRUE.equals(convertToGrayscale))
&& !imageCompressionApplied) {
double scaleFactor = getScaleFactorForLevel(optimizeLevel);
float jpegQuality = getJpegQualityForLevel(optimizeLevel);
@@ -790,10 +795,14 @@ public class CompressController {
log.info("Pre-QPDF file size: {}", GeneralUtils.formatBytes(preQpdfSize));
// Map optimization levels to QPDF compression levels
- int qpdfCompressionLevel =
- optimizeLevel <= 3
- ? optimizeLevel * 3 // Level 1->3, 2->6, 3->9
- : 9; // Max compression for levels 4-9
+ int qpdfCompressionLevel;
+ if (optimizeLevel == 1) {
+ qpdfCompressionLevel = 5;
+ } else if (optimizeLevel == 2) {
+ qpdfCompressionLevel = 9;
+ } else {
+ qpdfCompressionLevel = 9;
+ }
// Create output file for QPDF
Path qpdfOutputFile = Files.createTempFile("qpdf_output_", ".pdf");
diff --git a/src/main/resources/templates/fragments/common.html b/src/main/resources/templates/fragments/common.html
index 3daebf03b..02d919b2b 100644
--- a/src/main/resources/templates/fragments/common.html
+++ b/src/main/resources/templates/fragments/common.html
@@ -41,7 +41,7 @@
-