Guest User

Untitled

a guest
Dec 17th, 2017
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.36 KB | None | 0 0
  1. import java.io.*;
  2. import java.util.Iterator;
  3. import javax.imageio.*;
  4. import javax.imageio.stream.*;
  5. import java.awt.image.*;
  6.  
  7. public class ImageFileSizeReducer {
  8.  
  9. public static void reduceImageQuality(int sizeThreshold, String srcImg, String destImg) throws Exception {
  10. float quality = 1.0f;
  11.  
  12. File file = new File(srcImg);
  13.  
  14. long fileSize = file.length();
  15.  
  16. if (fileSize <= sizeThreshold) {
  17. System.out.println("Image file size is under threshold");
  18. return;
  19. }
  20.  
  21. Iterator iter = ImageIO.getImageWritersByFormatName("jpeg");
  22.  
  23. ImageWriter writer = (ImageWriter)iter.next();
  24.  
  25. ImageWriteParam iwp = writer.getDefaultWriteParam();
  26.  
  27. iwp.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
  28.  
  29. FileInputStream inputStream = new FileInputStream(file);
  30.  
  31. BufferedImage originalImage = ImageIO.read(inputStream);
  32. IIOImage image = new IIOImage(originalImage, null, null);
  33.  
  34. float percent = 0.1f; // 10% of 1
  35.  
  36. while (fileSize > sizeThreshold) {
  37. if (percent >= quality) {
  38. percent = percent * 0.1f;
  39. }
  40.  
  41. quality -= percent;
  42.  
  43. File fileOut = new File(destImg);
  44. if (fileOut.exists()) {
  45. fileOut.delete();
  46. }
  47. FileImageOutputStream output = new FileImageOutputStream(fileOut);
  48.  
  49. writer.setOutput(output);
  50.  
  51. iwp.setCompressionQuality(quality);
  52.  
  53. writer.write(null, image, iwp);
  54.  
  55. File fileOut2 = new File(destImg);
  56. long newFileSize = fileOut2.length();
  57. if (newFileSize == fileSize) {
  58. // cannot reduce more, return
  59. break;
  60. } else {
  61. fileSize = newFileSize;
  62. }
  63. System.out.println("quality = " + quality + ", new file size = " + fileSize);
  64. output.close();
  65. }
  66.  
  67. writer.dispose();
  68. }
  69.  
  70. public static void main(String[] args) throws Exception {
  71. String srcPath = args[0];
  72. String destPath = args[1];
  73. int maxSize = Integer.parseInt(args[2]);
  74.  
  75. reduceImageQuality(maxSize, srcPath, destPath);
  76.  
  77. System.out.println("DONE");
  78. }
  79. }
Add Comment
Please, Sign In to add comment