JAvaは、指定したサイズ(kb、mb)に画像を比例圧縮する
2730 ワード
ネット上には画像を圧縮する方法がたくさんありますが、指定したサイズ以内に圧縮できないか、サードパーティのプラグインを引用するか、私の要求に合わないので、自分で方法を書いて実現したいと思っています.この方法は、画像が特に大きい場合は複数回の判断や読み取りを行い、時間が少し長いかもしれませんが、実際の状況を見て、使うときは自分で注意しなければなりません.
実現の構想:画像サイズの読み取り→要求サイズに合致するか否かの判断→合致しない場合は幅と高さを同時に10%削減→このサイクルで判断する.
実現の構想:画像サイズの読み取り→要求サイズに合致するか否かの判断→合致しない場合は幅と高さを同時に10%削減→このサイクルで判断する.
package com.goldgrid.compresspic;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import javax.imageio.ImageIO;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
public class CompressPic3 {
public static String CompressPic(String srcPath,String targetPath) throws Exception {
double cutPercent=0.1;
File file=new File(srcPath);
BufferedImage bufferedImage=ImageIO.read(new FileInputStream(file));
int width=bufferedImage.getWidth(null);
int height=bufferedImage.getHeight(null);
long fileLength=file.length();
while((fileLength/1024)>=300) {
width=(int)(width*(1-cutPercent));
height=(int)(height*(1-cutPercent));
BufferedImage tag = new BufferedImage(width, height, BufferedImage.TYPE_3BYTE_BGR);
tag.getGraphics().drawImage(bufferedImage, 0, 0, width, height, null); //
FileOutputStream deskImage = new FileOutputStream(targetPath); //
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(deskImage);
encoder.encode(tag); // JPEG
deskImage.close();
File file1=new File(targetPath);
BufferedImage bufferedImage1=ImageIO.read(new FileInputStream(file1));
width=bufferedImage1.getWidth(null);
height=bufferedImage1.getHeight(null);
fileLength=file1.length();
}
return targetPath;
}
public static void main(String[] args) throws Exception {
File file3=new File("d:/ZTestForWork/g.jpg");
BufferedImage bufferedImage3=ImageIO.read(new FileInputStream(file3));
System.out.println(file3.length());
int width3=bufferedImage3.getWidth(null);
int height3=bufferedImage3.getHeight(null);
System.out.println(" :"+width3);
System.out.println(" :"+height3);
CompressPic3.CompressPic("d:/ZTestForWork/g.jpg", "d:/ZTestForWork/zipg.jpg");
/* String imgdist=reduceImg("d:/ZTestForWork/d.jpg", "d:/ZTestForWork/zipd.jpg", 1600, 1920, null);*/
File file4=new File("d:/ZTestForWork/zipg.jpg");
BufferedImage bufferedImage4=ImageIO.read(new FileInputStream(file4));
System.out.println(file4.length());
int width4=bufferedImage4.getWidth(null);
int height4=bufferedImage4.getHeight(null);
System.out.println(" :"+width4);
System.out.println(" :"+height4);
}
}