java 圖片切割,縮放,轉換類型

          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) {
          ??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 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();
          ??}
          ?}

          ?/**
          ? * @param args
          ? */
          ?public static void main(String[] args) {
          ? ?? cut("D:/logo.gif", "D:/", 20, 15);
          ?????convert("D:/logo.gif", "D:/temp.png");
          ?}
          }

          posted on 2009-12-07 15:03 飛熊 閱讀(315) 評論(0)  編輯  收藏 所屬分類: java

          <2009年12月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          導航

          統計

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          收藏夾

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 仁寿县| 高台县| 驻马店市| 邢台市| 建水县| 大悟县| 广汉市| 柳林县| 宁陵县| 平陆县| 禹城市| 涪陵区| 盐源县| 开远市| 张北县| 中西区| 班玛县| 延长县| 申扎县| 枣阳市| 上蔡县| 龙江县| 北川| 壤塘县| 浙江省| 仪陇县| SHOW| 锦屏县| 长乐市| 拉萨市| 宜昌市| 行唐县| 文成县| 沙坪坝区| 文化| 兴化市| 阿拉善右旗| 宁陕县| 教育| 吐鲁番市| 蒙山县|