Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中将TIF转换为PNG?_Java_Image_Png_Tiff_Image Conversion - Fatal编程技术网

如何在Java中将TIF转换为PNG?

如何在Java中将TIF转换为PNG?,java,image,png,tiff,image-conversion,Java,Image,Png,Tiff,Image Conversion,在Java下,将TIF文件转换为PNG的最佳方式是什么 简单是比较好的,但是如果最简单的方法是使用第三方库,那么我会考虑这个解决方案。 < P> java高级成像API是一个很好的图像处理库。 首先,安装。然后安装。那就做吧 使用java库,例如,它们的性能和质量要比JAI好得多 例如: import org.im4java.core.ConvertCmd; import org.im4java.core.IMOperation; public static void convertTifTo

在Java下,将TIF文件转换为PNG的最佳方式是什么


简单是比较好的,但是如果最简单的方法是使用第三方库,那么我会考虑这个解决方案。

< P> java高级成像API是一个很好的图像处理库。 首先,安装。然后安装。那就做吧

使用java库,例如,它们的性能和质量要比JAI好得多

例如:

import org.im4java.core.ConvertCmd;
import org.im4java.core.IMOperation;

public static void convertTifToPng(File inputImage, File outputImage){
  IMOperation op = new IMOperation();
  op.addImage(); //place holder for input file
  op.addImage(); //place holder for output file

  ConvertCmd convert = new ConvertCmd();
  convert.run(op, new Object[]{inputImage.getAbsolutePath(), outputImage.getAbsolutePath()});
}
im4java的maven依赖关系是

<dependency>
  <groupId>im4java</groupId>
  <artifactId>im4java</artifactId>
  <version>0.98.0</version>
</dependency>

im4java
im4java
0.98.0

下载JIMI软件开发工具包jimi1\u 0.zip,并将JimiProClasses.zip设置为您的类路径

JIMI是较旧的java映像库,但它易于使用,并且没有依赖于平台的代码(没有本机可执行文件,可以像标准jar一样使用它)


其中inMimeType和outMimeType是图形格式mimetype

也许你可以使用这段代码,对我有用

import java.awt.Color;
import java.awt.image.BufferedImage;
import java.awt.image.RenderedImage;
import java.awt.image.renderable.ParameterBlock;
import java.io.File;
import java.io.IOException;

import javax.media.jai.JAI;
import javax.media.jai.RenderedOp;

import com.sun.media.jai.codec.FileSeekableStream;
import com.sun.media.jai.codec.ImageCodec;
import com.sun.media.jai.codec.ImageDecoder;
import com.sun.media.jai.codec.SeekableStream;

public class ImageConvert {

