图片缩放与转换

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

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. }

你可能感兴趣的:(算法)