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 ...
随机推荐
- (转)Unity3D研究院之将场景导出XML或JSON或二进制并且解析还原场景
自:http://www.xuanyusong.com/archives/1919 导出Unity场景的所有游戏对象信息,一种是XML一种是JSON.本篇文章我们把游戏场景中游戏对象的.旋转.缩放.平 ...
- Android面试题收集
Android是一种基于Linux的自由及开放源码的操作系统,主要使用于移动设备.如智能手机和平板电脑.由Google公司和开放手机联盟领导及开发.这里会不断收集和更新Android基础相关的面试题, ...
- linux 安装elasticsearch 可能遇到的问题
1.can not run elasticsearch as root 切换到非root用户 因为安全问题elasticsearch 不让用root用户直接运行,所以要创建新用户 第一步:liunx创 ...
- GPUImage API文档之GPUImageInput协议
GPUImageInput协议主要包含一些输入需要渲染目标的操作. - (void)newFrameReadyAtTime:(CMTime)frameTime atIndex:(NSInteger)t ...
- Android 演示 DownloadManager——Android 下载 apk 包并安装
本文内容 环境 项目结构 演示下载 参考资料 本文是 github 上 Trinea-Android-common 和 Trinea-Android-Demo 项目的一部分,将下载部分分离出来,看看如 ...
- WebStorm 之 Cordova 环境搭建
一.环境搭建 Cordova 环境配置之前,应先下载安装 Node.js ,中文官网:http://nodejs.cn/. 以管理员身份运行 cmd 命令行工具: 1.查看 Node.js 是否已安装 ...
- Selenium2(webdriver)入门之TestNG的安装与简单使用
上一篇已经搭建好了Eclipse+selenium2的环境,这一篇主要记录下TestNG的使用. 一.在Eclipse中安装TestNG 1.打开eclipse-->help-->Inst ...
- vsphere 5.1 性能最佳实践。
1.关于CPU负载.extop显示的结果 如果CPU load average>=1,说明主机过载了. 如果PCPU used%在80%左右说明良好,90%以上就临近过载了. VM赋予过多的vC ...
- C#中使用多款LevelDB.Net封装测试性能
一.使用http://www.nuget.org/packages/LevelDB.NET 测试 1.新建项目,并Nuget引入库: 2.写代码 using LevelDB; using System ...
- angularJS 事件广播与接收[转]
路由的事件 事件这个词在前端出现的频率真是高,根本拦不住,哪都是.$route服务在路由过程中的每个阶段都会触发不同的事件,可以为这些不同的路由事件设置监听器并做出响应. 一共有4个事件用来监听路由的 ...