Java画像圧縮コード
次のようにコードをコピーします。
パッケージcom.img;
java.awt.Imageをインポートします。
インポート java.awt.image.BufferedImage;
java.io.ファイルをインポートします。
java.io.FileOutputStreamをインポートします。
インポート java.io.IOException;
インポートjavax.imageio.ImageIO;
com.sun.image.codec.jpeg.JPEGCodec をインポートします。
com.sun.image.codec.jpeg.JPEGImageEncoder をインポートします。
/**
*
* @author 砂糖入りコーラ
*/
パブリック クラス CompressPicDemo {
private File file = null; // ファイルオブジェクト
private String inputDir // 入力マップのパス
private String OutputDir // 出力グラフのパス;
private String inputFileName //入力画像ファイル名;
private String OutputFileName // 出力画像ファイル名;
private int OutputWidth = 100; //デフォルトの出力画像幅
private int OutputHeight = 100; //デフォルトの出力画像の高さ
private boolean priority = true // マークを比例的に拡大縮小するかどうか (デフォルトは比例拡大縮小)
public CompressPicDemo() { //変数を初期化する
inputDir = "";
出力ディレクトリ = "";
入力ファイル名 = "";
出力ファイル名 = "";
出力幅 = 100;
出力高さ = 100;
}
public void setInputDir(String inputDir) {
this.inputDir = 入力ディレクトリ;
}
public void setOutputDir(String OutputDir) {
this.outputDir = 出力ディレクトリ;
}
public void setInputFileName(String inputFileName) {
this.inputFileName = inputFileName;
}
public void setOutputFileName(String 出力ファイル名) {
this.outputFileName = 出力ファイル名;
}
public void setOutputWidth(int OutputWidth) {
this.outputWidth = 出力幅;
}
public void setOutputHeight(int OutputHeight) {
this.outputHeight = 出力高さ;
}
public void setWidthAndHeight(int width, int height) {
this.outputWidth = 幅;
this.outputHeight = 高さ;
}
/*
* 画像サイズを取得
* パラメータ文字列パス: 画像パスを渡します
*/
public long getPicSize(String path) {
ファイル = 新しいファイル(パス);
file.length()を返します;
}
//画像処理
public String compressPic() {
試す {
//ソースファイルを取得する
ファイル = 新しいファイル(入力ディレクトリ + 入力ファイル名);
if (!file.exists()) {
戻る "";
}
画像 img = ImageIO.read(file);
// 画像形式が正しいかどうかを判断します
if (img.getWidth(null) == -1) {
System.out.println(" 読み取れません。再試行してください!" + "<BR>");
「いいえ」を返します。
} それ以外 {
int newWidth; int newHeight;
// 比例スケーリングかどうかを判断する
if (this.proportion == true) {
// 比例スケーリングのために出力画像の幅と高さを計算します
double rate1 = ((double) img.getWidth(null)) / (double) OutputWidth + 0.1;
double rate2 = ((double) img.getHeight(null)) / (double) OutputHeight + 0.1;
// 大きいズーム率に基づいてズーム制御を実行します
ダブルレート = レート 1 > レート 2 ? レート 1 : レート 2;
newWidth = (int) (((double) img.getWidth(null)) / rate);
newHeight = (int) (((double) img.getHeight(null)) / rate);
} それ以外 {
newWidth = img.getWidth(null); // 出力画像の幅
newHeight = img.getHeight(null); // 出力画像の高さ
}
BufferedImage タグ = new BufferedImage((int) newWidth, (int) newHeight, BufferedImage.TYPE_INT_RGB);
/*
* Image.SCALE_SMOOTH サムネイル アルゴリズムはサムネイル画像の滑らかさを生成します
※速度よりも優先度が高くなりますが、生成される画像の品質は向上しますが、速度は遅くなります。
*/
tag.getGraphics().drawImage(img.getScaledInstance(newWidth, newHeight, Image.SCALE_SMOOTH), 0, 0, null);
FileOutputStream out = 新しい FileOutputStream(outputDir + OutputFileName);
// JPEGImageEncoder は他の画像タイプの変換にも適用できます
JPEGImageEncoder エンコーダ = JPEGCodec.createJPEGEncoder(out);
エンコーダー.エンコード(タグ);
out.close();
}
} catch (IOException ex) {
ex.printStackTrace();
}
「OK」を返します。
}
public String compressPic (String inputDir, String OutputDir, String inputFileName, String OutputFileName) {
//入力画像パス
this.inputDir = 入力ディレクトリ;
//グラフパスを出力する
this.outputDir = 出力ディレクトリ;
// 画像ファイル名を入力
this.inputFileName = inputFileName;
// 出力画像ファイル名
this.outputFileName = 出力ファイル名;
compressPic() を返します。
}
public String compressPic(String inputDir, String OutputDir, String inputFileName, String OutputFileName, int width, int height, boolean gp) {
//入力画像パス
this.inputDir = 入力ディレクトリ;
//グラフパスを出力する
this.outputDir = 出力ディレクトリ;
// 画像ファイル名を入力
this.inputFileName = inputFileName;
// 出力画像ファイル名
this.outputFileName = 出力ファイル名;
//画像の長さと幅を設定します
setWidthAndHeight(幅, 高さ);
// 比例拡大縮小マークかどうか
this.proportion = GP;
compressPic() を返します。
}
// メインテスト
// compressPic (大きなピクチャのパス、小さなピクチャのパスを生成、大きなピクチャのファイル名、小さなピクチャのテキスト名を生成、小さなピクチャの幅を生成、小さなピクチャの高さを生成、比例して拡大縮小するかどうか (デフォルトは true))
public static void main(String[] arg) {
CompressPicDemo mypic = new CompressPicDemo();
System.out.println("入力画像サイズ: " + mypic.getPicSize("e://1.jpg")/1024 + "KB");
mypic.compressPic("e://", "e://test//", "1.jpg", "r1.jpg", 120, 120, false);
}
}