JAVA图片处理--缩放,切割,类型转换
生活随笔
收集整理的這篇文章主要介紹了
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 ChangeImageSize {/** *//*** 縮放圖像* @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){scale("D:\100CASIO\CIMG0001.JPG","C:\Documents and Settings\ibm\桌面\image.jpg",10,false);}}
?文章轉自:http://www.cnblogs.com/chinaqiao/archive/2009/06/04/1496170.html
轉載于:https://www.cnblogs.com/dreammyle/p/3992983.html
總結
以上是生活随笔為你收集整理的JAVA图片处理--缩放,切割,类型转换的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 故乡老院是谁画的啊?
- 下一篇: 专治疗男性不孕不育