ImageIO.write TIFF возвращает false [дубликат]

== проверяет ссылочное равенство, однако при написании кода типа:

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
22
задан Gle 23 December 2009 в 20:13
поделиться

3 ответа

Согласно 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 должны полностью поддерживаться.

3
ответ дан haraldK 24 August 2018 в 06:11
поделиться
  • 1
    HI haraldK как вы это используете ??? Мне совсем не нравится JAI, я не мог найти никакого примера о том, как преобразовать файл tiff в jpg. Я попытался: BufferedImage image = ImageIO.read (новый файл (inFile)); ! ImageIO.write (изображение, «jpg», новый файл (outFile))) – delkant 8 April 2014 в 00:20
  • 2
    @delkant Это может сработать, если у вас все правильно установлено. Подробнее см. В инструкциях по установке или сообщите о проблеме (с полной информацией), если вы не можете заставить ее работать. – haraldK 8 April 2014 в 11:16

Я попробовал JAI, и это не сработало для меня.

Где вы застряли? Работает ли для вас следующее?

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);
        } 
    }
}
3
ответ дан MPG 24 August 2018 в 06:11
поделиться
  • 1
    Когда у вас есть jai_imageio.jar в вашем пути к классам, вы должны просто использовать API ImageIO как обычно – MadProgrammer 18 July 2012 в 01:08
  • 2
    какая версия jar это и какой репозиторий он хранится? Я посмотрел на Мейвена и не мог найти его. – SoftwareSavant 10 May 2018 в 23:51

Добавить зависимость 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"));
-3
ответ дан Stephan 24 August 2018 в 06:11
поделиться
  • 1
    Боюсь, что зависимость больше не работает. Что сработало для меня: & lt; dependency & gt; & Lt; идентификатор_группа & GT; com.github.jai-ImageIO & л; / идентификатор_группа & GT; & Lt; артефакт & GT; джайте-ImageIO-жильный & л; / артефакт & GT; & Lt; & версии GT; 1.3.1 & л; / & версии GT; & Lt; / зависимость & GT; (Я не проверял весь ваш код). – DarkPurpleShadow 18 July 2017 в 08:32
Другие вопросы по тегам:

Похожие вопросы: