diff options
author | Andreas Beeker <kiwiwings@apache.org> | 2015-08-01 20:09:37 +0000 |
---|---|---|
committer | Andreas Beeker <kiwiwings@apache.org> | 2015-08-01 20:09:37 +0000 |
commit | bb3970b2bf8bebe8ce01969de323dfa8b8ffe80b (patch) | |
tree | 6c40401c34f1475ab6ad78321de6419b428a42f1 /src/ooxml/java/org/apache | |
parent | bc1d4f59b0a23cfadb58600d5582509f64aa9c45 (diff) | |
download | poi-bb3970b2bf8bebe8ce01969de323dfa8b8ffe80b.tar.gz poi-bb3970b2bf8bebe8ce01969de323dfa8b8ffe80b.zip |
#58193 - Use input stream rather than byte array for checksum etc.
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1693754 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'src/ooxml/java/org/apache')
-rw-r--r-- | src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFPictureData.java | 32 | ||||
-rw-r--r-- | src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFPictureShape.java | 5 |
2 files changed, 22 insertions, 15 deletions
diff --git a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFPictureData.java b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFPictureData.java index 98c3b7c9fe..8e20be90b3 100644 --- a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFPictureData.java +++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFPictureData.java @@ -20,6 +20,7 @@ package org.apache.poi.xslf.usermodel; import java.io.IOException; +import java.io.InputStream; import java.io.OutputStream; import org.apache.poi.POIXMLDocumentPart; @@ -141,21 +142,25 @@ public final class XSLFPictureData extends POIXMLDocumentPart implements Picture } /** + * An InputStream to read the picture data directly + * from the underlying package part + * + * @return InputStream + */ + public InputStream getInputStream() throws IOException { + return getPackagePart().getInputStream(); + } + + /** * Gets the picture data as a byte array. - * <p> - * Note, that this call might be expensive since all the picture data is copied into a temporary byte array. - * You can grab the picture data directly from the underlying package part as follows: - * <br/> - * <code> - * InputStream is = getPackagePart().getInputStream(); - * </code> - * </p> * + * You can grab the picture data directly from the underlying package part with the {@link #getInputStream()} method + * * @return the Picture data. */ public byte[] getData() { try { - return IOUtils.toByteArray(getPackagePart().getInputStream()); + return IOUtils.toByteArray(getInputStream()); } catch (IOException e) { throw new POIXMLException(e); } @@ -203,8 +208,11 @@ public final class XSLFPictureData extends POIXMLDocumentPart implements Picture long getChecksum(){ if(checksum == null){ - byte[] pictureData = getData(); - checksum = IOUtils.calculateChecksum(pictureData); + try { + checksum = IOUtils.calculateChecksum(getInputStream()); + } catch (IOException e) { + throw new POIXMLException("Unable to calulate checksum", e); + } } return checksum; } @@ -227,6 +235,8 @@ public final class XSLFPictureData extends POIXMLDocumentPart implements Picture OutputStream os = getPackagePart().getOutputStream(); os.write(data); os.close(); + // recalculate now since we already have the data bytes available anyhow + checksum = IOUtils.calculateChecksum(data); } diff --git a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFPictureShape.java b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFPictureShape.java index 0ec83497a4..73ec45b9a8 100644 --- a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFPictureShape.java +++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFPictureShape.java @@ -22,7 +22,6 @@ package org.apache.poi.xslf.usermodel; import java.awt.Insets;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
-import java.io.ByteArrayInputStream;
import java.net.URI;
import javax.imageio.ImageIO;
@@ -91,10 +90,8 @@ public class XSLFPictureShape extends XSLFSimpleShape implements PictureShape { * for other types sets the default size of 200x200 pixels.
*/
public void resize() {
- XSLFPictureData pict = getPictureData();
-
try {
- BufferedImage img = ImageIO.read(new ByteArrayInputStream(pict.getData()));
+ BufferedImage img = ImageIO.read(getPictureData().getInputStream());
setAnchor(new Rectangle2D.Double(0, 0, img.getWidth(), img.getHeight()));
}
catch (Exception e) {
|