圖片實現上傳的java類

來源:互聯網
上載者:User

package com.mobi5.commons.utils;

import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

import javax.imageio.ImageIO;

import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGEncodeParam;
import com.sun.image.codec.jpeg.JPEGImageEncoder;

public class ImageZipUtil {

 /**
  * 壓縮圖片檔案<br>
  * 先儲存原檔案,再壓縮、上傳
  *
  * @param oldFile
  *            要進行壓縮的檔案全路徑
  * @param width
  *            寬度
  * @param height
  *            高度
  * @param quality
  *            品質
  * @param smallIcon
  *            小圖片的尾碼
  * @return 返回壓縮後的檔案的全路徑
  */
 public static String zipImageFile(String oldFile, int width, int height,
   float quality, String smallIcon) {
  if (oldFile == null) {
   return null;
  }
  String newImage = null;
  try {
   /** 對伺服器上的臨時檔案進行處理 */
   Image srcFile = ImageIO.read(new File(oldFile));
   /** 寬,高設定 */
   BufferedImage tag = new BufferedImage(width, height,
     BufferedImage.TYPE_INT_RGB);
   tag.getGraphics().drawImage(srcFile, 0, 0, width, height, null);
   String filePrex = oldFile.substring(0, oldFile.indexOf('.'));
   /** 壓縮後的檔案名稱 */
   newImage = filePrex + smallIcon
     + oldFile.substring(filePrex.length());

   /** 壓縮之後臨時存放位置 */
   FileOutputStream out = new FileOutputStream(newImage);

   JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
   JPEGEncodeParam jep = JPEGCodec.getDefaultJPEGEncodeParam(tag);
   /** 壓縮品質 */
   jep.setQuality(quality, true);
   encoder.encode(tag, jep);
   out.close();

  } catch (FileNotFoundException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  }
  return newImage;
 }

 /**
  * 儲存檔案到伺服器臨時路徑
  *
  * @param fileName
  * @param is
  * @return 檔案全路徑
  */
 public static String writeFile(String fileName, InputStream is) {
  if (fileName == null || fileName.trim().length() == 0) {
   return null;
  }
  try {
   /** 首先儲存到臨時檔案 */
   FileOutputStream fos = new FileOutputStream(fileName);
   byte[] readBytes = new byte[512];// 緩衝大小
   int readed = 0;
   while ((readed = is.read(readBytes)) > 0) {
    fos.write(readBytes, 0, readed);
   }
   fos.close();
   is.close();
  } catch (FileNotFoundException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  }
  return fileName;
 }
}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.