`

java图片处理

阅读更多

package util;

import java.io.*;
import java.awt.*;
import java.awt.image.*;
import java.awt.Graphics;
import java.awt.color.ColorSpace;
import javax.imageio.ImageIO;

public class ImageCut {
 /**
  * 缩放图像:按比例
  *
  * @param srcImageFile
  *            源图像文件地址
  * @param result
  *            缩放后的图像地址
  * @param scale
  *            缩放比例
  * @param flag
  *            缩放选择:true 放大; false 缩小;
  */
 public static void scale(String srcImageFile, String result, int scale,
   boolean flag) {
  if (!new File(result).exists()) {
   if (!(new File(result).isDirectory()))
    new File(result).mkdir();
  }
  try {
   BufferedImage src = ImageIO.read(new File(srcImageFile)); // 读入文件
   int width = src.getWidth(); // 得到源图宽
   int height = src.getHeight(); // 得到源图长
   if (flag) {
    // 放大
    width = width * scale;
    height = height * scale;
   } else {
    // 缩小
    width = width / scale;
    height = height / scale;
   }
   Image image = src.getScaledInstance(width, height,
     Image.SCALE_DEFAULT);
   BufferedImage tag = new BufferedImage(width, height,
     BufferedImage.TYPE_INT_RGB);
   Graphics g = tag.getGraphics();
   g.drawImage(image, 0, 0, null); // 绘制缩小后的图
   g.dispose();
   ImageIO.write(tag, "JPEG", new File(result));// 输出到文件流
  } catch (IOException e) {
   e.printStackTrace();
  }
 }

 /**
  * 缩放图像:指定大小: 实现等比例缩放
  *
  * @param srcImageFile:
  *            源图像文件地址
  * @param result:
  *            缩放后的图像地址
  * @param suffix:后缀
  * @param width:指定宽
  * @param height指定高
  */
 public static void scale(String srcImageFile, String resultPath,
   String fileName, String suffix, Integer width, Integer height) {
  if (!new File(resultPath).exists()) {
   if (!(new File(resultPath).isDirectory()))
    new File(resultPath).mkdir();
  }

  try {
   BufferedImage src = ImageIO.read(new File(srcImageFile)); // 读入文件
   int w = src.getWidth(); // 得到源图宽
   int h = src.getHeight(); // 得到源图长
   int ww = 0;
   int hh = 0;

   if (w > 0 && h > 0) {
    if (w / h >= width / height) {
     if (w > width) {
      ww = width;
      hh = (h * width) / w;
     } else {
      ww = w;
      hh = h;
     }
    } else {
     if (h > height) {
      hh = height;
      ww = (w * height) / h;
     } else {
      ww = w;
      hh = h;
     }
    }
   }

   Image image = src.getScaledInstance(ww, hh,
     Image.SCALE_DEFAULT);
   BufferedImage tag = new BufferedImage(ww, hh,
     BufferedImage.TYPE_INT_RGB);
   Graphics g = tag.getGraphics();
   g.drawImage(image, 0, 0, null); // 绘制缩小后的图
   g.dispose();
   String path = resultPath + "\\" + fileName + suffix;
   ImageIO.write(tag, "JPEG", new File(path));// 输出到文件流
  } catch (IOException e) {
   e.printStackTrace();
  }
 }

 /**
  * 图像切割
  *
  * @param srcImageFile
  *            源图像地址
  * @param descDir
  *            切片目标文件夹
  * @param destWidth
  *            目标切片宽度
  * @param destHeight
  *            目标切片高度
  */
 public static void cut(String srcImageFile, String descDir, int destWidth,
   int destHeight) {
  if (!new File(descDir).exists()) {
   if (!(new File(descDir).isDirectory()))
    new File(descDir).mkdir();
  }
  try {
   Image img;
   ImageFilter cropFilter;
   // 读取源图像
   BufferedImage bi = ImageIO.read(new File(srcImageFile));
   int srcWidth = bi.getHeight(); // 源图宽度
   int srcHeight = bi.getWidth(); // 源图高度
   if (srcWidth > destWidth && srcHeight > destHeight) {
    Image image = bi.getScaledInstance(srcWidth, srcHeight,
      Image.SCALE_DEFAULT);
    destWidth = 200; // 切片宽度
    destHeight = 150; // 切片高度
    int cols = 0; // 切片横向数量
    int rows = 0; // 切片纵向数量
    // 计算切片的横向和纵向数量
    if (srcWidth % destWidth == 0) {
     cols = srcWidth / destWidth;
    } else {
     cols = (int) Math.floor(srcWidth / destWidth) + 1;
    }
    if (srcHeight % destHeight == 0) {
     rows = srcHeight / destHeight;
    } else {
     rows = (int) Math.floor(srcHeight / destHeight) + 1;
    }
    // 循环建立切片
    // 改进的想法:是否可用多线程加快切割速度
    for (int i = 0; i < rows; i++) {
     for (int j = 0; j < cols; j++) {
      // 四个参数分别为图像起点坐标和宽高
      // 即: CropImageFilter(int x,int y,int width,int height)
      cropFilter = new CropImageFilter(j * 200, i * 150,
        destWidth, destHeight);
      img = Toolkit.getDefaultToolkit().createImage(
        new FilteredImageSource(image.getSource(),
          cropFilter));
      BufferedImage tag = new BufferedImage(destWidth,
        destHeight, BufferedImage.TYPE_INT_RGB);
      Graphics g = tag.getGraphics();
      g.drawImage(img, 0, 0, null); // 绘制缩小后的图
      g.dispose();
      // 输出为文件
      ImageIO.write(tag, "JPEG", new File(descDir
        + "pre_map_" + i + "_" + j + ".jpg"));
     }
    }
   }
  } catch (Exception e) {
   e.printStackTrace();
  }
 }

 /**
  * 图像类型转换 GIF->JPG GIF->PNG PNG->JPG PNG->GIF(X)
  */
 public static void convert(String source, String result) {
  try {
   File f = new File(source);
   f.canRead();
   f.canWrite();
   BufferedImage src = ImageIO.read(f);
   ImageIO.write(src, "JPG", new File(result));
  } catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }

 /**
  * 彩色转为黑白
  *
  * @param source
  * @param result
  */
 public static void gray(String source, String result) {
  try {
   BufferedImage src = ImageIO.read(new File(source));
   ColorSpace cs = ColorSpace.getInstance(ColorSpace.CS_GRAY);
   ColorConvertOp op = new ColorConvertOp(cs, null);
   src = op.filter(src, null);
   ImageIO.write(src, "JPEG", new File(result));
  } catch (IOException e) {
   e.printStackTrace();
  }
 }

 /**
  * @param args
  */
 public static void main(String[] args) {
  scale("e:/1.jpg", "e:/t/", "2", "_houzhui.jpg", 200, 150);
 }
}

分享到:
评论

相关推荐

    Java图片处理类库SimpleImage.zip

    SimpleImage是阿里巴巴的一个Java图片处理的类库,可以实现图片缩略、水印等处理。 SimpleImage中的ImageRender是图片处理的基类,它是一个抽象类,我们看到,该类中定义了一个抽象方法render(),同时持有一个对...

    Java图片处理工具ImageMagick

    Java图片处理工具ImageMagick是一个强大的跨平台图形处理库,它允许开发人员在Java应用程序中进行复杂的图像操作,包括但不限于转换、编辑、合成图像以及处理大量格式的图像文件。ImageMagick是由C语言编写的,但...

    java 图片处理工具类 java 图片处理工具类

    java 图片处理工具类 java 图片处理工具类 java 图片处理工具类 java 图片处理工具类 java 图片处理工具类 java 图片处理工具类 java 图片处理工具类 java 图片处理工具类 java 图片处理工具类 java 图片处理工具类 ...

    java 图片处理源码

    这是一个Java图片处理程序。 Java 开源代码,高手学习 java 图片处理源码

    Java图片处理技术

    在Java编程语言中,处理...综上所述,这段代码展示了Java如何利用AWT库进行图片处理,包括添加图片和文字水印,以及处理透明度和定位。这些都是Java图形处理的基本技术,对于开发涉及图像编辑和处理的应用非常有用。

Global site tag (gtag.js) - Google Analytics