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)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          收藏夾

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 潮州市| 永丰县| 龙口市| 武胜县| 天全县| 清苑县| 汨罗市| 广汉市| 牙克石市| 孝感市| 大新县| 英吉沙县| 县级市| 亚东县| 武隆县| 泸定县| 京山县| 金湖县| 阳泉市| 新郑市| 桦川县| 白沙| 白朗县| 凤山县| 黑河市| 河北省| 丰都县| 常熟市| 江孜县| 青田县| 马尔康县| 奈曼旗| 恩平市| 开鲁县| 沂水县| 凤翔县| 青铜峡市| 望江县| 射阳县| 寿光市| 建宁县|