`
crazier9527
  • 浏览: 1005019 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

图片缩放与转换

    博客分类:
  • Java
阅读更多

通过对图片重绘,达到图片缩放、压缩编码转换功能。

Java代码 复制代码
  1.   
  2. /**  
  3.  * 缩放图片  
  4.  *   
  5.  * @param width  
  6.  *            输出宽度  
  7.  * @param height  
  8.  *            输出高度  
  9.  * @param input  
  10.  *            输入流  
  11.  * @param output  
  12.  *            输出流  
  13.  * @param format  
  14.  *            输出格式  
  15.  * @return  
  16.  * @throws Exception  
  17.  */  
  18. public static boolean convert(int width, int height, InputStream input,   
  19.         OutputStream output, String format) throws Exception {   
  20.     // 输入   
  21.     BufferedImage inputImage = ImageIO.read(input);   
  22.     // 转换   
  23.     RenderedImage im = (RenderedImage) convert(height, height, inputImage);   
  24.     // 输出   
  25.     return ImageIO.write(im, format, output);   
  26. }   
  27.   
  28. /**  
  29.  * 转换压缩算法  
  30.  *   
  31.  * @param input  
  32.  *            输入文件  
  33.  * @param output  
  34.  *            输出文件  
  35.  * @return  
  36.  * @throws Exception  
  37.  */  
  38. public static boolean convert(File input, File output) throws Exception {   
  39.     // 输入   
  40.     BufferedImage inputImage = ImageIO.read(input);   
  41.   
  42.     // 转换   
  43.     int width = inputImage.getWidth();   
  44.     int height = inputImage.getHeight();   
  45.   
  46.     RenderedImage im = (RenderedImage) convert(width, height, inputImage);   
  47.     String outputFilename = output.getName();   
  48.     String format = outputFilename.substring(outputFilename   
  49.             .lastIndexOf('.') + 1);   
  50.     // 输出   
  51.     return ImageIO.write(im, format, output);   
  52. }   
  53.   
  54. /**  
  55.  * 缩放图片  
  56.  *   
  57.  * @param width  
  58.  *            输出宽度  
  59.  * @param height  
  60.  *            输出高度  
  61.  * @param input  
  62.  *            输入文件  
  63.  * @param output  
  64.  *            输出文件  
  65.  * @return  
  66.  * @throws Exception  
  67.  */  
  68. public static boolean convert(int width, int height, File input, File output)   
  69.         throws Exception {   
  70.     // 输入   
  71.     BufferedImage inputImage = ImageIO.read(input);   
  72.     // 转换   
  73.     RenderedImage im = (RenderedImage) convert(width, height, inputImage);   
  74.     String outputFilename = output.getName();   
  75.     String format = outputFilename.substring(outputFilename   
  76.             .lastIndexOf('.') + 1);   
  77.     // 输出   
  78.     return ImageIO.write(im, format, output);   
  79. }   
  80.   
  81. /**  
  82.  * 缩放图片  
  83.  *   
  84.  * @param width  
  85.  *            输出宽度  
  86.  * @param height  
  87.  *            输出高度  
  88.  * @param input  
  89.  *            输入路径  
  90.  * @param output  
  91.  *            输出路径  
  92.  * @return  
  93.  * @throws Exception  
  94.  */  
  95. public static boolean convert(int width, int height, String inputPath,   
  96.         String outputPath) throws Exception {   
  97.     return convert(width, height, new File(inputPath), new File(outputPath));   
  98. }   
  99.   
  100. /**  
  101.  * 转换  
  102.  *   
  103.  * @param width  
  104.  *            输出宽度  
  105.  * @param height  
  106.  *            输出高度  
  107.  * @param input  
  108.  *            BufferedImage  
  109.  * @return BufferedImage  
  110.  * @throws Exception  
  111.  */  
  112. private static BufferedImage convert(int width, int height,   
  113.         BufferedImage input) throws Exception {   
  114.     // 初始化输出图片   
  115.     BufferedImage output = new BufferedImage(width, height,   
  116.             BufferedImage.TYPE_INT_RGB);   
  117.   
  118.     // 重新绘图   
  119.     Image image = input.getScaledInstance(output.getWidth(), output   
  120.             .getHeight(), output.getType());   
  121.   
  122.     output.createGraphics().drawImage(image, nullnull);   
  123.   
  124.     return output;   
  125. }   
  126.   
  127. /**  
  128.  * 等比缩放图片  
  129.  *   
  130.  * @param width  
  131.  *            输出宽度  
  132.  * @param height  
  133.  *            输出高度  
  134.  * @param input  
  135.  *            输入流  
  136.  * @param output  
  137.  *            输出流  
  138.  * @return  
  139.  * @throws Exception  
  140.  */  
  141. public static boolean equimultipleConvert(int width, int height,   
  142.         String input, String output) throws Exception {   
  143.     return equimultipleConvert(width, height, new File(input), new File(   
  144.             output));   
  145. }   
  146.   
  147. /**  
  148.  * 等比缩放图片  
  149.  *   
  150.  * @param width  
  151.  *            输出宽度  
  152.  * @param height  
  153.  *            输出高度  
  154.  * @param input  
  155.  *            输入流  
  156.  * @param output  
  157.  *            输出流  
  158.  * @return  
  159.  *   
  160.  * @throws Exception  
  161.  */  
  162. public static boolean equimultipleConvert(int width, int height,   
  163.         File input, File output) throws Exception {   
  164.     // 输入   
  165.     BufferedImage image = ImageIO.read(input);   
  166.   
  167.     // 重新核算尺寸   
  168.     if (image.getWidth() > 0 && image.getHeight() > 0) {   
  169.         if ((image.getWidth() / image.getHeight()) >= (width / height)) {   
  170.             if (image.getWidth() > width) {   
  171.                 height = (image.getHeight() * width) / image.getWidth();   
  172.             } else {   
  173.                 width = image.getWidth();   
  174.                 height = image.getHeight();   
  175.             }   
  176.         } else {   
  177.             if (image.getHeight() > height) {   
  178.                 width = (image.getWidth() * height) / image.getHeight();   
  179.             } else {   
  180.                 width = image.getWidth();   
  181.                 height = image.getHeight();   
  182.             }   
  183.         }   
  184.     }   
  185.   
  186.     // 转换 输出   
  187.     return convert(width, height, input, output);   
  188. }
分享到:
评论
1 楼 iamxiaole 2009-10-19  
这个好像在JDK1.5下的GIF会出现问题喔。

相关推荐

    图片批量缩放转换器

    "图片批量缩放转换器"是一款针对这一需求设计的软件工具,它能够帮助用户高效地管理和优化大量图片,无需手动一一操作。这款工具的主要功能包括图片的批量缩放和格式转换,极大地提升了工作效率。 首先,我们来详细...

    jq图片缩放与拖动

    本实例"jq图片缩放与拖动"是基于jQuery实现的一个功能,允许用户对图片进行缩放和拖动操作,提高了网页的交互性和用户体验。 首先,我们来看"jq图片缩放与拖动"的核心技术点: 1. **jQuery选择器**:jQuery提供了...

    图片批量缩放转换器.rar

    可以批量压缩图片的工具,有按比例压缩与按大小压缩两种方式,最小最快最简洁的绿色图片批量缩放转换工具,可以根据比例和特定长宽进行图片文件的缩放,可以对PNG、BMP、JPG、GIF、TIF图片文件相互进行转换。

    c#实现批量图片缩放,格式转换程序

    **批量图片缩放** 缩放图片主要涉及到两个关键步骤:加载原始图片和创建缩放后的图片。我们可以使用Bitmap类的构造函数来加载图片,然后通过SetResolution方法设置分辨率,再用DrawImage方法进行缩放。以下是一个...

    VB图片缩放转换精灵源程序

    【VB图片缩放转换精灵源程序】是一款基于Visual Basic(VB)开发的图像处理工具,主要功能是实现图片的缩放和转换。该程序适用于初级到中级的VB开发者,可以帮助他们理解和学习如何处理图像文件,进行尺寸调整以及...

    qt实现图片缩放

    在Qt框架中,图片缩放是一项常见的图像处理任务,它涉及到图形用户界面(GUI)的开发,特别是当我们要展示或操作图像时。Qt提供了一系列的类和方法来帮助开发者实现这个功能。以下将详细介绍如何使用Qt来实现图片的...

    c#实现批量图片缩放,格式转换程序 (源码)

    以上就是基于C#实现批量图片缩放和格式转换的核心知识。在实际应用中,可能还需要考虑到错误处理、多线程处理以提高效率、用户界面设计等更多细节。这个项目提供了一个很好的起点,开发者可以根据自己的需求进行扩展...

    图片缩放JS插件

    Hammer.js的核心在于它能够检测和解析用户的触摸行为,并将其转换为可编程的事件,从而在图片缩放插件中实现图片的放大和缩小。 "hammerPlugin.js"可能是基于Hammer.js的特定图片缩放插件,扩展了Hammer的基础功能...

    flex 图片缩放移动组件

    本文将详细讲解如何使用Flex创建一个图片缩放移动组件,以及涉及的相关知识点。 首先,我们要理解Flex中的核心组件体系,它包括容器(Container)、基本组件(Basic Components)和自定义组件(Custom Components)...

    图片缩放算法原理

    【图片缩放算法原理】 图片缩放是计算机图形学中常见的操作,用于调整图像的尺寸,使其适应不同的显示需求。图像缩放分为放大和缩小,通常涉及到像素级别的处理。这里我们将探讨一种常用的图像缩放算法——双线性内...

    基于java的图片文件格式转换和线性缩放

    ### 基于Java的图片文件格式转换与线性缩放技术详解 #### 一、引言 在当今数字化时代,图像处理技术是信息技术领域的一个重要组成部分。图像处理包括多种操作,如格式转换、图像缩放等。这些操作在很多应用中都至...

    图片缩放截取等常用

    1.对图片进行缩放处理2.截取图片中的一部分3.将图片缩放并嵌入到另一张纯色图片中4.图片添加水印:添加图片水印和文字水印5.控制Jpg图片的输出质量6.将文本信息隐藏在图片文件中(建议使用BMP图片)

    图片缩放防止OOM

    本教程“图片缩放防止OOM”旨在教你如何有效地导入、处理图片资源,避免内存溢出,同时进行图片的放大和缩小操作。 一、理解OOM 当Android应用程序在运行时耗尽了可用内存,系统会抛出一个OOM异常,可能导致应用...

    java实现图片缩放

    要使用ImageMagick在Java中进行图片缩放,首先需要在系统中安装ImageMagick,然后添加`Imagemagick-Java`库到项目中。这个库通常以JAR文件的形式提供,可以将其添加到项目的类路径中。 接下来,我们需要了解如何...

    图片缩放代码,等比例显示图片

    在IT领域,图片缩放是一项常见的任务,尤其在网页设计、图像处理软件和移动应用中。等比例显示图片是保持图像原始宽高比的关键,以免失真或变形。本篇文章将详细探讨如何实现图片的等比例缩放,以及在实际应用中的...

    图片批量缩放&转换

    非常简单而又非常实用的图像处理工具,只需事先设置好自己目标图像的参数(文件大小,图像格式),点击“批量转换”图像处理很快处理完毕。如果批处理后没有满足自己的要求,可以改变参数值重新处理,直到满意为止,...

    matlab图片缩放代码.zip

    在图像处理领域,图片缩放是一项常见的操作,用于调整图像的尺寸以适应不同的显示或分析需求。本压缩包“matlab图片缩放代码.zip”提供了一组MATLAB代码,包括最近邻插值(singlelineal.m)、双线性插值(double.m)...

    易语言图片无损缩放

    3. **像素组缩放**:为了实现无损缩放,易语言提供了`像素组_缩放图片_快速`和`像素组_缩放图片_无损`两个函数。前者可能牺牲一些质量来换取速度,而后者则会确保在任何情况下都能保持图像质量。无损缩放通常采用双...

    Android图片缩放动画Demo

    这个"Android图片缩放动画Demo"正是为了实现这样的功能而设计的。下面将详细解释其中涉及的关键知识点: 1. **ImageView的使用**: - `ImageView`是Android中展示图片的基础组件,可以加载本地或网络资源的图片。 ...

    自定义ImageView图片缩放

    在Android开发中,自定义控件是提升应用用户体验和满足...以上就是关于自定义ImageView图片缩放的核心知识点,希望对你的开发工作有所帮助。在实践中不断优化和调整,你将能构建出更加高效和用户友好的图片显示组件。

Global site tag (gtag.js) - Google Analytics