Package com.drew.lang

Examples of com.drew.lang.ByteArrayReader


            byte[] jpegSegment = segmentReader.getSegment((byte)(JpegSegmentReader.SEGMENT_SOF0 + i));
            if (jpegSegment == null)
                continue;
            JpegDirectory directory = metadata.getOrCreateDirectory(JpegDirectory.class);
            directory.setInt(JpegDirectory.TAG_JPEG_COMPRESSION_TYPE, i);
            new JpegReader().extract(new ByteArrayReader(jpegSegment), metadata);
            break;
        }

        // There should never be more than one COM segment.
        byte[] comSegment = segmentReader.getSegment(JpegSegmentReader.SEGMENT_COM);
        if (comSegment != null)
            new JpegCommentReader().extract(new ByteArrayReader(comSegment), metadata);

        // Loop through all APP0 segments, looking for a JFIF segment.
        for (byte[] app0Segment : segmentReader.getSegments(JpegSegmentReader.SEGMENT_APP0)) {
            if (app0Segment.length > 3 && new String(app0Segment, 0, 4).equals("JFIF"))
                new JfifReader().extract(new ByteArrayReader(app0Segment), metadata);
        }

        // Loop through all APP1 segments, checking the leading bytes to identify the format of each.
        for (byte[] app1Segment : segmentReader.getSegments(JpegSegmentReader.SEGMENT_APP1)) {
            if (app1Segment.length > 3 && "EXIF".equalsIgnoreCase(new String(app1Segment, 0, 4)))
                new ExifReader().extract(new ByteArrayReader(app1Segment), metadata);

            if (app1Segment.length > 27 && "http://ns.adobe.com/xap/1.0/".equalsIgnoreCase(new String(app1Segment, 0, 28)))
                new XmpReader().extract(new ByteArrayReader(app1Segment), metadata);
        }

        // Loop through all APP2 segments, looking for something we can process.
        for (byte[] app2Segment : segmentReader.getSegments(JpegSegmentReader.SEGMENT_APP2)) {
            if (app2Segment.length > 10 && new String(app2Segment, 0, 11).equalsIgnoreCase("ICC_PROFILE")) {
                byte[] icc = new byte[app2Segment.length-14];
                System.arraycopy(app2Segment, 14, icc, 0, app2Segment.length-14);
                new IccReader().extract(new ByteArrayReader(icc), metadata);
            }
        }

        // Loop through all APPD segments, checking the leading bytes to identify the format of each.
        for (byte[] appdSegment : segmentReader.getSegments(JpegSegmentReader.SEGMENT_APPD)) {
            if (appdSegment.length > 12 && "Photoshop 3.0".compareTo(new String(appdSegment, 0, 13))==0) {
                new PhotoshopReader().extract(new ByteArrayReader(appdSegment), metadata);
            } else {
                // TODO might be able to check for a leading 0x1c02 for IPTC data...
                new IptcReader().extract(new ByteArrayReader(appdSegment), metadata);
            }
        }

        // Loop through all APPE segments, checking the leading bytes to identify the format of each.
        for (byte[] appeSegment : segmentReader.getSegments(JpegSegmentReader.SEGMENT_APPE)) {
            if (appeSegment.length == 12 && "Adobe".compareTo(new String(appeSegment, 0, 5))==0) {
                new AdobeJpegReader().extract(new ByteArrayReader(appeSegment), metadata);
            }
        }

        return metadata;
    }
View Full Code Here


        Metadata metadata = new Metadata();

        byte[] headerBytes = new byte[26];
        inputStream.read(headerBytes, 0, 26);

        new PsdReader().extract(new ByteArrayReader(headerBytes), metadata);

        return metadata;
    }
View Full Code Here

        // TODO do this in chunks rather than byte-by-byte, and honour 'waitForBytes'
        while((b = inputStream.read()) != -1) {
            out.write(b);
        }
        Metadata metadata = new Metadata();
        new ExifReader().extractTiff(new ByteArrayReader(out.toByteArray()), metadata);
        return metadata;
    }
