==
проверяет ссылочное равенство, однако при написании кода типа:
Integer a = 1;
Integer b = 1;
Java достаточно умен, чтобы повторно использовать неизменное значение для a
и b
, поэтому это верно: a == b
. Любопытно, что я написал небольшой пример, показывающий, где java останавливает оптимизацию таким образом:
public class BoxingLol {
public static void main(String[] args) {
for (int i = 0; i < Integer.MAX_VALUE; i++) {
Integer a = i;
Integer b = i;
if (a != b) {
System.out.println("Done: " + i);
System.exit(0);
}
}
System.out.println("Done, all values equal");
}
}
Когда я компилирую и запускаю это (на моей машине), я получаю:
Done: 128
Согласно JEP 262: TIFF Image I / O плагин TIFF, который ранее был частью JAI, будет доступен как часть Java SE, начиная с Java 9.
Это означает, что с использованием Java 9 будет работать только следующий код без каких-либо дополнительных импортов или зависимостей:
BufferedImage image = ImageIO.read(inputTIFF);
// ...modify image (compose, resize, sharpen, etc)...
ImageIO.write(image, "TIFF", outputTIFF);
Я еще не смог проверить поддержку не- базовый TIFF-ароматизатор в этом плагине, но я предполагаю, что по крайней мере базовые TIFF должны полностью поддерживаться.
Я попробовал JAI, и это не сработало для меня.
blockquote>Где вы застряли? Работает ли для вас следующее?
import java.io.File; import java.io.FileOutputStream; import java.awt.image.RenderedImage; import com.sun.image.codec.jpeg.JPEGCodec; import com.sun.image.codec.jpeg.JPEGImageEncoder; import javax.media.jai.NullOpImage; import javax.media.jai.OpImage; import com.sun.media.jai.codec.SeekableStream; import com.sun.media.jai.codec.FileSeekableStream; import com.sun.media.jai.codec.TIFFDecodeParam; import com.sun.media.jai.codec.ImageDecoder; import com.sun.media.jai.codec.ImageCodec; public class Main { public static void main(String args[]) { File file = new File("input.tif"); try { SeekableStream s = new FileSeekableStream(file); TIFFDecodeParam param = null; ImageDecoder dec = ImageCodec.createImageDecoder("tiff", s, param); RenderedImage op = new NullOpImage(dec.decodeAsRenderedImage(0), null, OpImage.OP_IO_BOUND, null); FileOutputStream fos = new FileOutputStream("output.jpg"); JPEGImageEncoder jpeg = JPEGCodec.createJPEGEncoder(fos); jpeg.encode(op.getData()); fos.close(); } catch (java.io.IOException ioe) { System.out.println(ioe); } } }
Добавить зависимость Maven:
<dependency>
<groupId>org.geotoolkit</groupId>
<artifactId>geotk-coverageio</artifactId>
<version>3.17</version>
</dependency>
Пример кода:
import org.geotoolkit.image.io.plugin.RawTiffImageReader;
IIORegistry registry = IIORegistry.getDefaultInstance();
registry.registerServiceProvider(new RawTiffImageReader.Spi());
String[] a = ImageIO.getReaderFileSuffixes();
for (int i=0; i<a.length; i++) {
System.out.println(a[i]);
}
BufferedImage image = ImageIO.read(new File("C:\\mypic.tiff"));
ImageIO.write(image, "jpg",new File("C:\\out.jpg"));
ImageIO.write(image, "gif",new File("C:\\out.gif"));
ImageIO.write(image, "png",new File("C:\\out.png"));
ImageIO.write(image, "tif",new File("C:\\out.tiff"));