Java图片处理类

jopen 10年前

package com.util;        import java.io.*;      import java.net.URL;    import java.awt.*;      import java.awt.image.*;      import java.awt.Graphics;      import java.awt.color.ColorSpace;      import javax.imageio.ImageIO;          import com.config.Config;        public class ImgUtil {            /**        * 生成图片函数        * @param imgUrl 网站地址        * @param fileURL 保存到地址        * @param fileName 文件名        */        public static String makeImg(String imgUrl, String fileURL,String fileName) {            try {                // 创建流                BufferedInputStream in = new BufferedInputStream(new URL(imgUrl).openStream());                                // 存放地址                String filePath=fileURL + "//"+fileName;                                File img = new File(filePath);                // 生成图片                BufferedOutputStream out = new BufferedOutputStream(                        new FileOutputStream(img));                byte[] buf = new byte[2048];                int length = in.read(buf);                while (length != -1) {                    out.write(buf, 0, length);                    length = in.read(buf);                }                in.close();                out.close();                return filePath;            } catch (Exception e) {                e.printStackTrace();            }            return "";        }                 /** *//**         * 缩放图像         * @param srcImageFile 源图像文件地址         * @param result       缩放后的图像地址         * @param scale        缩放比例         * @param flag         缩放选择:true 放大; false 缩小;         */          public static String scale(String srcImageFile, String result, int scale, boolean flag)          {              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();              }              return srcImageFile;        }          /** *//**         * 图像切割         * @param srcImageFile 源图像地址         * @param descDir      切片目标文件夹         * @param destWidth    目标切片宽度         * @param destHeight   目标切片高度         */          public static void cut(String srcImageFile, String descDir, int destWidth, int destHeight)          {              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();              }          }              public static void main(String[] args)        {            ImgUtil.makeImg("http://t3.qlogo.cn/mbloghead/79c1deae900c9607ceec/180", Config.SOCAIL_IMG_PATH,"3.jpg");            ImgUtil.scale("E://myeclipse//SSHWeb//WebContent//index//image//social//3.jpg","E://myeclipse//SSHWeb//WebContent//index//image//social//3.jpg",5,false);        }    }