View Full Code Here

    {
        byte[] values = _directory.getByteArray(tag);
        if (values == null)
            return null;

        BufferReader reader = new ByteArrayReader(values);

        try
        {
            int val1 = reader.getUInt16(0);
            int val2 = reader.getUInt16(2);

            if (val1 == -1 && val2 == 1)
                return "Slim Low";
            if (val1 == -3 && val2 == 2)
                return "Slim High";
View Full Code Here

    }

    private static int getInt32FromString(@NotNull String string) throws BufferBoundsException
    {
        byte[] bytes = string.getBytes();
        return new ByteArrayReader(bytes).getInt32(0);
    }
View Full Code Here

    @Nullable
    public String getJpegQualityString()
    {
        try {
            byte[] b = _directory.getByteArray(PhotoshopDirectory.TAG_PHOTOSHOP_JPEG_QUALITY);
            BufferReader reader = new ByteArrayReader(b);
            int q = reader.getUInt16(0); // & 0xFFFF;
            int f = reader.getUInt16(2); // & 0xFFFF;
            int s = reader.getUInt16(4);

            int q1;
            if (q <= 0xFFFF && q >= 0xFFFD)
                q1 = q - 0xFFFC;
            else if (q <= 8)
View Full Code Here

    {
        try {
            byte[] bytes = _directory.getByteArray(PhotoshopDirectory.TAG_PHOTOSHOP_PIXEL_ASPECT_RATIO);
            if (bytes == null)
                return null;
            BufferReader reader = new ByteArrayReader(bytes);
            double d = reader.getDouble64(4);
            return Double.toString(d);
        } catch (Exception e) {
            return null;
        }
    }
View Full Code Here

    {
        try {
            byte bytes[] = _directory.getByteArray(PhotoshopDirectory.TAG_PHOTOSHOP_PRINT_SCALE);
            if (bytes == null)
                return null;
            BufferReader reader = new ByteArrayReader(bytes);
            int style = reader.getInt32(0);
            float locX = reader.getFloat32(2);
            float locY = reader.getFloat32(6);
            float scale = reader.getFloat32(10);
            switch (style) {
                case 0:
                    return "Centered, Scale " + scale;
                case 1:
                    return "Size to fit";
View Full Code Here

    {
        try {
            byte[] bytes = _directory.getByteArray(PhotoshopDirectory.TAG_PHOTOSHOP_RESOLUTION_INFO);
            if (bytes == null)
                return null;
            BufferReader reader = new ByteArrayReader(bytes);
            float resX = reader.getS15Fixed16(0);
            float resY = reader.getS15Fixed16(8); // is this the correct offset? it's only reading 4 bytes each time
            return resX + "x" + resY + " DPI";
        } catch (Exception e) {
            return null;
        }
    }
View Full Code Here

    {
        try {
            final byte[] bytes = _directory.getByteArray(PhotoshopDirectory.TAG_PHOTOSHOP_VERSION);
            if (bytes == null)
                return null;
            BufferReader reader = new ByteArrayReader(bytes);
            int pos = 0;
            int ver = reader.getInt32(0);
            pos += 4;
            pos++;
            int readerLength = reader.getInt32(5);
            pos += 4;
            String readerStr = reader.getString(9, readerLength * 2, "UTF-16");
            pos += readerLength * 2;
            int writerLength = reader.getInt32(pos);
            pos += 4;
            String writerStr = reader.getString(pos, writerLength * 2, "UTF-16");
            pos += writerLength * 2;
            int fileVersion = reader.getInt32(pos);
            return String.format("%d (%s, %s) %d", ver, readerStr, writerStr, fileVersion);
        } catch (BufferBoundsException e) {
            return null;
        }
    }
View Full Code Here

TOP

Related Classes of com.drew.lang.ByteArrayReader

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.