Java 图片矢量压缩
直接贴出工具类源码
package com.snow.web.util.publics; import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream; import javax.imageio.ImageIO; import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder; /**
* 图片压缩并保存
* @author jingxue.chen
*
*/
public class ImgCompressUtil { public static void main(String[] args) {
try {
ImgCompressUtil.compressFileName("D:\\logs\\0003.jpg", 100, 100, "D:\\logs", "0003-6.jpg");
} catch (IOException e) {
e.printStackTrace();
}
} /**
* 根据图片的本地路径压缩图片并保存
* @param fileUrl 图片存放全路径【D:\\logs\\0003.jpg】
* @param width 保存宽度
* @param height 保存高度
* @param saveAddress 保存路径【D:\\logs】
* @param fileName 保存文件名【0003.jpg】
* @throws IOException
*/
public static void compressFileName(String fileUrl,int width,int height,String saveAddress,String fileName) throws IOException{
File file = new File(fileUrl);// 读入文件
Image img = ImageIO.read(file); // 构造Image对象
int imgWidth = img.getWidth(null); // 得到源图宽
int imgHeight = img.getHeight(null); // 得到源图长
if (imgWidth / imgHeight > width / height) {
int h = (int) (imgHeight * width / imgWidth);
resize(img,width, h,saveAddress,fileName);
} else {
int w = (int) (imgWidth * height / imgHeight);
resize(img,w, height,saveAddress,fileName);
}
} /**
* 根据图片的本地路径压缩图片并保存
* @param inputStream 图片文件的文件流
* @param width 保存宽度
* @param height 保存高度
* @param saveAddress 保存路径【D:\\logs】
* @param fileName 保存文件名【0003.jpg】
* @throws IOException
*/
public static void compressFileName(InputStream inputStream,int width,int height,String saveAddress,String fileName) throws IOException{
Image img = ImageIO.read(inputStream); // 构造Image对象
int imgWidth = img.getWidth(null); // 得到源图宽
int imgHeight = img.getHeight(null); // 得到源图长
if (imgWidth / imgHeight > width / height) {
int h = (int) (imgHeight * width / imgWidth);
resize(img,width, h,saveAddress,fileName);
} else {
int w = (int) (imgWidth * height / imgHeight);
resize(img,w, height,saveAddress,fileName);
}
} /**
* 强制压缩/放大图片到固定的大小
* @param img
* @param w int 新宽度
* @param h int 新高度
* @param saveAddress 文件保存地址
* @param fileName 文件保存名称
*/
private static void resize(Image img, int newWidth, int newHeight, String saveAddress, String fileName) throws IOException {
BufferedImage newBufImg = new BufferedImage(newWidth, newHeight, BufferedImage.TYPE_INT_RGB);
newBufImg.getGraphics().drawImage(img.getScaledInstance(newWidth, newHeight, Image.SCALE_SMOOTH), 0, 0, null);
FileOutputStream output = new FileOutputStream(saveAddress+File.separator+fileName);
// JPEGImageEncoder可适用于其他图片类型的转换
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(output);
encoder.encode(newBufImg);
output.close();
}
}
本地测试可用~~~
Java 图片矢量压缩的更多相关文章
- java 图片 批量 压缩 +所有压缩
/* oldsrc : 原图片地址目录 如 'd:/' newsrc : 压缩后图片地址目录 如 'e:/' widthdist,heightdist : 压缩后的宽和高 ...
- Java图片的压缩
1.如果在springMvc中,会自带生成MultipartFile文件,将MultipartFile转化为File MultipartFile file1 = file; CommonsMultip ...
- Java 图片压缩
package com.wuyu.util; import java.awt.Graphics2D; import java.awt.Image; import java.awt.image.Buff ...
- Atitit. 图像处理jpg图片的压缩 清理垃圾图片 java版本
Atitit. 图像处理jpg图片的压缩 清理垃圾图片 java版本 1. 清理图片压缩图片尺寸 1 2. 所以要使用ImageWriter 1 3. Thumbnails质量压缩builder.o ...
- Atitit.java图片图像处理attilax总结
Atitit.java图片图像处理attilax总结 BufferedImage extends java.awt.Image 获取图像像素点 image.getRGB(i, lineIndex); ...
- Atitit.java图片图像处理attilax总结 BufferedImage extends java.awt.Image获取图像像素点image.getRGB(i, lineIndex); 图片剪辑/AtiPlatf_cms/src/com/attilax/img/imgx.javacutImage图片处理titit 判断判断一张图片是否包含另一张小图片 atitit 图片去噪算法的原理与
Atitit.java图片图像处理attilax总结 BufferedImage extends java.awt.Image 获取图像像素点 image.getRGB(i, lineIndex); ...
- simpleImageTool又纯java图片水印、缩放工具
simpleImageTool又一个简单.好用的图片格式转换.缩放水印叠加等功能的纯Java图片工具库. simpleImageTool的由来,近期需要用到图片处理,通过网上的图片流直接进行缩放水印叠 ...
- Android实现图片的压缩、旋转工具类
import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Matri ...
- Java图片高保真缩放工具类
Java图片高保真缩放 package com.xindai.auth.service.util; import java.awt.image.BufferedImage; import java.i ...
随机推荐
- javascript——获取列表选择行的列值
表格布局 方法 代码 $("#send").click(function(){ //获取选择的行号 n= $('input:radio[name="radio" ...
- SuperMap开发入门4——保存的坑
工作空间.地图等的打开.保存.删除是最基本的操作,可我居然卡在保存工作空间的问题上了. 功能需求 需求很简单:打开工作空间中的某一地图,缩放一下,保存地图.(下次打开时,已经缩放到上次修改过的地方) ...
- jQuery Jcrop 图像裁剪
jQuery Jcrop 图像裁剪 http://code.ciaoca.com/jquery/jcrop/ cropper.js 实现HTML5 裁剪图片并上传(裁剪上传头像.) https://b ...
- 【自动化测试】基于IntelliJ IDEA的Gradle和testNG
这几篇文章值得一读: TestNG测试框架使用笔记:http://www.cnblogs.com/xguo/p/3300358.html TestNg官方文档:http://testng.org/do ...
- C++ 第三课:常量转义字符
常量转义字符 以下的转义字符使普通字符表示不同的意义. 转义字符 描述 \' 单引号 \" 双引号 \\ 反斜杠 \0 空字符 \a 响铃 \b 后退 \f 走纸 \n 换行 \r 回车 \ ...
- Qt通过ODBC连接SQL Server2008实践总结
Qt连接数据库的方式很多,这里说明一种最常用也是最实用的方式,因为这种方式在Windows上开发程序使用起来非常方便,并且也是远程连接数据库所需要用到的方式. 前提工作: 在Win7下安装了SQL S ...
- JAVA遍历HashMap和ArrayList
List Map 基础信息 HashMap 最近写程序经常需要遍历集合,所以总结一下内容: 一.简单实现 Map map = new HashMap(); for(Object o : map.key ...
- javascript constrator and prototype
揭开js之constructor属性的神秘面纱 在js里面当new了一个对象时,这中间发生了什么? MDN - new运算符 当代码 new foo(...) 执行时: 一个新对象被创建.它继承自fo ...
- @Service注解的使用
首先,在applicationContext.xml文件中加一行: <context:component-scan base-package="com.hzhi.clas"/ ...
- [Practical.Vim(2012.9)].Drew.Neil.Tip21学习摘要
Vim has three kinds of Visual mode. In character-wise Visual mode, we can select anything from a sin ...