public ThumbnailStreamOpener get() { List<ImageHeaderParser> parsers = new ArrayList<>(); parsers.add(new DefaultImageHeaderParser()); return new ThumbnailStreamOpener( parsers, service, query, byteArrayPool, getContentResolver()); } }
private static void runTest(byte[] data, ParserTestCase test) throws IOException { InputStream is = new ByteArrayInputStream(data); DefaultImageHeaderParser parser = new DefaultImageHeaderParser(); test.run(parser, is, new LruArrayPool()); ByteBuffer buffer = ByteBuffer.wrap(data); parser = new DefaultImageHeaderParser(); test.run(parser, buffer, new LruArrayPool()); }
private static Downsampler buildDownsampler() { List<ImageHeaderParser> parsers = Collections.<ImageHeaderParser>singletonList(new DefaultImageHeaderParser()); DisplayMetrics displayMetrics = new DisplayMetrics(); // XHDPI. displayMetrics.densityDpi = 320; BitmapPool bitmapPool = new BitmapPoolAdapter(); ArrayPool arrayPool = new LruArrayPool(); return new Downsampler(parsers, displayMetrics, bitmapPool, arrayPool); }
@Test public void getOrientation_withExifSegmentAndPreambleButLessThanLength_returnsUnknown() throws IOException { ByteBuffer jpegHeaderBytes = getExifMagicNumber(); ByteBuffer exifSegmentPreamble = ByteBuffer.wrap(DefaultImageHeaderParser.JPEG_EXIF_SEGMENT_PREAMBLE_BYTES); ByteBuffer data = ByteBuffer.allocate(2 + 1 + 1 + 2 + exifSegmentPreamble.capacity()); data.put(jpegHeaderBytes) .put((byte) DefaultImageHeaderParser.SEGMENT_START_ID) .put((byte) DefaultImageHeaderParser.EXIF_SEGMENT_TYPE) // SEGMENT_LENGTH, add two because length includes the segment length short, and one to go // beyond the preamble bytes length for the test. .putShort( (short) (DefaultImageHeaderParser.JPEG_EXIF_SEGMENT_PREAMBLE_BYTES.length + 2 + 1)) .put(DefaultImageHeaderParser.JPEG_EXIF_SEGMENT_PREAMBLE_BYTES); data.position(0); DefaultImageHeaderParser parser = new DefaultImageHeaderParser(); assertEquals(ImageHeaderParser.UNKNOWN_ORIENTATION, parser.getOrientation(data, byteArrayPool)); }
@Test public void getOrientation_withExifSegmentAndPreambleBetweenLengthAndExpected_returnsUnknown() throws IOException { ByteBuffer jpegHeaderBytes = getExifMagicNumber(); ByteBuffer exifSegmentPreamble = ByteBuffer.wrap(DefaultImageHeaderParser.JPEG_EXIF_SEGMENT_PREAMBLE_BYTES); ByteBuffer data = ByteBuffer.allocate(2 + 1 + 1 + 2 + exifSegmentPreamble.capacity() + 2 + 1); data.put(jpegHeaderBytes) .put((byte) DefaultImageHeaderParser.SEGMENT_START_ID) .put((byte) DefaultImageHeaderParser.EXIF_SEGMENT_TYPE) // SEGMENT_LENGTH, add two because length includes the segment length short, and one to go // beyond the preamble bytes length for the test. .putShort( (short) (DefaultImageHeaderParser.JPEG_EXIF_SEGMENT_PREAMBLE_BYTES.length + 2 + 1)) .put(DefaultImageHeaderParser.JPEG_EXIF_SEGMENT_PREAMBLE_BYTES); data.position(0); DefaultImageHeaderParser parser = new DefaultImageHeaderParser(); assertEquals(ImageHeaderParser.UNKNOWN_ORIENTATION, parser.getOrientation(data, byteArrayPool)); }
@Test public void testIssue387() throws IOException { InputStream is = TestResourceUtil.openResource(getClass(), "issue387_rotated_jpeg.jpg"); assertThat(new DefaultImageHeaderParser().getOrientation(is, byteArrayPool)).isEqualTo(6); }
@Before public void setUp() { MockitoAnnotations.initMocks(this); List<ImageHeaderParser> parsers = new ArrayList<>(); parsers.add(new DefaultImageHeaderParser()); decoder = new StreamGifDecoder(parsers, byteBufferDecoder, new LruArrayPool()); options = new Options(); }
@Test public void getOrientation_withExifSegmentLessThanLength_returnsUnknown() throws IOException { ByteBuffer jpegHeaderBytes = getExifMagicNumber(); byte[] data = new byte[] { jpegHeaderBytes.get(0), jpegHeaderBytes.get(1), (byte) DefaultImageHeaderParser.SEGMENT_START_ID, (byte) DefaultImageHeaderParser.EXIF_SEGMENT_TYPE, // SEGMENT_LENGTH (byte) 0xFF, (byte) 0xFF, }; ByteBuffer byteBuffer = ByteBuffer.wrap(data); DefaultImageHeaderParser parser = new DefaultImageHeaderParser(); assertEquals(ImageHeaderParser.UNKNOWN_ORIENTATION, parser.getOrientation(byteBuffer, byteArrayPool)); }
private void assertOrientation(String filePrefix, int expectedOrientation) { InputStream is = null; try { is = open(filePrefix + "_" + expectedOrientation + ".jpg"); assertEquals(new DefaultImageHeaderParser().getOrientation(is, byteArrayPool), expectedOrientation); } catch (IOException e) { throw new RuntimeException(e); } finally { if (is != null) { try { is.close(); } catch (IOException e) { // Do nothing. } } } }
@Test public void getOrientation_withNonExifSegmentLessThanLength_returnsUnknown() throws IOException { ByteBuffer jpegHeaderBytes = getExifMagicNumber(); byte[] data = new byte[] { jpegHeaderBytes.get(0), jpegHeaderBytes.get(1), (byte) DefaultImageHeaderParser.SEGMENT_START_ID, // SEGMENT_TYPE (NOT EXIF_SEGMENT_TYPE) (byte) 0xE5, // SEGMENT_LENGTH (byte) 0xFF, (byte) 0xFF, }; ByteBuffer byteBuffer = ByteBuffer.wrap(data); DefaultImageHeaderParser parser = new DefaultImageHeaderParser(); assertEquals(ImageHeaderParser.UNKNOWN_ORIENTATION, parser.getOrientation(byteBuffer, byteArrayPool)); }
@Test public void testHandlesSometimesZeroSkips() throws IOException { InputStream is = new ByteArrayInputStream( new byte[] { (byte) 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a }); DefaultImageHeaderParser parser = new DefaultImageHeaderParser(); assertEquals(ImageType.PNG, parser.getType(new SometimesZeroSkipInputStream(is))); }
@Test public void testHandlesPartialReads() throws IOException { InputStream is = TestResourceUtil.openResource(getClass(), "issue387_rotated_jpeg.jpg"); DefaultImageHeaderParser parser = new DefaultImageHeaderParser(); assertThat(parser.getOrientation(new PartialReadInputStream(is), byteArrayPool)).isEqualTo(6); }
@Test public void testHandlesPartialSkips() throws IOException { InputStream is = TestResourceUtil.openResource(getClass(), "issue387_rotated_jpeg.jpg"); DefaultImageHeaderParser parser = new DefaultImageHeaderParser(); assertThat(parser.getOrientation(new PartialSkipInputStream(is), byteArrayPool)).isEqualTo(6); }
@Before public void setUp() { MockitoAnnotations.initMocks(this); gifHeader = Mockito.spy(new GifHeader()); when(parser.parseHeader()).thenReturn(gifHeader); when(parserPool.obtain(isA(ByteBuffer.class))).thenReturn(parser); when(decoderFactory.build(isA(GifDecoder.BitmapProvider.class), eq(gifHeader), isA(ByteBuffer.class), anyInt())) .thenReturn(gifDecoder); List<ImageHeaderParser> parsers = new ArrayList<>(); parsers.add(new DefaultImageHeaderParser()); options = new Options(); decoder = new ByteBufferGifDecoder( RuntimeEnvironment.application, parsers, bitmapPool, new LruArrayPool(ARRAY_POOL_SIZE_BYTES), parserPool, decoderFactory); }
@Test public void testIncludesGivenExifOrientation() throws IOException { for (int i = 0; i < 8; i++) { for (int j = 0; j < 8; j++) { InputStream toWrap = openOrientationExample(true /*isLandscape*/, j + 1); InputStream wrapped = new ExifOrientationStream(toWrap, i); DefaultImageHeaderParser parser = new DefaultImageHeaderParser(); assertThat(parser.getOrientation(wrapped, byteArrayPool)).isEqualTo(i); toWrap = openOrientationExample(false /*isLandscape*/, j + 1); wrapped = new ExifOrientationStream(toWrap, i); assertThat(parser.getOrientation(wrapped, byteArrayPool)).isEqualTo(i); } } } }
registry.register(new DefaultImageHeaderParser());
registry.register(new DefaultImageHeaderParser());