1、图片压缩
//图片压缩
public static void imageCompress(String path,String newPath,String fileName,String toFileName,float scale,int width,int height){
imageCompress(path,newPath, fileName, toFileName, scale, 0.75f, width, height);
}
/**
* 描述:
* @param path 需要压缩的图片路径
* @param fileName 要压缩的图片名称
* @param toFileName 压缩后的图片名称
* @param scale 压缩比例 不能大于1,默认0.5
* @param quality 压缩品质介于0.1~1.0之间
* @param width 压缩后的图片的宽度
* @param height 压缩后的图片的高度
* 返回值:void
*/
private static void imageCompress(String path,String newPath, String fileName,String toFileName,float scale,float quality,int width,int height){
FileOutputStream out = null;
try {
Image image = javax.imageio.ImageIO.read(new File(path +"/"+ fileName));
int imageWidth = image.getWidth(null);
int imageHeight = image.getHeight(null);
if(scale >=1.0) scale = 0.99f;//默认压缩比为0.5,压缩比越大,对内存要去越高,可能导致内存溢出
//按比例计算出来的压缩比
float realscale = getRatio(imageWidth,imageHeight,width,height);
float finalScale = Math.min(scale, realscale);//取压缩比最小的进行压缩
imageWidth = (int)(finalScale*imageWidth);
imageHeight = (int)(finalScale*imageHeight);
image = image.getScaledInstance(imageWidth, imageHeight, Image.SCALE_AREA_AVERAGING);
BufferedImage mBufferedImage = new BufferedImage(imageWidth, imageHeight,BufferedImage.TYPE_INT_RGB);
Graphics2D g2 = mBufferedImage.createGraphics();
g2.drawImage(image, 0, 0,imageWidth, imageHeight, Color.white,null);
g2.dispose();
float[] kernelData2 = {-0.125f, -0.125f, -0.125f,-0.125f,2, -0.125f,-0.125f,-0.125f, -0.125f };
Kernel kernel = new Kernel(3, 3, kernelData2);
ConvolveOp cOp = new ConvolveOp(kernel, ConvolveOp.EDGE_NO_OP, null);
mBufferedImage = cOp.filter(mBufferedImage, null);
out = new FileOutputStream(newPath+"/" + toFileName);
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(mBufferedImage);
param.setQuality(quality, true);//默认0.75
encoder.setJPEGEncodeParam(param);
encoder.encode(mBufferedImage);
}catch (FileNotFoundException fnf){
fnf.printStackTrace();
}catch (IOException ioe){
ioe.printStackTrace();
}catch(Exception ex){
ex.printStackTrace();
}finally{
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
private static float getRatio(int width,int height,int maxWidth,int maxHeight){
float Ratio = 1.0f;
float widthRatio ;
float heightRatio ;
widthRatio = (float)maxWidth/width;
heightRatio = (float)maxHeight/height;
if(widthRatio<1.0 || heightRatio<1.0){
Ratio = widthRatio<=heightRatio?widthRatio:heightRatio;
}
return Ratio;
}
/**
* 动态获取压缩比列根据宽度
* @param map
* @return
*/
public static float getCompressSize(float width){
float result = 0.5f;
result = 595/width;
result = Float.parseFloat(StringUtil.formatNumber("#.##", result));
return result;
}
/**
* 计算图片尺寸大小等信息:w宽、h高、s大小。异常时返回null。
*
* @param imgpath 图片路径
* @return 图片信息map
*/
public static Map getImgInfo(InputStream fis) throws Exception {
Map map = new HashMap();
BufferedImage buff = ImageIO.read(fis);
map.put("w", new Long(buff.getWidth()* 1L)); //宽度
//map.put("h", new Long(buff.getHeight()* 1L)); //高度
//map.put("s", new Long(imgfile.length())); //获取图片大小
fis.close();
return map;
}
分享到:
相关推荐
java jpeg 接口 api java图片操作两个接口一个类的api
java 图片压缩 图片切割
java操作图片的工具类,包括图片放大缩小、图片裁剪、打水印(文字水印和图片水印)
java 对图片操作的工具类, 对图片进行剪裁 重置图片大小 按倍率缩小图片 对图片裁剪,并把裁剪新图片保存
java实现对图片裁剪,并把裁剪新图片保存,按倍率缩小、放大图片,重置图形的边长大小,拼接图片等等操作 使用Java进行图像处理的一些基础操作,java实现对图片的各种操作下载
在java中通过ImageMagick...在wiondows操作系统java开发环境中可通过ImageMagick安装包和im4java.jar把其他格式图片如pdf转换为PNG,JPEG等常用格式图片。操作其实比较简单。内附有操作步骤及图片转换文件大小的调整。
java写入excel图片操作 包含需要的类库和相应的代码
java 操作图片,往图片加字 ,将多张图片合并...可以用来制作 许可证书 、安全证书 等等需求
主要介绍了Java实现用Mysql存取图片操作实例,本文讲解了使用BLOB类型保存和读取图片的代码实例,需要的朋友可以参考下
在java中通过ImageMagick...在wiondows操作系统java开发环境中可通过ImageMagick安装包和im4java.jar把其他格式图片如HEIC转换为PNG,JPEG等常用格式图片。操作其实比较简单。内附有操作步骤及图片转换文件大小的调整。
SimpleImage是阿里巴巴的一个Java图片处理的类库,可以实现图片缩略、水印等处理。 SimpleImage中的ImageRender是图片处理的基类,它是一个抽象类,我们看到,该类中定义了一个抽象方法render(),同时持有一个对...
java操作excel实现水印图片
大哥 还是大姐不要再删了 我要崩溃了 我上传的资源就是有关于javaja操作wordpdf图片生成图片水印的 一些相关资料而已
java——图片字体显示方块问题处理 /usr/java/jdk1.7.0_80/jre/lib/fonts/fallback msyhbd.ttf msyh.ttf wqy-microhei.ttf /usr/java/jdk1.7.0_80/lib/fonts/fallback msyhbd.ttf msyh.ttf wqy-microhei.ttf
将图片加载到内存 循环图片每个像素 找到你需要修改的像素 进行颜色修改。然后再图片BASE64
使用J2SE 对jpeg格式的图片进行操控,并实现一定的绘图功能
这个java例程实现了java swing画的图片大小随意调整,是真正的像素调整,绝对可以用!很容易看懂!
java实现图片上传并添加水印效果(文字水印,蒙版,logo图片),自动进行文字大小行数位置匹配,文字自动换行
1.功能:该API为适用于Java平台下,通过后端程序代码调用API接口操作PDF文档,可实现如下功能: 1.1 文档转换:PDF转图片/Word/SVG/XPS/HTML/XPS/TIFF、图片转PDF 1.2 文档操作:文档创建、合并、拆分、压缩、复制...
主要介绍了java+MongoDB实现存图片、下载图片的方法,结合实例形式详细分析了java结合MongoDB实现图片的存储与下载相关操作技巧,需要的朋友可以参考下