根据我掌握的资料经过多次修改,得到我想要的效果。
可以压缩为任意大小,压缩后高清,不变形(留白),可以改后缀名,可以修改压缩分辨率。
可能有朋友也有这个需要,参考一下吧,有问题还请指证!
import java.io.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.awt.*;
import com.sun.image.codec.jpeg.*;
import java.awt.image.BufferedImage;
/**
*
* @author Jiangpin
*/
public class Img_Middle {
public void img_change(String url,String name)
{
Tosmallerpic(url,new File(url+name),"_middle",name,188,165,(float)0.7);
Tosmallerpic(url,new File(url+name),"_small",name,45,45,(float)0.7);
Tosmallerpic(url,new File(url+name),"_smaller",name,116,100,(float)0.7);
}
/**
*
* @param f 图片所在的文件夹路径
* @param filelist 图片路径
* @param ext 扩展名
* @param n 图片名
* @param w 目标宽
* @param h 目标高
* @param per 百分比
*/
private static void Tosmallerpic(String f,File filelist,String ext,String n,int w,int h,float per){
Image src;
try {
src = javax.imageio.ImageIO.read(filelist); //构造Image对象
String img_midname=f+n.substring(0,n.indexOf("."))+ext+n.substring(n.indexOf("."));
int old_w=src.getWidth(null); //得到源图宽
int old_h=src.getHeight(null);
int new_w=0;
int new_h=0; //得到源图长
double w2=(old_w*1.00)/(w*1.00);
double h2=(old_h*1.00)/(h*1.00);
//图片跟据长宽留白,成一个正方形图。
BufferedImage oldpic;
if(old_w>old_h)
{
oldpic=new BufferedImage(old_w,old_w,BufferedImage.TYPE_INT_RGB);
}else{if(old_w<old_h){
oldpic=new BufferedImage(old_h,old_h,BufferedImage.TYPE_INT_RGB);
}else{
oldpic=new BufferedImage(old_w,old_h,BufferedImage.TYPE_INT_RGB);
}
}
Graphics2D g = oldpic.createGraphics();
g.setColor(Color.white);
if(old_w>old_h)
{
g.fillRect(0, 0, old_w, old_w);
g.drawImage(src, 0, (old_w - old_h) / 2, old_w, old_h, Color.white, null);
}else{
if(old_w<old_h){
g.fillRect(0,0,old_h,old_h);
g.drawImage(src, (old_h - old_w) / 2, 0, old_w, old_h, Color.white, null);
}else{
//g.fillRect(0,0,old_h,old_h);
g.drawImage(src.getScaledInstance(old_w, old_h, Image.SCALE_SMOOTH), 0,0,null);
}
}
g.dispose();
src = oldpic;
//图片调整为方形结束
if(old_w>w)
new_w=(int)Math.round(old_w/w2);
else
new_w=old_w;
if(old_h>h)
new_h=(int)Math.round(old_h/h2);//计算新图长宽
else
new_h=old_h;
BufferedImage tag = new BufferedImage(new_w,new_h,BufferedImage.TYPE_INT_RGB);
//tag.getGraphics().drawImage(src,0,0,new_w,new_h,null); //绘制缩小后的图
tag.getGraphics().drawImage(src.getScaledInstance(new_w, new_h, Image.SCALE_SMOOTH), 0,0,null);
FileOutputStream newimage=new FileOutputStream(img_midname); //输出到文件流
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(newimage);
JPEGEncodeParam jep=JPEGCodec.getDefaultJPEGEncodeParam(tag);
/* 压缩质量 */
jep.setQuality(per, true);
encoder.encode(tag, jep);
//encoder.encode(tag); //近JPEG编码
newimage.close();
} catch (IOException ex) {
Logger.getLogger(Img_Middle.class.getName()).log(Level.SEVERE, null, ex);
}
}
/*public static void main(String args[]){
//String n="0e5465fc-025a-458d-8383-e9ced0c1e728.jpg";
String f="F:\\200903300012\\pics\\201006\\";
File file=new File(f);
if(file.exists())
{
File[] filelist=file.listFiles();
for(int i=0;i<filelist.length;i++)
{
String n=filelist[i].getName();
Tosmallerpic(f,filelist[i],"_middle",n,185,160,(float)0.7);
Tosmallerpic(f,filelist[i],"_small",n,45,45,(float)0.7);
Tosmallerpic(f,filelist[i],"_smaller",n,116,100,(float)0.7);
}
}
}*/
}
分享到:
相关推荐
java图片压缩处理(可以压缩为任意大小
java图片压缩处理java图片压缩处理java图片压缩处理java图片压缩处理java图片压缩处理java图片压缩处理
java图片压缩处理
使用两中方法进行压缩,可以只改变图片大小,如,原图片100kb,压缩后变成40kb。并且不改变宽高。 一.使用ImageMagick进行压缩类-Aa.java 需要做以下配置: 1.将jmagick.dll加入jdk\bin目录中 2.将jmagick.dll加入到...
通过java实现对图片按照尺寸、像素质量实现对图片的压缩处理,并可以对图片制定宽高或者等比压缩
可以一键修改图片的分辨率以及压缩图片大小
支持压缩图片的大小,可以根据想要的高度进行压缩。也支持过大压缩变小。支持各种静态图片和gif动态图片。
java 图片压缩 iphone拍照上传旋转问题处理,压缩工具类 首先导入jar 包,通过imgxz获取图片是否旋转属性,在调用旋转方法,旋转过来,然后在进行压缩
采用java后台压缩,利用java原生的imageIO类进行裁剪,含图片文件转base64位编码,下载修改图片路径,即可使用
* 压缩图片,将图片压缩后以二进制的形式输出 * * @param file * 将要压缩的图片 * @param width * 压缩宽(长度短的做宽) * @param height * 压缩长(长度长的做长) * @return byte[]二进制流 */
java代码保存宽高不变压缩图片(失真不大),按照文件大小,进行压缩质量控制
java 处理图片大小等比例缩放;图片裁剪;支持图片压缩不失真;支持图片添加水印;支持动态图的处理;支持自定义图片大小的转换 等 压缩包中内附使用说明
PngEncoder.java针对java平台处理png压缩算法
Java压缩图片util,可等比例宽高不失真压缩,也可直接指定压缩后的宽高,只能用炫酷来形容,感兴趣就下载看看吧
该工具类可以实现以下几个功能 1、得到有效文件的长度(即大小),以字节表示 ... true则可以(如果选择true后,上传的文件非图片,则会被默认为flag为false) 3、删除文件的功能 deleteWebFile(String filePath)
采用JDK自带的图片除理类对图片进行压缩,可以将4M的图片文件压缩成100K以下
我试过好几款压缩工具,感觉这款是最方便实用的,右键一键操作,真心快捷,强烈推荐。 Picture Resizer-修改图片大小、尺寸的软件,属于右键...处理后的图片不会覆盖原文件,而是会用“原饰名字+参数”保存为新文件。
java高清图片压缩的2种方法
java 图片压缩详细讲解,可对图片自定义压缩后的宽度,高度,质量等功能。