package com.gblfy.util;
import com.sun.jimi.core.Jimi;
import com.sun.jimi.core.JimiException;
import com.sun.jimi.core.JimiWriter;
import com.sun.jimi.core.options.JPGOptions;
import com.sun.jimi.core.options.PNGOptions;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.awt.image.ImageProducer;
import java.io.File;
/*******************************************************************************
*
* @direction: 圖像格式轉換類(轉換時不需要關心源圖的格式)
* @support : GIF(no compressed encoding), JPEG, TIFF, PNG, PICT, BMP, Targa,
* ICO, CUR, XBM, XPM, PCX, DCX
* @author : gblfy
******************************************************************************/
public class ImageConverUtil {
public static String FILE_SUFFIX=".tif";
// public static String FILE_SUFFIX=".jpg";
public static String DEL_FILE_SUFFIX=".tif";
// public static String DEL_FILE_SUFFIX=".jpg";
/**
* 任意圖片轉換
*
* @param sSourceImage 源圖片
* @param sDestImage 轉換後的圖片
* @param fileSuffix 轉換後的圖片擴展名
* @return
*/
public static boolean imageConvertCommon(String sSourceImage, String sDestImage, String fileSuffix) {
if (sSourceImage == null || sSourceImage.trim().equals("")) {
System.out.println("JimiImageUtil.convertTo" + fileSuffix.toUpperCase() + "() : 要轉換的源圖像文件路徑不能爲空!");
return false;
}
if (sDestImage == null || sDestImage.trim().equals("")) {
sDestImage = sSourceImage.substring(0, sSourceImage.lastIndexOf(".")) + fileSuffix;
} else if (!sDestImage.endsWith(fileSuffix)) {
sDestImage += fileSuffix;
}
//檢查源圖像文件
File tSourceImageFile = new File(sSourceImage);
if (!tSourceImageFile.exists()) {
System.out.println("JimiImageUtil.convertTo" + fileSuffix.toUpperCase() + "() : 要轉換的源圖像文件路徑不存在!");
return false;
} else if (!tSourceImageFile.canRead()) {
System.out.println("JimiImageUtil.convertTo" + fileSuffix.toUpperCase() + "(): 要轉換的源圖像文件路徑不可讀!");
return false;
} else if (!tSourceImageFile.isFile()) {
System.out.println("JimiImageUtil.convertTo" + fileSuffix.toUpperCase() + "() : 要轉換的源圖像路徑不是一個有效的文件名!");
return false;
}
long lRunStartTime = System.currentTimeMillis();
try {
BufferedImage bi = ImageIO.read(tSourceImageFile);
if (bi == null) {
//圖片解碼錯誤
System.out.println("Jre:" + System.getProperty("java.version"));
System.out.println(" JimiImageUtil.convertTo" + fileSuffix.toUpperCase() + "() : 要轉換的源圖像解碼錯誤!");
return false;
}
if (!ImageIO.write(bi, fileSuffix.replace(".", ""), new File(sDestImage))) {
System.out.println(" JimiImageUtil.convertTo" + fileSuffix.toUpperCase() + "() : 轉換圖像格式發生異常!");
return false;
}
long lRunEndTime = System.currentTimeMillis();
long lRunTime = lRunEndTime - lRunStartTime;
System.out.println(" JimiImageUtil.convertToJPG() 運行時間 : " + lRunTime + " 毫秒");
} catch (Exception e) {
System.out.println(" JimiImageUtil.convertTo" + fileSuffix.toUpperCase() + "() : 轉換圖像格式發生異常!");
return false;
}
return true;
}
/**
* 圖片轉gif
*
* @param sSourceImage 源圖片的絕對路徑 D:\5\1.jpg D:\5\1.png
* @param sDestImage 轉換後的gif圖片路徑 D:\5\1.gif
* @return
*/
public static boolean imageConvertToGIF(String sSourceImage, String sDestImage) {
if (sSourceImage == null || sSourceImage.trim().equals("")) {
System.out.println(" JimiImageUtil.convertToGIF() : 要轉換的源圖像文件路徑不能爲空!");
return false;
}
if (sDestImage == null || sDestImage.trim().equals("")) {
sDestImage = sSourceImage.substring(0, sSourceImage.lastIndexOf(".")) + ".gif";
} else if (!sDestImage.endsWith(".gif")) {
sDestImage += ".gif";
}
//檢查源圖像文件
File tSourceImageFile = new File(sSourceImage);
if (!tSourceImageFile.exists()) {
System.out.println(" JimiImageUtil.convertToGIF() : 要轉換的源圖像文件路徑不存在!");
return false;
} else if (!tSourceImageFile.canRead()) {
System.out.println(" JimiImageUtil.convertToGIF() : 要轉換的源圖像文件路徑不可讀!");
return false;
} else if (!tSourceImageFile.isFile()) {
System.out.println(" JimiImageUtil.convertToGIF() : 要轉換的源圖像路徑不是一個有效的文件名!");
return false;
}
try {
BufferedImage bi = ImageIO.read(tSourceImageFile);
if (bi == null) {
//圖片解碼錯誤
System.out.println("Jre:" + System.getProperty("java.version"));
System.out.println(" JimiImageUtil.convertToGIF() : 要轉換的源圖像解碼錯誤!");
return false;
}
if (!ImageIO.write(bi, "gif", new File(sDestImage))) {
System.out.println(" JimiImageUtil.convertToGIF() : 轉換圖像格式發生異常!");
return false;
}
} catch (Exception e) {
System.out.println(" JimiImageUtil.convertToGIF() : 轉換圖像格式發生異常!");
return false;
}
return true;
}
/**
* 圖片轉Tif
*
* @param sSourceImage
* @param sDestImage
* @return
*/
public static boolean imageConvertToTif(String sSourceImage, String sDestImage) {
if (sSourceImage == null || sSourceImage.trim().equals("")) {
System.out.println(" JimiImageUtil.convertToGIF() : 要轉換的源圖像文件路徑不能爲空!");
return false;
}
if (sDestImage == null || sDestImage.trim().equals("")) {
sDestImage = sSourceImage.substring(0, sSourceImage.lastIndexOf(".")) + ".tif";
} else if (!sDestImage.endsWith(".tif")) {
sDestImage += ".tif";
}
//檢查源圖像文件
File tSourceImageFile = new File(sSourceImage);
if (!tSourceImageFile.exists()) {
System.out.println(" JimiImageUtil.convertToTif() : 要轉換的源圖像文件路徑不存在!");
return false;
} else if (!tSourceImageFile.canRead()) {
System.out.println(" JimiImageUtil.convertToTif() : 要轉換的源圖像文件路徑不可讀!");
return false;
} else if (!tSourceImageFile.isFile()) {
System.out.println(" JimiImageUtil.convertToTif() : 要轉換的源圖像路徑不是一個有效的文件名!");
return false;
}
try {
BufferedImage bi = ImageIO.read(tSourceImageFile);
if (bi == null) {
//圖片解碼錯誤
System.out.println("Jre:" + System.getProperty("java.version"));
System.out.println(" JimiImageUtil.convertToTif() : 要轉換的源圖像解碼錯誤!");
return false;
}
if (!ImageIO.write(bi, "tif", new File(sDestImage))) {
System.out.println(" JimiImageUtil.convertToTif() : 轉換圖像格式發生異常!");
return false;
}
} catch (Exception e) {
System.out.println("JimiImageUtil.convertToTif() : 轉換圖像格式發生異常!");
return false;
}
return true;
}
/**
* 轉換圖像格式爲 JPG
*
* @param sSourceImage, 其它格式的源圖像文件路徑
* @param sDestImage, 目標 JPG 圖像文件存放路徑
* @param nQuality, 品質, 0-100, 數值越高品質越好
* @return
*/
public static boolean imageConvertToJPG(String sSourceImage, String sDestImage, int nQuality) {
if (sSourceImage == null || sSourceImage.trim().equals("")) {
System.out.println(" JimiImageUtil.convertToJPG() : 要轉換的源圖像文件路徑不能爲空!");
return false;
}
if (sDestImage == null || sDestImage.trim().equals("")) {
sDestImage = sSourceImage.substring(0, sSourceImage.lastIndexOf(".")) + ".jpg";
} else if (!sDestImage.endsWith(".jpg")) {
sDestImage += ".jpg";
}
//檢查源圖像文件
File tSourceImageFile = new File(sSourceImage);
if (!tSourceImageFile.exists()) {
System.out.println(" JimiImageUtil.convertToJPG() : 要轉換的源圖像文件路徑不存在!");
return false;
} else if (!tSourceImageFile.canRead()) {
System.out.println(" JimiImageUtil.convertToJPG() : 要轉換的源圖像文件路徑不可讀!");
return false;
} else if (!tSourceImageFile.isFile()) {
System.out.println(" JimiImageUtil.convertToJPG() : 要轉換的源圖像路徑不是一個有效的文件名!");
return false;
}
tSourceImageFile = null;
try {
long lRunStartTime = System.currentTimeMillis();
JPGOptions tJPGOptions = new JPGOptions();
if (nQuality < 0 || nQuality > 100) {
tJPGOptions.setQuality(75);
} else {
tJPGOptions.setQuality(nQuality);
}
ImageProducer tImageProducer = Jimi.getImageProducer(sSourceImage);
JimiWriter tJimiWriter = Jimi.createJimiWriter(sDestImage);
tJimiWriter.setSource(tImageProducer);
tJimiWriter.setOptions(tJPGOptions);
tJimiWriter.putImage(sDestImage);
tImageProducer = null;
tJimiWriter = null;
tJPGOptions = null;
long lRunEndTime = System.currentTimeMillis();
long lRunTime = lRunEndTime - lRunStartTime;
System.out.println(" JimiImageUtil.convertToJPG() 運行時間 : " + lRunTime + " 毫秒");
} catch (JimiException je) {
System.out.println(" JimiImageUtil.convertToJPG() : 轉換圖像格式發生異常!");
je.printStackTrace();
return false;
} catch (Exception ex) {
ex.printStackTrace();
return false;
}
return true;
}
/**
* 轉換圖像格式爲 PNG
*
* @param sSourceImage , 其它格式的源圖像文件路徑
* @param sDestImage ,目標 PNG 圖像文件存放路徑
* @param sCompression ,壓縮比, none, default, fast, max
* @return
*/
public static boolean imageConvertToPNG(String sSourceImage, String sDestImage, String sCompression) {
if (sSourceImage == null || sSourceImage.trim().equals("")) {
System.out.println(" JimiImageUtil.convertToPNG() : 要轉換的源圖像文件路徑不能爲空!");
return false;
}
if (sDestImage == null || sDestImage.trim().equals("")) {
sDestImage = sSourceImage.substring(0, sSourceImage.lastIndexOf(".")) + ".png";
} else if (!sDestImage.endsWith(".png")) {
sDestImage += ".png";
}
//----------------------------------------------------------------------
//檢查源圖像文件
File tSourceImageFile = new File(sSourceImage);
if (!tSourceImageFile.exists()) {
System.out.println(" JimiImageUtil.convertToPNG() : 要轉換的源圖像文件路徑不存在!");
return false;
} else if (!tSourceImageFile.canRead()) {
System.out.println(" JimiImageUtil.convertToPNG() : 要轉換的源圖像文件路徑不可讀!");
return false;
} else if (!tSourceImageFile.isFile()) {
System.out.println(" JimiImageUtil.convertToPNG() : 要轉換的源圖像路徑不是一個有效的文件名!");
return false;
}
tSourceImageFile = null;
try {
long lRunStartTime = System.currentTimeMillis();
PNGOptions tPNGOptions = new PNGOptions();
if (sCompression == null || sCompression.trim().equals("")) {
tPNGOptions.setCompressionType(PNGOptions.COMPRESSION_DEFAULT);
} else if (sCompression.equalsIgnoreCase("none")) {
tPNGOptions.setCompressionType(PNGOptions.COMPRESSION_NONE);
} else if (sCompression.equalsIgnoreCase("fast")) {
tPNGOptions.setCompressionType(PNGOptions.COMPRESSION_FAST);
} else if (sCompression.equalsIgnoreCase("max")) {
tPNGOptions.setCompressionType(PNGOptions.COMPRESSION_MAX);
} else {
tPNGOptions.setCompressionType(PNGOptions.COMPRESSION_DEFAULT);
}
ImageProducer tImageProducer = Jimi.getImageProducer(sSourceImage);
JimiWriter tJimiWriter = Jimi.createJimiWriter(sDestImage);
tJimiWriter.setSource(tImageProducer);
tJimiWriter.setOptions(tPNGOptions);
tJimiWriter.putImage(sDestImage);
tImageProducer = null;
tJimiWriter = null;
tPNGOptions = null;
long lRunEndTime = System.currentTimeMillis();
long lRunTime = lRunEndTime - lRunStartTime;
System.out.println(" JimiImageUtil.convertToPNG() 運行時間 : " + lRunTime + " 毫秒");
} catch (JimiException je) {
System.out.println(" JimiImageUtil.convertToPNG() : 轉換圖像格式發生異常!");
je.printStackTrace();
return false;
} catch (Exception ex) {
ex.printStackTrace();
return false;
}
return true;
}
public static void getFileListNotReturn(String path) {
File dir = new File(path);
// 該文件目錄下文件全部放入數組
File[] files = dir.listFiles();
if (files != null) {
for (int i = 0; i < files.length; i++) {
String fileName = files[i].getName();
// 判斷是文件還是文件夾
if (files[i].isDirectory()) {
// 獲取文件絕對路徑
getFileListNotReturn(files[i].getAbsolutePath());
// 判斷文件名是否以.jpg結尾
} else if (fileName.endsWith(DEL_FILE_SUFFIX)) {
String strFileName = files[i].getAbsolutePath();
System.out.println("文件名:" + strFileName);
//對符合條件的文件統一水印處理
// iconAndTextWatermark(strFileName);
ImageConverUtil.imageConvertCommon(strFileName, "", FILE_SUFFIX);
} else {
continue;
}
}
}
}
/**
* 刪除指定目錄下面指定文件類型的文件
*
* @param path
*/
public static void delSpecifyTheTypeFile(String path) {
File dir = new File(path);
// 該文件目錄下文件全部放入數組
File[] files = dir.listFiles();
if (files != null) {
for (int i = 0; i < files.length; i++) {
String fileName = files[i].getName();
// 判斷是文件還是文件夾
if (files[i].isDirectory()) {
// 獲取文件絕對路徑
delSpecifyTheTypeFile(files[i].getAbsolutePath());
// 判斷文件名是否以.tif結尾
} else if (fileName.endsWith(".tif")) {
String strFileName = files[i].getAbsolutePath();
System.out.println("刪除文件名:" + strFileName);
files[i].delete();
} else {
continue;
}
}
}
}
public static void main(String[] args) {
String srcImgPath = "D:\\1\\srcImgPath\\";
//批量圖片文件格式轉換
getFileListNotReturn(srcImgPath);
//批量刪除
delSpecifyTheTypeFile(srcImgPath);
//批量添加水印
WaterMarkUtil.getFileListNotReturn(srcImgPath);
//批量zip打包
ZipCompressorUtil zc = new ZipCompressorUtil("D:/resource.zip");
zc.compressNotContainShell(srcImgPath);
// tif 圖片轉jpg png gif
// String inputFilePath = "D:" + File.separator + "1" + File.separator + "1.tif";
// String outputFilePath = "D:" + File.separator + "1" + File.separator + "1.jpg";
// String fileSuffix = ".jpg";
// ImageConverUtil.imageConvertCommon(inputFilePath,outputFilePath, fileSuffix);
// System.out.println("-----------------執行完成-------------");
// String inputFilePath = "D:" + File.separator + "5" + File.separator + "1.jpg";
// String outputFilePath = "D:" + File.separator + "5" + File.separator + "1.tif";
// String fileSuffix = "tif";
// ImageConverUtil.imageConvertCommon(inputFilePath,outputFilePath , fileSuffix);
// System.out.println("-----------------執行完成-------------");
//png /jpg 轉tif
// String inputFilePath = "D:" + File.separator + "6" + File.separator + "1.jpg";
// String inputFilePath = "D:" + File.separator + "6" + File.separator + "1.png";
// String outputFilePath = "D:" + File.separator + "6" + File.separator + "1.tif";
// ImageConverUtil.imageConvertToTif(inputFilePath, outputFilePath);
// System.out.println("-----------------執行完成-------------");
//png /jpg 轉gif
// String inputFilePath = "D:" + File.separator + "5" + File.separator + "1.png";
// String inputFilePath = "D:" + File.separator + "5" + File.separator + "1.jpg";
// String outputFilePath = "D:" + File.separator + "5" + File.separator + "1.gif";
// ImageConverUtil.imageConvertToGIF(inputFilePath, outputFilePath);
// System.out.println("-----------------執行完成-------------");
// png轉jpg
// String inputFilePath = "D:" + File.separator + "4" + File.separator + "1.tif";
// String outputFilePath = "D:" + File.separator + "4" + File.separator + "1.jpg";
// ImageConverUtil.imageConvertToJPG(inputFilePath, outputFilePath, 100);
// System.out.println("-----------------執行完成-------------");
// jpg 轉png
// String inputFilePath = "D:" + File.separator + "3" + File.separator + "1.jpg";
// String outputFilePath = "D:" + File.separator + "3" + File.separator + "1.png";
// ImageConverUtil.imageConvertToPNG(inputFilePath, outputFilePath, "default");
// System.out.println("-----------------執行完成-------------");
}
}
java 實現批量圖片文件格式相互轉換+批量文件刪除
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.