Performance improvement:
[jvcard.git] / src / be / nikiroo / jvcard / resources / StringUtils.java
index bfe0d3da44782e82db58416549c1b11a3f74a33e..e9203d5b5226b37d52fe102622f49ca729ba4f0b 100644 (file)
@@ -1,5 +1,10 @@
 package be.nikiroo.jvcard.resources;
 
+import java.awt.Image;
+import java.awt.image.BufferedImage;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
 import java.security.MessageDigest;
 import java.security.NoSuchAlgorithmException;
 import java.text.Normalizer;
@@ -9,6 +14,9 @@ import java.text.SimpleDateFormat;
 import java.util.Date;
 import java.util.regex.Pattern;
 
+import javax.imageio.ImageIO;
+import javax.xml.bind.DatatypeConverter;
+
 import com.googlecode.lanterna.gui2.LinearLayout.Alignment;
 
 public class StringUtils {
@@ -22,8 +30,7 @@ public class StringUtils {
         * @param text
         *            the {@link String} to fix
         * @param width
-        *            the size of the resulting {@link String} if the text fits or
-        *            if cut is TRUE
+        *            the size of the resulting {@link String} or -1 for a noop
         * 
         * @return the resulting {@link String} of size <i>size</i>
         */
@@ -39,7 +46,7 @@ public class StringUtils {
         *            the {@link String} to fix
         * @param width
         *            the size of the resulting {@link String} if the text fits or
-        *            if cut is TRUE
+        *            if cut is TRUE or -1 for a noop
         * @param cut
         *            cut the {@link String} shorter if needed
         * @param align
@@ -173,6 +180,51 @@ public class StringUtils {
                }
        }
 
+       /**
+        * Convert the given {@link Image} object into a Base64 representation of
+        * the same {@link Image}. object.
+        * 
+        * @param image
+        *            the {@link Image} object to convert
+        * 
+        * @return the Base64 representation
+        */
+       static public String fromImage(BufferedImage image) {
+               String imageString = null;
+               ByteArrayOutputStream out = new ByteArrayOutputStream();
+
+               try {
+                       ImageIO.write(image, "jpeg", out);
+                       byte[] imageBytes = out.toByteArray();
+
+                       imageString = DatatypeConverter.printBase64Binary(imageBytes);
+
+                       out.close();
+               } catch (IOException e) {
+               }
+
+               return imageString;
+       }
+
+       /**
+        * Convert the given Base64 representation of an image into an {@link Image}
+        * object.
+        * 
+        * @param b64data
+        *            the {@link Image} in Base64 format
+        * 
+        * @return the {@link Image} object
+        * 
+        * @throws IOException
+        *             in case of IO error
+        */
+       static public BufferedImage toImage(String b64data) throws IOException {
+               BufferedImage image = ImageIO.read(new ByteArrayInputStream(
+                               DatatypeConverter.parseBase64Binary(b64data)));
+               image.toString();
+               return image;
+       }
+
        /**
         * Return a hash of the given {@link String}.
         *