`
zcwfeng
  • 浏览: 106534 次
  • 性别: 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); } }
*/
}
}
分享到:
评论

相关推荐

    C#图片高效无损压缩 绝对有效

    C#中的图片压缩 在C#中,可以利用.NET Framework提供的类库来实现图片的压缩功能。具体来说,可以通过`System.Drawing`命名空间中的`Image`类以及相关的类和方法来操作图片。 ### 2. 无损压缩原理 无损压缩通常...

    10种绝对让你震撼的图片展示js代码下载

    【标题】:“10种绝对让你震撼的图片展示js代码下载”主要涵盖了JavaScript在网页中实现动态、交互式图片展示的技巧。JavaScript是一种强大的客户端脚本语言,它允许开发者为网页添加动态效果,提高用户体验。在这个...

    安卓图片特效处理代码大全绝对值得收藏

    在安卓平台上进行图片特效处理是移动应用开发中的一个重要领域,尤其对于那些涉及到图像编辑、滤镜效果或社交媒体分享的应用来说。这个"安卓图片特效处理代码大全"无疑为开发者提供了宝贵的资源,涵盖了十七种不同的...

    纯CSS3代码实现图片轮播slider.rar

    3. **绝对定位与相对定位**:为了实现图片的水平滑动效果,通常会将所有图片设置为绝对定位,并相对于一个具有相对定位的父容器。这样可以通过改变图片的`left`或`transform`属性来实现平移。 4. **CSS3 Flexbox或...

    java+mysql实现的代码分享网(所有源码已开源,效果可看网址:www.admintwo.com)

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

    js图片 切换 轮换效果 swf版

    "js图片切换轮换效果swf版"是一个专为网页设计打造的JavaScript组件,它能够实现多张图片在页面上自动循环播放的效果,为浏览者带来视觉上的动态体验。这种效果在网站的首页、产品展示或滑块部分尤为常见。 ...

    类似淘宝不宝贝图片详情放大展示效果

    本项目主要探讨的是如何实现“类似淘宝不宝贝图片详情放大展示效果”,这是一种增强用户浏览体验的技术,通常包括图片预览、点击放大以及放大镜效果等组件。下面我们将详细解析这一功能的实现原理和关键技术。 首先...

    详解网站中图片日常使用以及优化手法

    综上所述,图片在网站中的使用和优化涉及到多个方面,包括选择合适的图片格式、尺寸、压缩技术和响应式设计策略,这些都有助于提升网页性能,提供更好的用户体验。在日常开发中,理解并熟练运用这些方法,是优化网站...

    基于jQuery实现图片放大镜特效源码.zip

    "基于jQuery实现图片放大镜特效源码.zip"这个标题表明这是一个使用JavaScript库jQuery编写的代码示例,其主要功能是为图片添加一个放大镜效果。这种效果通常用于电商网站,允许用户在不离开当前页面的情况下查看产品...

    VMiddleImg图片居中裁切效果

    "VMiddleImg图片居中裁切效果"是一种优化图像显示的技术,旨在确保图片无论在何种分辨率或屏幕尺寸下都能以最佳方式呈现,尤其对于那些需要在不同浏览器间保持一致性的项目而言更为重要。这个技术的核心目标是实现...

    绝对有用的图片轮播as3详尽源码 相册 图片广告展示必备

    综上所述,这个“绝对有用的图片轮播as3详尽源码”应该包含以上提到的关键技术点,通过学习和理解这些概念,你可以创建出自己的图片轮播组件,满足各种相册和广告展示的需求。实际操作中,建议结合源码仔细分析每个...

    家居产品图片展示相册代码.zip

    "jquery-1.7.1.min.js"是该库的压缩和优化版,用于减少页面加载时间。 “jquery.DB_gallery.js”是专门为图片展示相册设计的一个jQuery插件。这个插件的核心功能包括: 1. **图片预加载**:在用户滚动或点击前,...

    横向移动视觉广告代码

    可以使用适当的文件格式(如JPEG、PNG或SVG)、压缩图片大小以及利用CSS精灵技术来实现这一目标。 6. **源码下载**: 文件名`最新源码下载.url`表明可能有一个链接提供完整的源代码下载。这对于学习和理解这种广告...

    手机底飘广告代码

    例如,可以延迟加载直到进入可视区域,或者使用轻量级的图片格式和压缩技术来减少网络传输的数据量。 7. **隐私政策**:由于涉及用户数据和追踪,开发者需要遵守相关的隐私政策和GDPR等法规,确保透明度和用户选择...

    js+css3折角邮票图片墙展示代码.zip

    10. **性能优化**:考虑到大量图片可能影响页面加载速度,需要考虑图片压缩、适当的文件格式选择(如WebP)、使用CDN服务以及缓存策略等,以提升网站性能。 综上所述,创建一个折角邮票图片墙展示涉及到前端开发的...

    网络花店代码

    在描述中提到的“肯定能用 而且绝对的好用”,意味着该代码实现了稳定的功能,并且经过了测试,具有较高的可用性和用户体验。这可能包括了用户注册、登录、浏览商品、添加购物车、下单支付等一系列流程。同时,代码...

    文字变大js小游戏动画代码.zip

    【标题】中的“文字变大js小游戏动画代码”表明这是一个基于JavaScript实现的文字放大效果的小游戏。JavaScript是一种广泛用于网页和网络应用的编程语言,尤其在交互性内容方面扮演着重要角色。这种小游戏可能是一个...

    漂亮公寓全站绝对漂亮企业网站系统源代码

    【标题】"漂亮公寓全站绝对漂亮企业网站系统源代码" 暗示这是一个用于创建企业网站的源代码包,特别强调了设计的美观性,适用于公寓类的业务展示。这个系统可能包含了一系列用于构建和管理网站的前端和后端组件,...

    点击出现图片大图效果

    - **性能优化**:对于大量的图片加载,可以通过图片压缩、延迟加载等方式进行优化。 通过以上分析,我们可以清晰地理解这段代码是如何实现鼠标悬停时显示大图效果的,同时也能够了解其实现背后的原理和技术要点。这...

    竖向图片滚动JavaScript封装版.zip

    【标题】"竖向图片滚动JavaScript封装版"指的是一个专门用于实现垂直方向上图片滚动效果的JavaScript库或代码实现。这种效果通常应用于网页设计中,尤其是那些需要展示大量图片且空间有限的场景,如轮播图、产品展示...

Global site tag (gtag.js) - Google Analytics