posts - 1,  comments - 25,  trackbacks - 0

          The project requirements: Should convert TIF into JPG with JAVA, But seems only IMAGEIO can't support TIF.
          So should use JAI, Java Advantage Image jars.

          JAI api download page: http://download.java.net/media/jai/builds/release/1_1_3/

          J
          AI API document page: http://download.oracle.com/docs/cd/E17802_01/products/products/java-media/jai/forDevelopers/jai-apidocs/index.html



          C
          ode as below:
          package com.ebay.test1;
          import java.awt.image.RenderedImage;
          import java.io.ByteArrayInputStream;
          import java.io.ByteArrayOutputStream;
          import java.io.File;
          import java.io.FileInputStream;
          import java.io.FileNotFoundException;
          import java.io.FileOutputStream;
          import java.io.IOException;
          import java.io.InputStream;
          import javax.imageio.ImageIO;
          import javax.media.jai.JAI;
          import javax.media.jai.RenderedOp;
          import org.junit.Test;
          import com.sun.media.jai.codec.ImageCodec;
          import com.sun.media.jai.codec.ImageDecoder;
          import com.sun.media.jai.codec.ImageEncoder;
          import com.sun.media.jai.codec.JPEGEncodeParam;
          public class Snippet {
          @Test
          public void testTif2JPG2(){
          try{
          String filename =  "F:\\Downloads\\CCITT_2.TIF";
          String jpegFileName = "F:\\Downloads\\CCITT_2.JPG";
          RenderedOp source = JAI.create("fileload", filename);
          FileOutputStream stream = null;
          stream = new FileOutputStream(jpegFileName );
          com.sun.media.jai.codec.JPEGEncodeParam JPEGparam = new
          com.sun.media.jai.codec.JPEGEncodeParam();
          ImageEncoder encoder =
          ImageCodec.createImageEncoder("jpeg",stream,JPEGparam);
          encoder.encode(source);
          }catch(Exception e){
          e.printStackTrace();
          }
          }
          @Test
          public void testTif2JPG3(){
          try{
          String filename =  "F:\\Downloads\\CCITT_2.TIF";
          String jpegFileName = "F:\\Downloads\\CCITT_2.JPG";
          FileOutputStream stream = null;
          stream = new FileOutputStream(jpegFileName );
          byte[] b = getBytesFromFile(new File(filename));
          InputStream bais = new ByteArrayInputStream(b);
          ImageDecoder decoder = ImageCodec.createImageDecoder("tiff", bais, null);
                      RenderedImage ri = decoder.decodeAsRenderedImage();
          // RenderedOp source = JAI.create("TIFF", bais);
          ByteArrayOutputStream baos = new ByteArrayOutputStream();
          JPEGEncodeParam JPEGparam = new JPEGEncodeParam();
          JPEGparam.setQuality(Float.MIN_VALUE);
          ImageEncoder encoder = ImageCodec.createImageEncoder("jpeg",baos,JPEGparam);
          encoder.encode(ri);
          byte[] byteArray = baos.toByteArray();
          FileOutputStream fos = new FileOutputStream(new File(jpegFileName));
          fos.write(byteArray);
          }catch(Exception e){
          e.printStackTrace();
          }
          }
           @Test
          public void testTif2JPG4(){
          try{
          String filename =  "F:\\Downloads\\CCITT_2.TIF";
          String jpegFileName = "F:\\Downloads\\CCITT_2.JPG";
          FileOutputStream stream = null;
          stream = new FileOutputStream(jpegFileName );
          byte[] b = getBytesFromFile(new File(filename));
          InputStream bais = new ByteArrayInputStream(b);
                      ImageDecoder decoder = ImageCodec.createImageDecoder("tiff", bais, null);
                      RenderedImage ri = decoder.decodeAsRenderedImage();
                      ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
                      ImageIO.write(ri, "JPEG", outputStream);
                      stream.write(outputStream.toByteArray());
          }catch(Exception e){
          e.printStackTrace();
          }
          }
          // Returns the contents of the file in a byte array.
              public static byte[] getBytesFromFile(File file) throws IOException {
                  InputStream is = new FileInputStream(file);
              
                  // Get the size of the file
                  long length = file.length();
              
                  // You cannot create an array using a long type.
                  // It needs to be an int type.
                  // Before converting to an int type, check
                  // to ensure that file is not larger than Integer.MAX_VALUE.
                  if (length > Integer.MAX_VALUE) {
                  throw new IllegalArgumentException("File is too big, can't support.");
                  }
              
                  // Create the byte array to hold the data
                  byte[] bytes = new byte[(int)length];
              
                  // Read in the bytes
                  int offset = 0;
                  int numRead = 0;
                  while (offset < bytes.length
                         && (numRead=is.read(bytes, offset, bytes.length-offset)) >= 0) {
                      offset += numRead;
                  }
              
                  // Ensure all the bytes have been read in
                  if (offset < bytes.length) {
                      throw new IOException("Could not completely read file "+file.getName());
                  }
              
                  // Close the input stream and return bytes
                  is.close();
                  return bytes;
              }
          }
          posted on 2011-05-27 22:39 Daniel 閱讀(2210) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          常用鏈接

          留言簿(3)

          隨筆檔案

          文章分類

          文章檔案

          相冊

          搜索

          •  

          最新評論

          主站蜘蛛池模板: 璧山县| 左贡县| 玉门市| 准格尔旗| 永济市| 定州市| 泌阳县| 攀枝花市| 淳安县| 于都县| 仙游县| 五河县| 湖口县| 北海市| 南安市| 曲阳县| 河北省| 普兰县| 宁乡县| 祁门县| 吴忠市| 龙胜| 黄石市| 锡林郭勒盟| 修武县| 桂东县| 和林格尔县| 灵寿县| 监利县| 深水埗区| 成都市| 卢龙县| 姜堰市| 云南省| 安西县| 江孜县| 鄯善县| 合水县| 石柱| 乌鲁木齐县| 青州市|