Я так и не понял, почему он периодически выбрасывает IllegalArgumentException
для тех же самых точных вводов, но я обновил свое приложение GAE до Java 8, что позволило мне использовать ImageIO:
protected byte[] convertToJpeg(byte[] tiffByteArray) {
final BufferedImage tif = ImageIO.read(new ByteArrayInputStream(tiffByteArray))
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream()
final ImageWriter writer = ImageIO.getImageWritersByFormatName("jpg").next()
writer.setOutput(new MemoryCacheImageOutputStream(byteArrayOutputStream))
JPEGImageWriteParam jpegParams = new JPEGImageWriteParam(null)
jpegParams.setCompressionMode(ImageWriteParam.MODE_EXPLICIT)
jpegParams.setCompressionQuality(0.4f)
writer.write(null, new IIOImage(tif, null, null), jpegParams)
return byteArrayOutputStream.toByteArray()
}
Для TIFF это требовало дополнительной зависимости Gradle:
compile group: 'com.github.jai-imageio', name: 'jai-imageio-core', version: '1.3.1'