From a1783d00d03245556a833bc02fbe2865225c2501 Mon Sep 17 00:00:00 2001 From: Niki Roo Date: Wed, 30 Mar 2016 21:41:58 +0200 Subject: [PATCH] image --load now store the file as is --- src/be/nikiroo/jvcard/launcher/Main.java | 13 +++-- .../nikiroo/jvcard/resources/StringUtils.java | 51 ++++++++++++++++--- 2 files changed, 53 insertions(+), 11 deletions(-) diff --git a/src/be/nikiroo/jvcard/launcher/Main.java b/src/be/nikiroo/jvcard/launcher/Main.java index eeeae41..65fbf9c 100644 --- a/src/be/nikiroo/jvcard/launcher/Main.java +++ b/src/be/nikiroo/jvcard/launcher/Main.java @@ -319,8 +319,15 @@ public class Main { if (f.exists()) { System.out.println("Loading " + f); try { - String b64 = StringUtils.fromImage(ImageIO - .read(f)); + String type = "jpeg"; + int dotIndex = filename.indexOf('.'); + if (dotIndex >= 0 + && (dotIndex + 1) < filename.length()) { + type = filename.substring(dotIndex + 1) + .toLowerCase(); + } + + String b64 = StringUtils.fromImage(f); // remove previous photos: for (Data photo = contact @@ -332,7 +339,7 @@ public class Main { List types = new LinkedList(); types.add(new TypeInfo("ENCODING", "b")); - types.add(new TypeInfo("TYPE", "jpeg")); + types.add(new TypeInfo("TYPE", type)); Data photo = new Data(types, "PHOTO", b64, null); contact.add(photo); } catch (IOException e) { diff --git a/src/be/nikiroo/jvcard/resources/StringUtils.java b/src/be/nikiroo/jvcard/resources/StringUtils.java index e9203d5..1772bdf 100644 --- a/src/be/nikiroo/jvcard/resources/StringUtils.java +++ b/src/be/nikiroo/jvcard/resources/StringUtils.java @@ -4,7 +4,10 @@ import java.awt.Image; import java.awt.image.BufferedImage; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileInputStream; import java.io.IOException; +import java.io.InputStream; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.text.Normalizer; @@ -188,24 +191,56 @@ public class StringUtils { * the {@link Image} object to convert * * @return the Base64 representation + * + * @throws IOException + * in case of IO error */ - static public String fromImage(BufferedImage image) { + static public String fromImage(BufferedImage image) throws IOException { String imageString = null; ByteArrayOutputStream out = new ByteArrayOutputStream(); - try { - ImageIO.write(image, "jpeg", out); - byte[] imageBytes = out.toByteArray(); + ImageIO.write(image, "jpeg", out); + byte[] imageBytes = out.toByteArray(); - imageString = DatatypeConverter.printBase64Binary(imageBytes); + imageString = DatatypeConverter.printBase64Binary(imageBytes); - out.close(); - } catch (IOException e) { - } + out.close(); return imageString; } + /** + * Convert the given {@link File} image into a Base64 representation of the + * same {@link File}. + * + * @param file + * the {@link File} image to convert + * + * @return the Base64 representation + * + * @throws IOException + * in case of IO error + */ + static public String fromImage(File file) throws IOException { + String fileString = null; + ByteArrayOutputStream out = new ByteArrayOutputStream(); + + byte[] buf = new byte[8192]; + InputStream in = new FileInputStream(file); + + int c = 0; + while ((c = in.read(buf, 0, buf.length)) > 0) { + out.write(buf, 0, c); + } + out.flush(); + in.close(); + + fileString = DatatypeConverter.printBase64Binary(out.toByteArray()); + out.close(); + + return fileString; + } + /** * Convert the given Base64 representation of an image into an {@link Image} * object. -- 2.27.0