`
tianyalinfeng
  • 浏览: 442538 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

图片缩放

    博客分类:
  • Java
 
阅读更多

import com.sun.image.codec.jpeg.JPEGImageEncoder;

import com.sun.image.codec.jpeg.JPEGCodec;

import com.sun.image.codec.jpeg.JPEGEncodeParam;

import javax.imageio.ImageIO;

import java.awt.image.BufferedImage;

import java.util.HashMap;

import java.util.List;

import java.util.ArrayList;

import java.io.File;

import java.io.IOException;

import java.io.FileOutputStream;

import java.util.Map;

public class ImageResizer {

 /**
  *
  * @param im
  *            原始图像
  *
  * @param resizeTimes
  *            需要缩小的倍数,缩小2倍为原来的1/2 ,这个数值越大,返回的图片越小
  *
  * @return 返回处理后的图像
  *
  */

 public BufferedImage resizeImage(BufferedImage im, float resizeTimes) {

  /* 原始图像的宽度和高度 */

  int width = im.getWidth();

  int height = im.getHeight();

  /* 调整后的图片的宽度和高度 */

  int toWidth = (int) (Float.parseFloat(String.valueOf(width)) / resizeTimes);

  int toHeight = (int) (Float.parseFloat(String.valueOf(height)) / resizeTimes);

  /* 新生成结果图片 */

  BufferedImage result = new BufferedImage(toWidth, toHeight,
    BufferedImage.TYPE_INT_RGB);

  result.getGraphics().drawImage(
    im.getScaledInstance(toWidth, toHeight,
      java.awt.Image.SCALE_SMOOTH), 0, 0, null);

  return result;

 }

 /**
  *
  * @param im
  *            原始图像
  *
  * @param resizeTimes
  *            倍数,比如0.5就是缩小一半,0.98等等double类型
  *
  * @return 返回处理后的图像
  *
  */

 public BufferedImage zoomImage(BufferedImage im, float resizeTimes) {

  /* 原始图像的宽度和高度 */

  int width = im.getWidth();

  int height = im.getHeight();

  /* 调整后的图片的宽度和高度 */

  int toWidth = (int) (Float.parseFloat(String.valueOf(width)) * resizeTimes);

  int toHeight = (int) (Float.parseFloat(String.valueOf(height)) * resizeTimes);

  /* 新生成结果图片 */

  BufferedImage result = new BufferedImage(toWidth, toHeight,
    BufferedImage.TYPE_INT_RGB);

  result.getGraphics().drawImage(
    im.getScaledInstance(toWidth, toHeight,
      java.awt.Image.SCALE_SMOOTH), 0, 0, null);

  return result;

 }

 /**
  *
  * @param path
  *            要转化的图像的文件夹,就是存放图像的文件夹路径
  *
  * @param type
  *            图片的后缀名组成的数组
  *
  * @return
  *
  */

 public List<BufferedImage> getImageList(String path, String[] type)
   throws IOException {

  Map<String, Boolean> map = new HashMap<String, Boolean>();

  for (String s : type) {

   map.put(s, true);

  }

  List<BufferedImage> result = new ArrayList<BufferedImage>();

  File[] fileList = new File(path).listFiles();

  for (File f : fileList) {

   if (f.length() == 0)

    continue;

   if (map.get(getExtension(f.getName())) == null)

    continue;

   result.add(javax.imageio.ImageIO.read(f));

  }

  return result;

 }

 /**
  *
  * 把图片写到磁盘上
  *
  * @param im
  *
  * @param path
  *            eg: C://home// 图片写入的文件夹地址
  *
  * @param fileName
  *            DCM1987.jpg 写入图片的名字
  *
  * @return
  *
  */

 public boolean writeToDisk(BufferedImage im, String path, String fileName) {

  File f = new File(path + fileName);

  String fileType = getExtension(fileName);

  if (fileType == null)

   return false;

  try {

   ImageIO.write(im, fileType, f);

   im.flush();

   return true;

  } catch (IOException e) {

   return false;

  }

 }

 public boolean writeHighQuality(BufferedImage im, String fileFullPath) {

  try {

   /* 输出到文件流 */

   FileOutputStream newimage = new FileOutputStream(fileFullPath
     + System.currentTimeMillis() + ".jpg");

   JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(newimage);

   JPEGEncodeParam jep = JPEGCodec.getDefaultJPEGEncodeParam(im);

   /* 压缩质量 */

   jep.setQuality(1f, true);

   encoder.encode(im, jep);

   /* 近JPEG编码 */

   newimage.close();

   return true;

  } catch (Exception e) {

   return false;

  }

 }

 /**
  *
  * 返回文件的文件后缀名
  *
  * @param fileName
  *
  * @return
  *
  */

 public String getExtension(String fileName) {

  try {

   return fileName.split("\\.")[fileName.split("\\.").length - 1];

  } catch (Exception e) {

   return null;

  }

 }

 public static void main(String[] args) throws Exception {
  /* 这儿填写你存放要缩小图片的文件夹全地址 */
  String inputFoler = "c:\\cameraImage";

  /* 这儿填写你转化后的图片存放的文件夹 */
  String outputFolder = "c:\\output\\";

  float times = 0.5f;

  /* 这个参数是要转化成的倍数,如果是1就是转化成1倍 */

  ImageResizer r = new ImageResizer();

  List<BufferedImage> imageList = r.getImageList(inputFoler,
    new String[] { "jpg" });

  for (BufferedImage i : imageList) {

   r.writeHighQuality(r.zoomImage(i, times), outputFolder);

  }
 }
}

分享到:
评论

相关推荐

    PHP图片缩放水印类.zip

    2. **图片缩放**:类库提供了多种缩放模式,如: - **裁切缩放模式**:根据预设的宽高比例,裁剪原始图片以适应目标尺寸,保持原图的纵横比。 - **比例缩放模式**:按照指定的比例调整图片大小,保持原图的纵横比...

    js图片缩放效果制作鼠标滚动图片等比例缩放

    总结一下,"js图片缩放效果制作鼠标滚动图片等比例缩放"涉及到的技术点有: 1. JavaScript事件监听:监听鼠标的滚轮事件。 2. CSS3变换:使用`transform`属性进行等比例缩放。 3. 计算缩放比例:根据滚动的增量和...

    qt实现图片缩放

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

    Android-一个Android图片缩放查看控件支持手势

    这个名为"Android-一个Android图片缩放查看控件支持手势"的项目,旨在提供一个自定义的视图控件,它允许用户通过手势进行图片的放大、缩小以及平移操作,提升用户体验。下面我们将深入探讨这个控件的关键知识点和...

    Android SurfaceView 实现图片缩放 滑动

    在实现图片缩放和滑动时,我们需要利用这一点来确保流畅的用户体验。 1. **SurfaceView的创建与初始化**: 在布局文件中添加SurfaceView,并在Activity的onCreate()方法中找到并初始化它。设置SurfaceHolder的回调...

    MFC图片缩放实例

    在本文中,我们将深入探讨如何使用MFC(Microsoft Foundation Class Library)进行图片缩放操作,特别是在将图片缩放以适应背景上的应用场景。MFC是微软为Windows开发的应用程序提供的一套C++类库,它极大地简化了...

    图片缩放图片缩放

    在Authorware这个强大的多媒体创作工具中,图片缩放是一个常用的操作,它可以帮助用户根据需要调整图像的大小,适应不同的展示需求。以下将详细介绍如何在Authorware中进行图片缩放以及相关的知识点。 一、...

    matlab图片缩放代码.zip

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

    页面中图片缩放拖动

    在网页设计中,图片缩放和拖动是增强用户体验的重要功能。用户可以通过这些交互操作来更细致地查看图片,尤其对于细节丰富的图像或者高分辨率的图片来说,这种功能显得尤为重要。下面将详细介绍如何实现“页面中图片...

    imageQ图片缩放拖拽jQuery小插件

    **imageQ图片缩放拖拽jQuery小插件详解** 在网页设计中,用户交互体验是至关重要的,而图片作为网页内容的重要组成部分,如何提供便捷、直观的操控方式以提升用户体验呢?`imageQ`就是这样一款基于jQuery的插件,它...

    jq图片缩放与拖动

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

    C# 图片缩放和移动程序

    在C#编程环境中,开发一个图片缩放和移动程序是一项常见的任务,特别是在图形用户界面(GUI)应用中。本程序是在.NET Framework 3.5环境下构建的,这意味着它利用了该框架提供的丰富的类库和功能。尽管如此,由于C#...

    图片缩放算法原理

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

    android imageview 图片缩放

    本文将深入探讨如何在Android中实现ImageView的图片缩放功能,同时结合异步加载和Activity的半透明效果,提升用户体验。 首先,我们要理解Android中ImageView的基本用法。ImageView可以设置为固定大小或根据图片...

    C# winfrom 触摸屏图片缩放 .rar

    在本文中,我们将深入探讨如何使用C# Winform开发一个支持触摸屏的图片缩放应用程序。这个项目的核心技术包括RegisterTouchWindow的使用、控件的子类化以及自定义消息处理,以及通过触摸手势实现图片的等比例缩放。...

    c#图片缩放的简单方法

    C#图片缩放,使用Bitmap的方式,可以将图片按比例缩放,也可以设定固定大小

    Qt 图片缩放,支持滚轮和按键缩放

    在Qt框架下,图片缩放是一项常见的功能,尤其在图形用户界面(GUI)应用中,如图像查看器或编辑器。本项目利用Qt 5.3.2版本实现了这一功能,支持通过滚轮和按键进行图片的放大与缩小,同时具备复位和切换图片的能力...

    jQuery图片缩放例子代码

    下面我们将深入探讨jQuery图片缩放的原理、实现方式以及相关知识点。 首先,我们需要理解jQuery的基本用法。jQuery通过$符号作为函数调用,用于选择DOM元素。例如,`$('img')`会选择所有的图片元素。选择器可以是ID...

    关于图片缩放的若干问题的解决

    在IT领域,图片缩放是一项常见的图像处理任务,它涉及到图像的分辨率调整、尺寸变换以及保持图像质量等关键因素。本文将深入探讨关于图片缩放的若干问题及其解决方案。 首先,我们要理解图片缩放的基本原理。图片是...

    flex 图片缩放移动组件

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

Global site tag (gtag.js) - Google Analytics