    public static RenderedImage[] readMultiPageTiff(String fileName)throws IOException{
           File file = new File(fileName);
           SeekableStream seekableStream = new FileSeekableStream(file);
           ImageDecoder decoder = ImageCodec.createImageDecoder("tiff", seekableStream, null);
           int numPages = decoder.getNumPages();
           RenderedImage image[]= new RenderedImage[numPages];
           int count = 0;
           for(int i=0;i<decoder.getNumPages();i++){
               image[i] = decoder.decodeAsRenderedImage(i);
               count++;
           }

           String newFolderName;
           String s3 = fileName;
           String [] temp = null;
           temp = s3.split("\\.");


           int j;
               j = 0;
               do{
                     newFolderName = temp[j];
                     String spoonFeeding = newFolderName;
                     File f = new File(spoonFeeding);
                     f.mkdirs();
                     j++;
               }while (j<1);

           for (int i = 0; i < count; i++) {
               RenderedImage page = decoder.decodeAsRenderedImage(i);
               File fileObj = new File(newFolderName+"/" + (i+1) + ".png");
               System.out.println("Saving " + fileObj.getCanonicalPath());
               ParameterBlock parBlock = new ParameterBlock();
               parBlock.addSource(page);
               parBlock.add(fileObj.toString());
               parBlock.add("png");
               RenderedOp renderedOp = JAI.create("filestore",parBlock);
               renderedOp.dispose();
           }
           return image;
        }

}
导入java.awt.Color;
导入java.awt.image.buffereImage;
导入java.awt.image.renderImage;
导入java.awt.image.renderable.ParameterBlock;
导入java.io.File;
导入java.io.IOException;
导入javax.media.jai.jai;
导入javax.media.jai.renderop;
导入com.sun.media.jai.codec.FileSeekableStream;
导入com.sun.media.jai.codec.ImageCodec;
导入com.sun.media.jai.codec.ImageDecoder;
导入com.sun.media.jai.codec.SeekableStream;
公共类图像转换{
公共静态RenderImage[]readMultiPageTiff(字符串文件名)引发IOException{
文件=新文件(文件名);
SeekableStream SeekableStream=新文件SeekableStream(文件);
ImageDecoder decoder=ImageCodec.createImageDecoder(“tiff”,seekableStream,null);
int numPages=decoder.getNumPages();
RenderImage[]=新的RenderImage[numPages];
整数计数=0;

对于(int i=0;iYeah我在看这个,我真的不知道如何安装它。他们有一个下载ZIP,其中包含一个JAR文件和一个EXE文件。我以前从未见过。你能解释一下非标准安装是怎么回事吗?通常Java库只是放在类路径中的JAR文件,但是JAI安装如果部署到web服务器,这是如何工作的?您也可以获得纯java JAI,但如果您的平台由本机代码支持,则没有理由这样做。如果您将应用部署到web服务器,则服务器的JRE还必须安装JAI和JAI/ImageIO扩展。@Jonathan Feinberg,您需要吗o在类路径中包含JAR,还是安装扩展使其成为JRE的一部分?安装程序会尽一切努力使其“正常工作”很抱歉打扰你们,JAI和JAI/ImageIO的下载链接在哪里?我同意IM的质量很好,但我会非常担心在这样的过程中使用它(因为,在我看来,工程质量不好,可能会有致命的崩溃)。如果我打算使用IM,我会转而使用ProcessBuilder进行转换。@giladbu:ImageMagick很棒,我按照Jonathan的建议进行转换,但我只想评论一下“质量”部分:我非常怀疑JAI在阅读有损TIFF时会产生比ImageMagick质量更差的图像(如果OP的TIFF有损).至于PNG,它是无损的,JAI不会出错。所以在TIFF到PNG的案例中,我不同意ImageMagick的质量会比JAI好。对于TIFF到JPG,我们现在谈论的是完全不同的东西,我会使用ImageMagick,不会三思而后行。嗯,我没有意识到PNG是无损的。那么ImageMa呢gic方法需要?安装ImageMagic命令行工具,然后将im4java JAR插入到我的项目中?im4java确实使用ProcessBuilder进行转换。它适用于jpg、jpeg、png,但不适用于tiff
import java.awt.Image;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;

import com.sun.jimi.core.Jimi;

public class JIMIImageConverter {

public static byte[] convert(byte[] inBytes, String inMimeType, String outMimeType) throws Exception{

    Image rawImage = Jimi.getImage(new ByteArrayInputStream(inBytes), inMimeType);
    ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
    Jimi.putImage(outMimeType, rawImage, outputStream);
    return outputStream.toByteArray();

}

}
import java.awt.Color;
import java.awt.image.BufferedImage;
import java.awt.image.RenderedImage;
import java.awt.image.renderable.ParameterBlock;
import java.io.File;
import java.io.IOException;

import javax.media.jai.JAI;
import javax.media.jai.RenderedOp;

import com.sun.media.jai.codec.FileSeekableStream;
import com.sun.media.jai.codec.ImageCodec;
import com.sun.media.jai.codec.ImageDecoder;
import com.sun.media.jai.codec.SeekableStream;

public class ImageConvert {

    public static RenderedImage[] readMultiPageTiff(String fileName)throws IOException{
           File file = new File(fileName);
           SeekableStream seekableStream = new FileSeekableStream(file);
           ImageDecoder decoder = ImageCodec.createImageDecoder("tiff", seekableStream, null);
           int numPages = decoder.getNumPages();
           RenderedImage image[]= new RenderedImage[numPages];
           int count = 0;
           for(int i=0;i<decoder.getNumPages();i++){
               image[i] = decoder.decodeAsRenderedImage(i);
               count++;
           }

           String newFolderName;
           String s3 = fileName;
           String [] temp = null;
           temp = s3.split("\\.");


           int j;
               j = 0;
               do{
                     newFolderName = temp[j];
                     String spoonFeeding = newFolderName;
                     File f = new File(spoonFeeding);
                     f.mkdirs();
                     j++;
               }while (j<1);

           for (int i = 0; i < count; i++) {
               RenderedImage page = decoder.decodeAsRenderedImage(i);
               File fileObj = new File(newFolderName+"/" + (i+1) + ".png");
               System.out.println("Saving " + fileObj.getCanonicalPath());
               ParameterBlock parBlock = new ParameterBlock();
               parBlock.addSource(page);
               parBlock.add(fileObj.toString());
               parBlock.add("png");
               RenderedOp renderedOp = JAI.create("filestore",parBlock);
               renderedOp.dispose();
           }
           return image;
        }

}