java压缩图片demo

news/2024/11/26 11:48:59/

经试验,原7M的图片可压缩到50K所有

package com.zlxtk.test1;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Date;
import javax.imageio.ImageIO;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
/**
* @className imgYasuo
* @package com.zlxtk.test1
* @author ZLXTK
* @date 2016-10-7
*
*/
public class imgYasuo {  
private Image img;  
private int width;  
private int height;  
@SuppressWarnings("deprecation")  
public static void main(String[] args) throws Exception {  
System.out.println("开始:" + new Date().toLocaleString());  
imgYasuo imgCom = new imgYasuo("D:\\test\\a.jpg");  
imgCom.resizeFix(400, 400);  
System.out.println("结束:" + new Date().toLocaleString());  
}  
/** 
* 构造函数 
*/  
public imgYasuo(String fileName) throws IOException {  
File file = new File(fileName);// 读入文件  
img = ImageIO.read(file);      // 构造Image对象  
width = img.getWidth(null);    // 得到源图宽  
height = img.getHeight(null);  // 得到源图长  
}  
/** 
* 按照宽度还是高度进行压缩 
* @param w int 最大宽度 
* @param h int 最大高度 
*/  
public void resizeFix(int w, int h) throws IOException {  
if (width / height > w / h) {  
resizeByWidth(w);  
} else {  
resizeByHeight(h);  
}  
}  
/** 
* 以宽度为基准,等比例放缩图片 
* @param w int 新宽度 
*/  
public void resizeByWidth(int w) throws IOException {  
int h = (int) (height * w / width);  
resize(w, h);  
}  
/** 
* 以高度为基准,等比例缩放图片 
* @param h int 新高度 
*/  
public void resizeByHeight(int h) throws IOException {  
int w = (int) (width * h / height);  
resize(w, h);  
}  
/** 
* 强制压缩/放大图片到固定的大小 
* @param w int 新宽度 
* @param h int 新高度 
*/  
public void resize(int w, int h) throws IOException {  
// SCALE_SMOOTH 的缩略算法 生成缩略图片的平滑度的 优先级比速度高 生成的图片质量比较好 但速度慢  
BufferedImage image = new BufferedImage(w, h,BufferedImage.TYPE_INT_RGB );   
image.getGraphics().drawImage(img, 0, 0, w, h, null); // 绘制缩小后的图  
File destFile = new File("D:\\test\\456.jpg");  
FileOutputStream out = new FileOutputStream(destFile); // 输出到文件流  
// 可以正常实现bmp、png、gif转jpg  
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);  
encoder.encode(image); // JPEG编码  
out.close();  
}  
}  


http://www.ppmy.cn/news/877608.html

相关文章

轻轻绕过你的防线——霸道的柯南图片管理系统

by lake2 前些天在浏览某个站点的时候,一时手痒,在URL后面加了个“ and 12”意在看看这系统有没有SQL注射漏洞,哪晓得浏览器弹出两个对话框然后无限的弹出窗口。只得赶紧结束掉进程,郁闷,我用的TT浏览器,…

node 图片加水印

1单张图片加水印 使用Node进行图片水印添加,需要借助一个Node中的库: images 1 本地安装images库 npm install images -D 2 创建Img.js var images require(images); var path require(path); var watermarkImg images(water_logo.jpg); var sou…

swiper 弹出图片_Swiper实现图片预览效果

作者:娇娇jojo 日期:2018年3月13日 一、介绍 先用几张图来和大家描述一下什么是图片预览效果吧。 第一张图: 第二张图: 第三张图: 第四张图: 图一:图片列表; 图二:点击列表中 “小猫” 这张图片,会弹出图二这样的预览图; 图三:对图二向左或向右滑动会出现图三的样子…

c 将图片存入到mysql数据库中_图片插入数据库

一般瀑布流插件有配置支持动态从数据库中读取数据的,你认真看下API。 如果确认你的这个不支持动态读取,只能换一个瀑布流插件了,如这个: (function ($) { var //参数 setting { column_width: 240, //列宽 column_className: wat…

流放者柯南服务器文件,流放者柯南服务器设置怎么保存

流放者柯南服务器设置怎么保存 内容精选 换一换 本章介绍如何在管理控制台购买GaussDB(for openGauss)实例,并通过内网使用弹性云服务器连接GaussDB(for openGauss)实例。GaussDB(for openGauss)提供gsql工具帮助您在命令行下连接数据库,您需要提前创建一…

力扣C++|一题多解之数学题专场(1)

目录 7. 整数反转 9. 回文数 12. 整数转罗马数字 13. 罗马数字转整数 29. 两数相除 7. 整数反转 给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。 -如果反转后整数超过 32 位的有符号整数的范围 [2^31, 2^31 -1] ,就返回 0。…

Zookeeper概述及部署

Zookeeper概述及部署 一、Zookeeper 定义二、Zookeeper 特点三、Zookeeper 数据结构四、Zookeeper 应用场景五、Zookeeper选举机制● 第一次启动选举机制● 非第一次启动选举机制 六、部署 Zookeeper 集群1.安装前准备2.安装 Zookeeper 一、Zookeeper 定义 Zookeeper是一个开源…

防止程序多开方法

最近,一个公司项目要求防止程序多开,采用了几种方法,效果还行。 一、使用Mutex 1、原理 创建一个互斥体,并检查它是否已经有拥有者,如果有,表明互斥体已经建立(程序已经启动)&#…