From fcaa3742ad431e87a0d489ebcd8d60e79d91a2f8 Mon Sep 17 00:00:00 2001 From: Chiamh <Chiamh@users.noreply.github.com> Date: Tue, 17 Mar 2015 23:16:11 +0100 Subject: [PATCH] avoid double file extensions --- .../com/xeiam/xchart/standalone/Example1.java | 2 +- .../java/com/xeiam/xchart/BitmapEncoder.java | 26 ++++++++++++++++--- .../java/com/xeiam/xchart/XChartPanel.java | 2 +- 3 files changed, 24 insertions(+), 6 deletions(-) diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/standalone/Example1.java b/xchart-demo/src/main/java/com/xeiam/xchart/standalone/Example1.java index 48fe9dca..b831f215 100644 --- a/xchart-demo/src/main/java/com/xeiam/xchart/standalone/Example1.java +++ b/xchart-demo/src/main/java/com/xeiam/xchart/standalone/Example1.java @@ -42,7 +42,7 @@ public class Example1 { BitmapEncoder.saveBitmap(chart, "./Sample_Chart", BitmapFormat.PNG); BitmapEncoder.saveBitmap(chart, "./Sample_Chart", BitmapFormat.JPG); - BitmapEncoder.saveJPGWithQuality(chart, "./Sample_Chart_With_Quality.jpg", 0.95f); + BitmapEncoder.saveJPGWithQuality(chart, "./Sample_Chart_With_Quality", BitmapFormat.JPG, 0.95f); BitmapEncoder.saveBitmap(chart, "./Sample_Chart", BitmapFormat.BMP); BitmapEncoder.saveBitmap(chart, "./Sample_Chart", BitmapFormat.GIF); diff --git a/xchart/src/main/java/com/xeiam/xchart/BitmapEncoder.java b/xchart/src/main/java/com/xeiam/xchart/BitmapEncoder.java index 736dbe64..2306fed3 100644 --- a/xchart/src/main/java/com/xeiam/xchart/BitmapEncoder.java +++ b/xchart/src/main/java/com/xeiam/xchart/BitmapEncoder.java @@ -53,6 +53,23 @@ public final class BitmapEncoder { public enum BitmapFormat { PNG, JPG, BMP, GIF; } + + /** + * Only adds the extension of the BitmapFormat to the filename if the filename doesn't already have it. + * + * @param fileName + * @param bitmapFormat + * @return filename (if extension already exists), otherwise;: filename + "." + extension + */ + private static String addFileExtension(String fileName, BitmapFormat bitmapFormat) { + String fileNameWithFileExtension = fileName; + final String newFileExtension = "." + bitmapFormat.toString().toLowerCase(); + if (fileName.length() <= newFileExtension.length() || + !fileName.substring(fileName.length()-newFileExtension.length(), fileName.length()).equalsIgnoreCase(newFileExtension)) { + fileNameWithFileExtension = fileName + newFileExtension; + } + return fileNameWithFileExtension; + } /** * Save a Chart as an image file @@ -66,7 +83,7 @@ public final class BitmapEncoder { BufferedImage bufferedImage = getBufferedImage(chart); - OutputStream out = new FileOutputStream(fileName + "." + bitmapFormat.toString().toLowerCase()); + OutputStream out = new FileOutputStream(addFileExtension(fileName, bitmapFormat)); ImageIO.write(bufferedImage, bitmapFormat.toString().toLowerCase(), out); out.close(); } @@ -108,7 +125,7 @@ public final class BitmapEncoder { setDPI(metadata, DPI); - File file = new File(fileName + "." + bitmapFormat.toString().toLowerCase()); + File file = new File(addFileExtension(fileName, bitmapFormat)); FileImageOutputStream output = new FileImageOutputStream(file); writer.setOutput(output); IIOImage image = new IIOImage(bufferedImage, null, metadata); @@ -150,11 +167,12 @@ public final class BitmapEncoder { * * @param chart * @param fileName + * @param bitmapFormat * @param quality - a float between 0 and 1 (1 = maximum quality) * @throws FileNotFoundException * @throws IOException */ - public static void saveJPGWithQuality(Chart chart, String fileName, float quality) throws FileNotFoundException, IOException { + public static void saveJPGWithQuality(Chart chart, String fileName, BitmapFormat bitmapFormat, float quality) throws FileNotFoundException, IOException { BufferedImage bufferedImage = getBufferedImage(chart); @@ -164,7 +182,7 @@ public final class BitmapEncoder { ImageWriteParam iwp = writer.getDefaultWriteParam(); iwp.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); iwp.setCompressionQuality(quality); - File file = new File(fileName); + File file = new File(addFileExtension(fileName, bitmapFormat)); FileImageOutputStream output = new FileImageOutputStream(file); try { writer.setOutput(output); diff --git a/xchart/src/main/java/com/xeiam/xchart/XChartPanel.java b/xchart/src/main/java/com/xeiam/xchart/XChartPanel.java index 32601ab9..b92914a1 100644 --- a/xchart/src/main/java/com/xeiam/xchart/XChartPanel.java +++ b/xchart/src/main/java/com/xeiam/xchart/XChartPanel.java @@ -130,7 +130,7 @@ public class XChartPanel extends JPanel { if (fileChooser.getFileFilter() == null) { BitmapEncoder.saveBitmap(chart, theFileToSave.getCanonicalPath().toString(), BitmapFormat.PNG); } else if (fileChooser.getFileFilter().getDescription().equals("*.jpg,*.JPG")) { - BitmapEncoder.saveJPGWithQuality(chart, theFileToSave.getCanonicalPath().toString() + ".jpg", 1.0f); + BitmapEncoder.saveJPGWithQuality(chart, theFileToSave.getCanonicalPath().toString(), BitmapFormat.JPG, 1.0f); } else if (fileChooser.getFileFilter().getDescription().equals("*.png,*.PNG")) { BitmapEncoder.saveBitmap(chart, theFileToSave.getCanonicalPath().toString(), BitmapFormat.PNG); } else if (fileChooser.getFileFilter().getDescription().equals("*.bmp,*.BMP")) { -- GitLab