X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;f=src%2Fbe%2Fnikiroo%2Futils%2FImage.java;h=58b1f5aeac05f71370365ac9c3a562f70f722797;hb=7194ac50b29064a013f177fc9cfc5aaa131a8ec4;hp=6edc1051ab7b910c0b47733407c99d804a08a8fe;hpb=82fcfcde9722e9e3b3eb713cf1f2bcb35fefaa7e;p=nikiroo-utils.git diff --git a/src/be/nikiroo/utils/Image.java b/src/be/nikiroo/utils/Image.java index 6edc105..58b1f5a 100644 --- a/src/be/nikiroo/utils/Image.java +++ b/src/be/nikiroo/utils/Image.java @@ -3,10 +3,11 @@ package be.nikiroo.utils; import java.io.ByteArrayInputStream; import java.io.Closeable; import java.io.File; -import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; +import be.nikiroo.utils.streams.MarkableFileInputStream; + /** * This class represents an image data. * @@ -50,40 +51,49 @@ public class Image implements Closeable { } /** - * Create a new {@link Image} from its Base64 representation. + * Create a new {@link Image} from a stream. * - * @param base64 - * the {@link Image} in Base64 format + * @param in + * the stream * * @throws IOException * in case of I/O error */ - public Image(String base64) throws IOException { - this(Base64.decode(base64)); + public Image(InputStream in) throws IOException { + data = getTemporaryFile(); + IOUtils.write(in, data); } /** - * Create a new {@link Image} from a stream. + * Generate an {@link InputStream} that you can {@link InputStream#reset()} + * for this {@link Image}. + *

+ * This {@link InputStream} will (always) be a new one, and you are + * responsible for it. + *

+ * Note: take care that the {@link InputStream} must not live past + * the {@link Image} life time! * - * @param in - * the stream + * @return the stream * * @throws IOException * in case of I/O error */ - public Image(InputStream in) throws IOException { - data = getTemporaryFile(); - IOUtils.write(in, data); + public InputStream newInputStream() throws IOException { + return new MarkableFileInputStream(data); } /** * Read the actual image data, as a byte array. + *

+ * Note: if possible, prefer the {@link Image#newInputStream()} method, as + * it can be more efficient. * * @return the image data */ public byte[] getData() { try { - FileInputStream in = new FileInputStream(data); + InputStream in = newInputStream(); try { return IOUtils.toByteArray(in); } finally { @@ -94,16 +104,6 @@ public class Image implements Closeable { } } - /** - * Convert the given {@link Image} object into a Base64 representation of - * the same {@link Image} object. - * - * @return the Base64 representation - */ - public String toBase64() { - return Base64.encodeBytes(getData()); - } - /** * Closing the {@link Image} will delete the associated temporary file on * disk.