`

图片 压缩

    博客分类:
  • Java
阅读更多

原文http://cuisuqiang.iteye.com/blog/2045855

 

 

整理文档,搜刮出一个Java做图片压缩的代码,稍微整理精简一下做下分享。
首先,要压缩的图片格式不能说动态图片,你可以使用bmp、png、gif等,至于压缩质量,可以通过BufferedImage来指定。
在C盘的temp下放置一张图片pic123.jpg,尽量找一个像素高一点的图片,这里我找了一张5616*3744的。

Java代码收藏代码

  1. packagetest;
  2. importjava.io.*;
  3. importjava.util.Date;
  4. importjava.awt.*;
  5. importjava.awt.image.*;
  6. importjavax.imageio.ImageIO;
  7. importcom.sun.image.codec.jpeg.*;
  8. /**
  9. *图片压缩处理
  10. *@author崔素强
  11. */
  12. publicclassImgCompress{
  13. privateImageimg;
  14. privateintwidth;
  15. privateintheight;
  16. @SuppressWarnings("deprecation")
  17. publicstaticvoidmain(String[]args)throwsException{
  18. System.out.println("开始:"+newDate().toLocaleString());
  19. ImgCompressimgCom=newImgCompress("C:\\temp\\pic123.jpg");
  20. imgCom.resizeFix(400,400);
  21. System.out.println("结束:"+newDate().toLocaleString());
  22. }
  23. /**
  24. *构造函数
  25. */
  26. publicImgCompress(StringfileName)throwsIOException{
  27. Filefile=newFile(fileName);//读入文件
  28. img=ImageIO.read(file);//构造Image对象
  29. width=img.getWidth(null);//得到源图宽
  30. height=img.getHeight(null);//得到源图长
  31. }
  32. /**
  33. *按照宽度还是高度进行压缩
  34. *@paramwint最大宽度
  35. *@paramhint最大高度
  36. */
  37. publicvoidresizeFix(intw,inth)throwsIOException{
  38. if(width/height>w/h){
  39. resizeByWidth(w);
  40. }else{
  41. resizeByHeight(h);
  42. }
  43. }
  44. /**
  45. *以宽度为基准,等比例放缩图片
  46. *@paramwint新宽度
  47. */
  48. publicvoidresizeByWidth(intw)throwsIOException{
  49. inth=(int)(height*w/width);
  50. resize(w,h);
  51. }
  52. /**
  53. *以高度为基准,等比例缩放图片
  54. *@paramhint新高度
  55. */
  56. publicvoidresizeByHeight(inth)throwsIOException{
  57. intw=(int)(width*h/height);
  58. resize(w,h);
  59. }
  60. /**
  61. *强制压缩/放大图片到固定的大小
  62. *@paramwint新宽度
  63. *@paramhint新高度
  64. */
  65. publicvoidresize(intw,inth)throwsIOException{
  66. //SCALE_SMOOTH的缩略算法生成缩略图片的平滑度的优先级比速度高生成的图片质量比较好但速度慢
  67. BufferedImageimage=newBufferedImage(w,h,BufferedImage.TYPE_INT_RGB);
  68. image.getGraphics().drawImage(img,0,0,w,h,null);//绘制缩小后的图
  69. FiledestFile=newFile("C:\\temp\\456.jpg");
  70. FileOutputStreamout=newFileOutputStream(destFile);//输出到文件流
  71. //可以正常实现bmp、png、gif转jpg
  72. JPEGImageEncoderencoder=JPEGCodec.createJPEGEncoder(out);
  73. encoder.encode(image);//JPEG编码
  74. out.close();
  75. }
  76. }

 

运行后在C盘temp下生成一个465.jpg,像素大小为600*400,像素大小是我指定的。用时也就是一两秒的事情,注意,我这张图片是10M的,压缩后是40.5KB
一些细节事项可以参考代码中的注释。

 

要注意的是,你可能想试一试较大图片的处理能力,如果你的JDK没有指定默认内存,那可能会有如下异常,因为内存不够大:

Java代码收藏代码
  1. 开始:2014-4-1416:25:11
  2. Exceptioninthread"main"java.lang.OutOfMemoryError:Javaheapspace
  3. atjava.awt.image.DataBufferByte.<init>(DataBufferByte.java:58)
  4. atjava.awt.image.ComponentSampleModel.createDataBuffer(ComponentSampleModel.java:397)
  5. atjava.awt.image.Raster.createWritableRaster(Raster.java:938)
  6. atjavax.imageio.ImageTypeSpecifier.createBufferedImage(ImageTypeSpecifier.java:1169)
  7. atjavax.imageio.ImageReader.getDestination(ImageReader.java:2879)
  8. atcom.sun.imageio.plugins.jpeg.JPEGImageReader.readInternal(JPEGImageReader.java:943)
  9. atcom.sun.imageio.plugins.jpeg.JPEGImageReader.read(JPEGImageReader.java:915)
  10. atjavax.imageio.ImageIO.read(ImageIO.java:1422)
  11. atjavax.imageio.ImageIO.read(ImageIO.java:1282)
  12. attest.ImgCompress.<init>(ImgCompress.java:31)
  13. attest.ImgCompress.main(ImgCompress.java:21)

 

解决方法:
在Eclipse里选:Window->Preference->Installed JREs->Edit(选中jre),
在Default VM Arguments里输入-Xms256m -Xmx1024m,表示最小堆内存256M,最大堆1G,然后运行就可以了

 

分享到:
评论

相关推荐

    C# core 图片压缩 图片无损压缩 图片无损剪切 无损图片压缩 无损图片剪切

    在C# Core中进行图片处理是一项常见的任务,其中包括图片压缩和剪切操作。无损压缩和剪切技术在保持原始图像质量的同时,可以减小文件大小或改变图像的形状。以下将详细介绍C# Core中如何实现这些功能。 首先,我们...

    易语言图片压缩到最小

    在IT行业中,图片压缩是一项非常重要的技术,尤其是在网络传输、存储和显示图像时。"易语言图片压缩到最小"这个主题涉及到的是如何使用易语言这一编程工具来实现图片的高效压缩,以减小其占用的存储空间。易语言是...

    C#图片压缩工具源代码

    Grearo图片压缩工具 功能介绍【必读】: 1 图片批量压缩(30以内,依个人机器以及被压缩图片大小而定); 2 图片限定宽度,等比例压缩; 3 图片限定高度,等比例压缩; 4 图片限定高度,宽度压缩;...

    图片压缩小工具

    《ImageResizer.exe:一款轻巧实用的图片压缩神器》 在数字时代,我们经常会遇到大量图片需要处理的情况,无论是为了存储空间的节省,还是为了网络传输的便捷,图片压缩都成为了必不可少的操作。今天,我们要介绍的...

    图片压缩节约内存

    在IT行业中,图片压缩是一个非常重要的技术,尤其是在内存管理和移动应用开发中。标题"图片压缩节约内存"直接指向了这个核心目标:通过压缩图片来减少应用程序对内存的占用,从而提高性能并避免内存溢出的问题。这在...

    java图片压缩处理(可以压缩为任意大小

    在Java编程语言中,处理图片压缩是一项常见的任务,特别是在存储、传输或展示大量图像资源时。本主题将深入探讨如何使用Java实现图片压缩,并能够将其调整到任意大小,同时保持图片质量并避免变形。 首先,我们需要...

    图片压缩到最小.rar

    在IT领域,图片压缩是一项重要的技术,特别是在网络传输、存储和显示方面。"图片压缩到最小.rar"这个压缩包文件的标题和描述直接指向了这一主题。本文将深入探讨图片压缩的基本原理、常见方法以及易语言...

    小巧的图片压缩工具,压缩比例可调。

    在IT领域,图片压缩是一个非常实用的技术,尤其在网页设计、社交媒体分享、存储空间有限的设备上。本文将深入探讨一款被描述为“小巧的图片压缩工具,压缩比例可调”的软件,它允许用户批量处理图片,降低文件大小而...

    VB6图片压缩处理源码

    总的来说,VB6图片压缩处理源码可能涵盖了图像读取、压缩算法应用、图像尺寸调整、文件I/O以及用户交互等多个方面,体现了VB6结合外部库进行图像处理的能力。通过理解这些知识点,可以对源码进行深入研究和扩展,以...

    蜂鸟图片压缩软件 JPG PNG 压缩

    【蜂鸟图片压缩软件 JPG PNG 压缩】 在数字媒体和互联网领域,图片的大小对网站加载速度和存储空间有着直接影响。为了优化用户体验和节省资源,图片压缩变得至关重要。"蜂鸟图片压缩软件"(Hummingbird)是专为此...

    前端图片压缩base64后台还原图片

    本文将深入探讨“前端图片压缩base64”这一主题,以及如何在后台还原这些压缩后的图片。 一、前端图片压缩 前端图片压缩的主要目标是减小图片大小,从而减少HTTP请求的数据量,加快网页加载速度。这通常通过以下两...

    html5 canvas 图片压缩

    HTML5 Canvas是Web开发中的一个强大工具,它允许开发者在网页上进行动态...通过理解并运用上述技术,你可以创建一个高效且兼容性强的图片压缩解决方案,确保在微信、Chrome、Firefox等不同环境中都能得到良好的效果。

    pb 图片压缩、解压技术结合XML

    在本项目中,"pb 图片压缩、解压技术结合XML" 提到了如何使用PB进行图片处理,具体涉及图片的压缩和解压,并结合XML文件进行数据存储。以下是关于这个主题的详细知识点: 1. **图片压缩**:图片压缩通常是为了减小...

    移动端H5图片压缩上传

    在移动端H5应用中,图片压缩上传是一项常见的需求,它涉及到前端图像处理、文件上传以及与服务器的交互。本文将详细讲解如何实现这一功能,主要关注JavaScript开发中的图片展示处理。 首先,我们要理解图片压缩的...

    java高清图片压缩的2种方法

    首先,我们来看看使用Java标准库中的`javax.imageio.ImageIO`类进行图片压缩。`ImageIO`类提供了读取、写入和处理图像的功能。以下是一个简单的示例,展示如何读取一个图片文件,然后以较低的质量重新保存,从而达到...

    事业单位图片压缩工具

    【事业单位图片压缩工具】是一款专为事业单位设计的高效图片压缩软件,它能够处理市面上常见的多种图片格式,如JPEG(JPG)、PNG、BMP、GIF等。该工具的主要功能在于大幅度减小图片的文件大小,例如,一个原本2MB的...

    java图片压缩处理 支持gif

    在Java编程语言中,处理图片压缩是一项常见的任务,特别是在网页开发、移动应用或者任何需要减小图片文件大小的场景中。"java图片压缩处理 支持gif"这个标题表明我们将探讨如何使用Java来处理和压缩GIF动态图,因为...

    阿里云图片压缩SimpleImage jar

    1. 图片压缩:SimpleImage提供了多种压缩算法,可以根据需求调整压缩级别,以平衡图片质量和文件大小。它可以处理JPG、PNG等多种常见格式的图片,有效地减小图片的存储空间和网络传输成本。 2. 图片裁剪:对于需要...

    mui图片压缩上传及回显(包含java后台)

    首先,图片压缩是减少上传时间和服务器存储空间的关键步骤。`mui`提供了一种方法来实现这个功能,通常通过`HTML5`的`FileReader`和`canvas`API来读取图片并进行压缩。在选择图片后,`mui`会触发一个事件,允许我们在...

    Caesium_图片压缩不失真

    Caesium是一款专业的图片压缩工具,它以“不失真”为亮点,旨在在保证图像质量的同时,有效减小图片文件的体积。这对于需要处理大量图片,尤其是网页设计、摄影爱好者、社交媒体用户以及任何需要节省存储空间的用户...

Global site tag (gtag.js) - Google Analytics