`
zcwfeng
  • 浏览: 97090 次
  • 性别: Icon_minigender_1
  • 来自: 吉林
社区版块
存档分类
最新评论

自己实现图片压缩技术,直接上代码,绝对好用(优化效果不错)

 
阅读更多
package photo.zipcode;


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 zcw
*/
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 url
* @param name
*/
private static void img_change11(String url, String name) {
File f = new File(url + name);
float per = (300 * 1024) / f.length();
if (f.length() > 300 * 1024) {
per = (float) (300 * 1024) / f.length();
per = (float) (per + (1 - per) / 5);
} else {


per = (float) 1.0;
}
System.out.println("图片大小:" + f.length() / 1024 + "K");
System.out.println("压宿比例:" + per);
// Tosmallerpic(url,new
// File(url+name),"_middle",name,1440,900,(float)0.7);
Tosmallerpic(url, new File(url + name), "_small", name, 1024, 1024,
(float) 0.7);
Tosmallerpic(url, new File(url + name), "_smaller", name, 1024, 500,
(float) 0.7);
Tosmallerpic(url, new File(url + name), "_middle", name, 1024, 640,
(float) per);
}


private static void img_changeOne(String url, String name) {
File f = new File(url + name);
float per = (300 * 1024) / f.length();
if (f.length() > 300 * 1024) {
per = (float) (300 * 1024) / f.length();
per = (float) (per + (1 - per) / 5);
} else {


per = (float) 1.0;
}
System.out.println("图片大小:" + f.length() / 1024 + "K");
System.out.println("压宿比例:" + per);
// Tosmallerpic(url,new
// File(url+name),"_middle",name,1440,900,(float)0.7);
Tosmallerpic(url, new File(url + name), "_small", name, 500, 375,
(float) 0.7);
Tosmallerpic(url, new File(url + name), "_smaller", name, 500, 375,
(float) 0.7);
Tosmallerpic(url, new File(url + name), "_middle", name, 500, 375,
(float) per);
}


/**
* 压缩图片将图片宽高和路径名字传入
*
* @param url
* @param name
* @param w
* @param h
*/
private static void img_changeMyself(String url, String name, int w, int h) {
File f = new File(url + name);
float per = (300 * 1024) / f.length();
if (f.length() > 300 * 1024) {
per = (float) (300 * 1024) / f.length();
per = (float) (per + (1 - per) / 5);
} else {


per = (float) 1.0;
}
System.out.println("图片大小:" + f.length() / 1024 + "K");
System.out.println("压宿比例:" + per);
// Tosmallerpic(url,new
// File(url+name),"_middle",name,1440,900,(float)0.7);
Tosmallerpic(url, new File(url + name), "_small", name, w, h,
(float) 0.7);
// Tosmallerpic(url,new
// File(url+name),"_smaller",name,500,375,(float)0.7);
// Tosmallerpic(url, new File(url + name), "", name, w, h, (float) per);
}


/**
* 生成新的图片江河源图片文件名字一致,放在当前文件夹的test临时目录
*
* @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 + "test/" + n.substring(0, n.indexOf("."))
+ 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);
* } }
*/
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, 0, old_w, old_h, Color.white, null);
// 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, 0, 0, old_w, old_h, Color.white, null);
// 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.fillRect(0, 0, old_w, old_h);
g.drawImage(src, 0, 0, old_w, old_h, Color.white, 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;
new_h = h;
new_w = w;


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 = "xiangshou1.png";
String f = "G:/map/";
File file = new File(f);
// img_changeOne(f, n);


File[] files = file.listFiles();
for (int i = 0; i < files.length; i++) {
if (files[i].exists() && files[i].isFile()) {
System.err.println(files[i].getName());
img_changeMyself(f, files[i].getName(), 1202, 765);
}
}


// img_changeMyself(f, n);
/*
* 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+mysql实现的代码分享网(所有源码已开源,效果可看网址:www.admintwo.com)

    11、其他功能包括:图片压缩处理功能(即使是几M的图片,压缩后也只有几十kb)。通用json处理功能(向方法中传递任何参数,int、string等,都会返回json数据,而且速度很快)。分词功能(点击某一个分享,进入详情页...

    JAVA上百实例源码以及开源项目源代码

     Java绘制图片火焰效果,源代码相关注释:前景和背景Image对象、Applet和绘制火焰的效果的Image对象、Applet和绘制火焰的效果的Graphics对象、火焰效果的线程、Applet的高度,图片到图片装载器、绘制火焰效果的X坐标...

    JAVA上百实例源码以及开源项目

     Java绘制图片火焰效果,源代码相关注释:前景和背景Image对象、Applet和绘制火焰的效果的Image对象、Applet和绘制火焰的效果的Graphics对象、火焰效果的线程、Applet的高度,图片到图片装载器、绘制火焰效果的X坐标...

    java源码包---java 源码 大量 实例

     Java绘制图片火焰效果,源代码相关注释:前景和背景Image对象、Applet和绘制火焰的效果的Image对象、Applet和绘制火焰的效果的Graphics对象、火焰效果的线程、Applet的高度,图片到图片装载器、绘制火焰效果的X坐标...

    java源码包2

     Java绘制图片火焰效果,源代码相关注释:前景和背景Image对象、Applet和绘制火焰的效果的Image对象、Applet和绘制火焰的效果的Graphics对象、火焰效果的线程、Applet的高度,图片到图片装载器、绘制火焰效果的X坐标...

    java源码包3

     Java绘制图片火焰效果,源代码相关注释:前景和背景Image对象、Applet和绘制火焰的效果的Image对象、Applet和绘制火焰的效果的Graphics对象、火焰效果的线程、Applet的高度,图片到图片装载器、绘制火焰效果的X坐标...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    Java绘制图片火焰效果 1个目标文件 摘要:Java源码,图形操作,火焰效果 Java绘制图片火焰效果,源代码相关注释:前景和背景Image对象、Applet和绘制火焰的效果的Image对象、Applet和绘制火焰的效果的Graphics对象、...

    java源码包4

     Java绘制图片火焰效果,源代码相关注释:前景和背景Image对象、Applet和绘制火焰的效果的Image对象、Applet和绘制火焰的效果的Graphics对象、火焰效果的线程、Applet的高度,图片到图片装载器、绘制火焰效果的X坐标...

    成百上千个Java 源码DEMO 3(1-4是独立压缩包)

    Java绘制图片火焰效果 1个目标文件 摘要:Java源码,图形操作,火焰效果 Java绘制图片火焰效果,源代码相关注释:前景和背景Image对象、Applet和绘制火焰的效果的Image对象、Applet和绘制火焰的效果的Graphics对象、...

    asp.net知识库

    HttpModule 实现 ASP.Net (*.aspx) 中文简繁体的自动转换,不用修改原有的任何代码,直接部署即可! 服务器自定义开发二之客户端脚本回发 Web开发: 使用URL重写WEB主题切换 如何在Asp.Net1.1中实现页面模板(所谓的...

    人脸识别之表情识别项目相关源码

    2020.8.22,重构了整个仓库代码,改用Tensorflow2中的keras api实现整个系统。考虑到很多反映jupyter notebook写的train使用起来不太方便,这里改成了py脚本实现。 2020.12.18,根据反馈,修改了Jaffe的优化器设置。...

    www.zwdyw.com站源码代码

    共有50多款各种功能的插件,已经形成了一个非常强大的插件库,绝对满足您的一切需求.....等你来安装! 03.专辑专题系统 强大的专题系统提供普通的专辑功能,提供专辑模板可以完全自定义的功能形成专题!专题可以...

    网管教程 从入门到精通软件篇.txt

    INT:中间代码,当一个源程序经过语法检查后编译产生一个可执行代码 IOF:Findit文档 IQY:Microsoft Internet查询文件 ISO:根据ISD 9660有关CD-ROM文件系统标准列出CD-ROM上的文件 ISP:X-Internet签字文件 ...

    网趣网上购物系统旗舰版V6.2

    支持商品图片水印功能、支持删除商品自动删除图片功能,旗舰版特别支持数据加在线管理,可及时对网站进行数据备份、恢复、压缩等诸多操作。支持上传文件管理功能可以管理系统所有上传图片的浏览与删除操作,非常方便...

    网趣网上购物系统旗舰版V7.8

    率先支持淘宝数据批量导入,与淘宝网店平步,支持商品图片水印功能、支持删除商品自动删除图片功能,旗舰版特别支持数据加在线管理,可及时对网站进行数据备份、恢复、压缩等诸多操作。支持上传文件管理功能可以管理...

    网趣网上购物系统旗舰版V6.5

    支持商品图片水印功能、支持删除商品自动删除图片功能,旗舰版特别支持数据加在线管理,可及时对网站进行数据备份、恢复、压缩等诸多操作。支持上传文件管理功能可以管理系统所有上传图片的浏览与删除操作,非常方便...

    网趣网上购物系统旗舰版V7.7

    支持商品图片水印功能、支持删除商品自动删除图片功能,旗舰版特别支持数据加在线管理,可及时对网站进行数据备份、恢复、压缩等诸多操作。支持上传文件管理功能可以管理系统所有上传图片的浏览与删除操作,非常方便...

    网趣网上购物系统旗舰版V6.6

    支持商品图片水印功能、支持删除商品自动删除图片功能,旗舰版特别支持数据加在线管理,可及时对网站进行数据备份、恢复、压缩等诸多操作。支持上传文件管理功能可以管理系统所有上传图片的浏览与删除操作,非常方便...

    网趣网上购物系统旗舰版V6.0

    支持商品图片水印功能、支持删除商品自动删除图片功能,旗舰版特别支持数据加在线管理,可及时对网站进行数据备份、恢复、压缩等诸多操作。支持上传文件管理功能可以管理系统所有上传图片的浏览与删除操作,非常方便...

Global site tag (gtag.js) - Google Analytics