Java实现图片压缩代码,图片大小转换
在很多项目中我们会把上传的图片做处理,比较图片上传过多对服务器的容量和带宽有很多的浪费,如果不是必须的高清图片,我们可以通过代码来做压缩。在我的项目中我们压缩图片的目的是让web页面打开的速度很快,并且节省空间。
下面先分享一下代码:
package org.util; import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.awt.image.CropImageFilter;
import java.awt.image.FilteredImageSource;
import java.awt.image.ImageFilter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream; public class ImgTools { /**
* 按照 宽高 比例压缩
*
* @param img
* @param width
* @param height
* @param out
* @throws IOException
*/
public static void thumbnail_w_h(File img, int width, int height,
OutputStream out) throws IOException {
BufferedImage bi = ImageIO.read(img);
double srcWidth = bi.getWidth(); // 源图宽度
double srcHeight = bi.getHeight(); // 源图高度 double scale = 1; if (width > 0) {
scale = width / srcWidth;
}
if (height > 0) {
scale = height / srcHeight;
}
if (width > 0 && height > 0) {
scale = height / srcHeight < width / srcWidth ? height / srcHeight
: width / srcWidth;
} thumbnail(img, (int) (srcWidth * scale), (int) (srcHeight * scale), out); } /**
* 按照固定宽高原图压缩
*
* @param img
* @param width
* @param height
* @param out
* @throws IOException
*/
public static void thumbnail(File img, int width, int height,
OutputStream out) throws IOException {
BufferedImage BI = ImageIO.read(img);
Image image = BI.getScaledInstance(width, height, Image.SCALE_SMOOTH); BufferedImage tag = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
Graphics g = tag.getGraphics();
g.setColor(Color.RED);
g.drawImage(image, 0, 0, null); // 绘制处理后的图
g.dispose();
ImageIO.write(tag, "JPEG", out);
} /**
* 按照宽高裁剪
*
* @param srcImageFile
* @param destWidth
* @param destHeight
* @param out
*/
public static void cut_w_h(File srcImageFile, int destWidth,
int destHeight, OutputStream out) {
cut_w_h(srcImageFile, 0, 0, destWidth, destHeight, out);
} public static void cut_w_h(File srcImageFile, int x, int y, int destWidth,
int destHeight, OutputStream out) {
try {
Image img;
ImageFilter cropFilter;
// 读取源图像
BufferedImage bi = ImageIO.read(srcImageFile);
int srcWidth = bi.getWidth(); // 源图宽度
int srcHeight = bi.getHeight(); // 源图高度 if (srcWidth >= destWidth && srcHeight >= destHeight) {
Image image = bi.getScaledInstance(srcWidth, srcHeight,
Image.SCALE_DEFAULT); cropFilter = new CropImageFilter(x, y, destWidth, destHeight);
img = Toolkit.getDefaultToolkit().createImage(
new FilteredImageSource(image.getSource(), cropFilter));
BufferedImage tag = new BufferedImage(destWidth, destHeight,
BufferedImage.TYPE_INT_RGB);
Graphics g = tag.getGraphics();
g.drawImage(img, 0, 0, null); // 绘制截取后的图
g.dispose();
// 输出为文件
ImageIO.write(tag, "JPEG", out);
}
} catch (Exception e) {
e.printStackTrace();
}
}// #cut_w_h public static void main(String[] args) throws IOException {
File img = new File("e:\\a\\a.jpg");
FileOutputStream fos = new FileOutputStream("e:\\a\\b.jpg");
// ImgTools.thumbnail(img, 100, 100, fos);
// ImgTools.cut_w_h(img, 230, 200, fos);
ImgTools.thumbnail_w_h(img, 100, 0, fos);
} }
其实我们很多人喜欢在上传的时候就做了限制了,这样在上传时就节省了带宽,可是很多客户是不会做图片处理的,5M的大图直接就给你上传,限制了说我们做的不人性化。无奈之下只能在后台进行转换。
Java实现图片压缩代码,图片大小转换的更多相关文章
- java多图片上传--前端实现预览--图片压缩 、图片缩放,区域裁剪,水印,旋转,保持比例。
java多图片上传--前端实现预览 前端代码: https://pan.baidu.com/s/1cqKbmjBSXOhFX4HR1XGkyQ 解压后: java后台: <!--文件上传--&g ...
- delphi GDI 图片压缩代码 据说是位图缩放保持原图视觉效果最好的算法
delphi 图片压缩代码 据说是位图缩放保持原图视觉效果最好的算法 若有更好的,请大神留言我也学习下,感谢! uses WinAPI.GDIPAPI, WinAPI.GDIPOBJ; var Bi ...
- iOS学习——图片压缩到指定大小以内
一.图片压缩简述 在我们开发过程中,有可能会遇到拍照.或者从相册中选择图片,要么单选或者多选,然后上传图片到服务器,一般情况下一张图片可能3-4M,如果类似微信朋友圈上传9张图片大约是 35M左右,如 ...
- 移动端 H5 拍照 从手机选择图片,移动端预览,图片压缩,图片预览,再上传服务器
前言:最近公司的项目在做全网营销,要做非微信浏览器的wap 站 的改版,其中涉及到的一点技术就是采用H5 选择手机相册中的图片,或者拍照,再将获取的图片进行压缩之后上传. 这个功能模块主要有这5点比较 ...
- Android 简单介绍图片压缩和图片内存缓存
转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/9316683 本篇文章主要内容来自于Android Doc,我翻译之后又做了些加工, ...
- 在windows和Linux上安装ImageMagick与jmagick,Maven配置、Java图片压缩代码(整理网上、结合自己情况、编写出来的新安装方式)
安装过程(如图所示) .Exceptionin thread "main" java.lang.UnsatisfiedLinkError:C:\WINDOWS\system32\j ...
- js 前端图片压缩+ios图片角度旋转
step1:读取选择的图片,并转为base64: function ImgToBase64 (e, fn) { // 图片方向角 //fn为传入的方法函数,在图片操作完成之后执行 var Orient ...
- 纯Java代码 图片压缩
Java图片压缩代码 package com.img; import java.awt.Image; import java.awt.image.BufferedImage; import java. ...
- iOS 图片按比例压缩,指定大小压缩
使用系统方法UIImageJPEGRepresentation(UIimage *image,CGFloat quality)进行图片质量压缩,暂且叫参数quality为压缩比吧,取值范围为0-1. ...
随机推荐
- python 字典列表排序operator.itemgetter()
举例: import operator x = [{'name':'Homer', 'age':39}, {'name':'Bart', 'age':10}] sorted_x = sorted(x, ...
- python--参数列表的分拆
当你要传递的参数已经是一个列表,调用的函数却接受分开一个个的参数,这个时候可以考虑参数列表拆分: 可以使用* 操作符来自动把参数列表拆开: args=[3,6] x=list(range(*args) ...
- c++ swap 函数
转载地址 1,最通用的模板交换函数模式:创建临时对象,调用对象的赋值操作符. template <class T> void swap ( T& a, T& b ) { T ...
- JS判断用户是否在线的方法
在以前坐项目的时候,经常碰见通过sessionLisnter来判断用户是否在线的方法,但是由于用户关闭浏览器时不会立刻是否session,因此大部分时候都考虑在页面中通过JS来监控页面是否关闭. 网络 ...
- Matlab验证公式取值范围
一.问题来源 t = 2xy/(x+y);融合相似度和信任度,我需要验证值域是不是[0,1]: 二.求解 clear all; clc; %linspace(0:1,0.1)这样是错的,第三个参数是段 ...
- 2010 Asia Fuzhou Regional Contest
A hard Aoshu Problem http://acm.hdu.edu.cn/showproblem.php?pid=3699 用深搜写排列,除法要注意,还有不能有前导零.当然可以5个for, ...
- android解析XML总结(SAX、Pull、Dom三种方式) <转载>
android解析XML总结(SAX.Pull.Dom三种方式) http://www.cnblogs.com/JerryWang1991/archive/2012/02/24/2365507.htm ...
- IBatis 常用XML
<select id="GetInfo"> <![CDATA[ select * from vi_WaterStation ]]> <dynami ...
- HDOJ 3177 Crixalis's Equipment
Crixalis's Equipment Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...
- CSS 外边距(margin)重叠及防止方法
边界重叠是指两个或多个盒子(可能相邻也可能嵌套)的相邻边界(其间没有任何非空内容.补白.边框)重合在一起而形成一个单一边界. 两个或多个块级盒子的垂直相邻边界会重合.结果的边界宽度是相邻边界宽度中最大 ...