⑴ java图片压缩不失真的方法-java如何实现把一个大图片压缩到指定大小的图片且长宽比不变
java是怎么实现等比例缩小图片而不失真的啊?按照等比例的长宽进行缩放就可以了呀,就好像你打开一个图片,一般都有缩放功能,原理是一样的,等比例的缩放,关键像素还是存在的。
java如何实现把一个大图片压缩到指定大小的图片且长宽比不变也就是图片压缩,可以不修改任何大小的压缩(速度快),也可等比例修改大小压缩(较慢)
下面这是一段等比例缩小图片的方法。
publicStringcompressPic(StringinputDir,StringoutputDir,
StringinputFileName,StringoutputFileName,intwidth,
intheight,booleangp,Stringhzm){
try{
if(!()){
return"";
}
Imageimg=(image);
//判断图片格式是否正确
if((null)==-1){
return"no";
}else{
intnewWidth;intnewHeight;
//判断是否是等比缩放
if(gp==true){
//为等比缩放计算输出的图片宽度及高度
doublerate1=((double)(null))/(double)width;
doublerate2=((double)(null))/(double)height;
//根据缩放比率大的进行缩放控制
doublerate=rate1>rate2?rate1:rate2;
newWidth=(int)(((double)(null))/rate);
newHeight=(int)(((double)(null))/rate);
}else{
newWidth=(null);//输出的图片宽度
newHeight=(null);//输出的图片高度
}
BufferedImagetag=newBufferedImage((int)newWidth,(int)newHeight,_INT_RGB);
/*
*_SMOOTH的缩略算法生成缩略图片的平滑度的
*优先级比速度高生成的图片质量比较好但速度慢
*/
Imageim=(newWidth,newHeight,_SMOOTH);
().drawImage(im,0,0,null);
FileOutputStreamout=newFileOutputStream(outputDir+outputFileName);
//JPEGImageEncoder可适用于其他图片类型的转换
JPEGImageEncoderencoder=(out);
(tag);
();
}
}catch(IOExceptionex){
();
}
return"ok";
}
求助java压缩图片存储大小的方法可以使用Draw这个类,通过改变像素来改变存储大小,实例如下:
public_tatic_oolean_ompressPic(String_rcFilePath,_tring_escFilePath)_hrows_OException_
____File_ile=_ull;
____BufferedImage_rc=_ull;
____FileOutputStream_ut=_ull;
____ImageWriter_mgWrier;
____ImageWriteParam_mgWriteParams;
____//_付ㄐ赐计姆绞轿_jpg
____imgWrier=("jpg").next();
____imgWriteParams=_ew(
________null);
____//_褂醚顾,必须指定压缩方式为MODE_EXPLICIT
____(_EXPLICIT);
____//_饫镏付ㄑ顾酰某潭,参数qality是取值0~1范围内,
____((float)1);
____(_DISABLED);
____ColorModel_olorModel=(new_ile(srcFilePath)).getColorModel();//();
____//_付ㄑ顾跏笔褂玫纳誓J
//____(new(
//________colorModel,(16,16)));
____(new(
________colorModel,(16,16)));
____try_
______if(isBlank(srcFilePath))_
________return_alse;
______}_lse_
________file=_ew_ile(srcFilePath);(());
________src=(file);
________out=_ew_ileOutputStream(descFilePath);
________();
________//_匦胂戎付_out值,才能调用write方法,_mageOutputStream可以通过任何
________//_utputStream构造
________((out));
________//_饔_rite方法,就可以向输入流写图片
________(null,_ew_IOImage(src,_ull,_ull),
____________imgWriteParams);
________();
________();
______}
____}_atch(Exception_)_
______e.printStackTrace();
______return_alse;
____}
____return_rue;
__}
public_tatic_oolean_sBlank(String_tring)_
____if(string==_ull_|()==0_|().equals(""))_
______return_rue;
____}
____return_alse;
__}
⑵ 电脑文件zip如何压缩java实现对zip文件的压缩
电脑文件zip如何压缩(java实现对zip文件的压缩)
一、java实现压缩为zip
importjava.io.File;
importjava.io.FileInputStream;
importjava.io.IOException;
importjava.io.OutputStream;
importjava.util.zip.ZipEntry;
importjava.util.zip.ZipOutputStream;
publicclassZipUtils{
privatestaticfinalintBUFFER_SIZE=2*1024;
publicstaticvoiddirFile(Filedir){
File[]files=dir.listFiles();//得到File数组,获得目录下所有文件
for(Filefile:files){//遍历所有的子目录和文件
if(file.isDirectory()){
dirFile(file);//如果是目录递归调用dirFile()
}
//成功压缩文件后,对原文件进行删除
file.delete();
}
//顺带把对应的目录进行删除
dir.delete();
}
/**
*压缩成ZIP方法1
*@paramsrcDir压缩文件夹路径
*@paramout压缩文件输出流
*@paramKeepDirstructure是否保留原来的目录结构,true:保留目录结构;
*false:所有文件跑到压缩包根目录下(注意:不保留目录结构可能会出现同名文件,会压缩失败)
*@throwsRuntimeException压缩失败会抛出运行时异常
*/
publicstaticvoidtoZip(StringsrcDir,OutputStreamout,booleanKeepDirstructure)
throwsRuntimeException{
longstart=System.currentTimeMillis();
ZipOutputStreamzos=null;
try{
zos=newZipOutputStream(out);
FilesourceFile=newFile(srcDir);
compress(sourceFile,zos,sourceFile.getName(),KeepDirstructure);
longend=System.currentTimeMillis();
System.out.println("压缩完成,耗时:"+(end-start)+"ms");
}catch(Exceptione){
thrownewRuntimeException("ziperrorfromZipUtils",e);
}finally{
if(zos!=null){
try{
zos.close();
}catch(IOExceptione){
e.printstacktrace();
}
}
}
}
/**
*递归压缩方法
*@paramsourceFile源文件
*@paramzoszip输出流
*@paramname压缩后的名称
*@paramKeepDirstructure是否保留原来的目录结构,会压缩失败)
*@throwsException
*/
privatestaticvoidcompress(FilesourceFile,ZipOutputStreamzos,Stringname,
booleanKeepDirstructure)throwsException{
byte[]buf=newbyte[BUFFER_SIZE];
if(sourceFile.isFile()){
//向zip输出流中添加一个zip实体,构造器中name为zip实体的文件的名字
zos.putNextEntry(newZipEntry(name));
//文件到zip输出流中
intlen;
FileInputStreamin=newFileInputStream(sourceFile);
while((len=in.read(buf))!=-1){
zos.write(buf,len);
}
//Completetheentry
zos.closeEntry();
in.close();
}else{
File[]listFiles=sourceFile.listFiles();
if(listFiles==null||listFiles.length==0){
//需要保留原来的文件结构时,需要对空文件夹进行处理
if(KeepDirstructure){
//空文件夹的处理
zos.putNextEntry(newZipEntry(name+"/"));
//没有文件,不需要文件的
zos.closeEntry();
}
}else{
for(Filefile:listFiles){
//判断是否需要保留原来的文件结构
if(KeepDirstructure){
//注意:file.getName()前面需要带上父文件夹的名字加一斜杠,
//不然最后压缩包中就不能保留原来的文件结构,即:所有文件都跑到压缩包根目录下了
compress(file,name+"/"+file.getName(),KeepDirstructure);
}else{
compress(file,file.getName(),KeepDirstructure);
}
}
}
}
}
}