亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

Java實現的微信圖片處理工具類【裁剪,合并,等比例縮放等】

2024-07-13 10:13:35
字體:
來源:轉載
供稿:網友

本文實例講述了Java實現的微信圖片處理工具類。分享給大家供大家參考,具體如下:

現在 外面核心,圖片文章比較少,看了拷貝代碼,而用不了,用相應jar包處理,很多等比例縮放,達不到 想要的給予的期望:本工具類,是之前做微信打印機寫的 基于java自帶的類,基于rgb。

package com.zjpz.util;import java.awt.Color;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.RenderingHints;import java.awt.geom.AffineTransform;import java.awt.image.BufferedImage;import java.awt.image.ColorModel;import java.awt.image.WritableRaster;import java.io.File;import java.io.IOException;import javax.imageio.ImageIO;import org.slf4j.Logger;import org.slf4j.LoggerFactory;/** * 微信圖片處理工具 *  * @author zhuang.y *  */public class PictureTool {  protected static Logger logger = LoggerFactory.getLogger(PictureTool.class);  public static void main(String[] args) throws IOException {   File fileOne = new File("c://1.jpg");   BufferedImage imageFirst = ImageIO.read(fileOne);   int border = 0;   imageFirst =crop(imageFirst,0,10,297,300);   File outFile = new File("d://2.jpg");   ImageIO.write(imageFirst, "jpg", outFile);// 寫圖片  }  /**  * 縱向合圖的x坐標像素  */  private final static int y_width = 645;  /**  * 標準圖片的y坐標像素,920,是一般照片,1099是郵票照片  */  private final static int y_height = 920;  /**  * 裁剪x坐標縮進像素  */  private final static int x_retract = 50;  /**  * 裁剪y坐標縮進像素  */  private final static int y_retract = 50;  /**  * 系統默認圖片邊框為20  */  public final static int BORDER = 20;  /**  * 橫向合成圖片  */  public static void xPic(String first, String second, String out) {   try {     /* 1 讀取第一張圖片 */     File fileOne = new File(first);     BufferedImage imageFirst = ImageIO.read(fileOne);     int width = imageFirst.getWidth();// 圖片寬度     int height = imageFirst.getHeight();// 圖片高度     int[] imageArrayFirst = new int[width * height];// 從圖片中讀取RGB     imageArrayFirst = imageFirst.getRGB(0, 0, width, height, imageArrayFirst, 0, width);     /* 1 對第二張圖片做相同的處理 */     File fileTwo = new File(second);     BufferedImage imageSecond = ImageIO.read(fileTwo);     int widthTwo = imageSecond.getWidth();// 圖片寬度     int heightTwo = imageSecond.getHeight();// 圖片高度     int[] imageArraySecond = new int[widthTwo * heightTwo];     imageArraySecond = imageSecond.getRGB(0, 0, widthTwo, heightTwo, imageArraySecond, 0, widthTwo);     int h = height;     if (height < heightTwo) {      h = heightTwo;     }     // 生成新圖片     BufferedImage imageResult = new BufferedImage(width + widthTwo, h, BufferedImage.TYPE_INT_RGB);     imageResult.setRGB(0, 0, width, height, imageArrayFirst, 0, width);// 設置左半部分的RGB     imageResult.setRGB(width, 0, widthTwo, heightTwo, imageArraySecond, 0, widthTwo);// 設置右半部分的RGB     File outFile = new File(out);     ImageIO.write(imageResult, "jpg", outFile);// 寫圖片   } catch (Exception e) {     logger.error("橫向合成圖片出錯....", e);   }  }  /**  * 縱向合成圖片  *   * @param first  *      放上面的圖片路徑  * @param second  *      放下面的圖片路徑  * @param out  *      文件輸出目錄  * @param border  *      圖片預留邊框  */  public static boolean yPic(String first, String second, String out, int border) {   boolean isOk = true;   try {     /* 1 讀取第一張圖片 */     File fileOne = new File(first);     BufferedImage imageFirst = ImageIO.read(fileOne);     int width = imageFirst.getWidth();// 圖片寬度     int height = imageFirst.getHeight();// 圖片高度     /* 2對第二張圖片做相同的處理 */     File fileTwo = new File(second);     BufferedImage imageSecond = ImageIO.read(fileTwo);     int widthTwo = imageSecond.getWidth();// 圖片寬度     int heightTwo = imageSecond.getHeight();// 圖片高度     /* 1 讀取第一張圖片begin */     int t_height = y_height - heightTwo;     // 圖片是橫圖,逆時針旋轉90度再等比縮放     if (width > height) {      imageFirst = rotateImageLeft90(imageFirst);     }     // 等比縮放     imageFirst = resize(imageFirst, y_width, t_height);     // 縮放后圖片的大小     width = imageFirst.getWidth();// 圖片寬度     height = imageFirst.getHeight();// 圖片高度     // 等比縮放后,圖片還是太大,裁剪圖片     boolean a_w, a_h = false;     if ((a_w = (width > y_width)) || (a_h = (height > t_height))) {      // 起始位置x,y坐標      int s_w = 0, s_h = 0;      // 裁剪x坐標時,縮進屬性x_retract      if (a_w) {        int temp = width - y_width;        if (temp > x_retract) {         temp = x_retract;        } else {         temp = 0;        }        s_w = s_w + temp;      }      // 裁剪y坐標時,縮進屬性y_retract      if (a_h) {        int temp = height - t_height;        if (temp > y_retract) {         temp = y_retract;        } else {         temp = 0;        }        s_h = s_h + temp;      }      imageFirst = crop(imageFirst, s_w, s_h, y_width, t_height);      width = imageFirst.getWidth();      height = imageFirst.getHeight();     }     int[] imageArrayFirst = new int[(width - border) * height];// 從圖片中讀取RGB     imageArrayFirst = imageFirst.getRGB(border, 0, (width - border), height, imageArrayFirst, 0,        (width - border));     /* 2對第二張圖片做相同的處理begin */     int[] imageArraySecond = new int[widthTwo * heightTwo];     imageArraySecond = imageSecond.getRGB(0, 0, widthTwo, heightTwo, imageArraySecond, 0, widthTwo);     int w = width;     if (width < widthTwo) {      w = widthTwo;     }     // 圖片高度     int h = height + heightTwo;     // 生成新圖片     BufferedImage imageResult = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);     // 解決黑色背景,默認的TYPE_INT_RGB都是0,都是黑色的     Graphics2D g = (Graphics2D) imageResult.createGraphics();     g.setColor(Color.WHITE);     g.fillRect(0, 0, w, h);// 填充整個屏幕     g.dispose();     // 留邊框     imageResult.setRGB(border, 0, (width - border * 2), height, imageArrayFirst, 0, (width - border));// 設置左半部分的RGB     imageResult.setRGB(0, height, widthTwo, heightTwo, imageArraySecond, 0, widthTwo);// 設置右半部分的RGB     File outFile = new File(out);     ImageIO.write(imageResult, "jpg", outFile);// 寫圖片   } catch (Exception e) {     logger.error("縱向合成圖片失敗....", e);     isOk = false;   }   return isOk;  }  /**  * 全圖打印,圖片縮放、旋轉處理  *   * @param source  *      待處理的圖片  * @param out  *      處理后文件輸出目錄  * @param border  *      圖片預留邊框  */  public static boolean maigaoPic(String source, String out, int border) {   boolean isOk = true;   try {     /* 1 讀取第一張圖片 */     File fileOne = new File(source);     BufferedImage imageFirst = ImageIO.read(fileOne);     int width = imageFirst.getWidth();// 圖片寬度     int height = imageFirst.getHeight();// 圖片高度     // 圖片是橫圖,逆時針旋轉90度再等比縮放     if (width > height) {      imageFirst = rotateImageLeft90(imageFirst);     }     // 等比縮放     imageFirst = resize(imageFirst, y_width, y_height);     // 縮放后圖片的大小     width = imageFirst.getWidth();// 圖片寬度     height = imageFirst.getHeight();// 圖片高度     // 等比縮放后,圖片還是太大,裁剪圖片     boolean a_w, a_h = false;     if ((a_w = (width > y_width)) || (a_h = (height > y_height))) {      // 起始位置x,y坐標      int s_w = 0, s_h = 0;      // 裁剪x坐標時,縮進屬性x_retract      if (a_w) {        int temp = width - y_width;        if (temp > x_retract) {         temp = x_retract;        } else {         temp = 0;        }        s_w = s_w + temp;      }      // 裁剪y坐標時,縮進屬性y_retract      if (a_h) {        int temp = height - y_height;        if (temp > y_retract) {         temp = y_retract;        } else {         temp = 0;        }        s_h = s_h + temp;      }      imageFirst = crop(imageFirst, s_w, s_h, y_width, y_height);      width = imageFirst.getWidth();      height = imageFirst.getHeight();     }     int[] imageArrayFirst = new int[(width - border) * height];// 從圖片中讀取RGB     imageArrayFirst = imageFirst.getRGB(border, 0, (width - border), height, imageArrayFirst, 0,        (width - border));     // 生成新圖片     BufferedImage imageResult = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);     // 解決黑色背景,默認的TYPE_INT_RGB都是0,都是黑色的     Graphics2D g = (Graphics2D) imageResult.createGraphics();     g.setColor(Color.WHITE);     g.fillRect(0, 0, width, height);// 填充整個屏幕     g.dispose();     // 留邊框     imageResult.setRGB(border, 0, (width - border * 2), height, imageArrayFirst, 0, (width - border));// 設置左半部分的RGB     File outFile = new File(out);     ImageIO.write(imageResult, "jpg", outFile);// 寫圖片   } catch (IOException e) {     logger.error("全圖打印,圖片縮放、旋轉處理失敗....", e);     isOk = false;   }   return isOk;  }  /**  * 實現圖像的等比縮放  *   * @param source  *      待處理的圖片流  * @param targetW  *      寬度  * @param targetH  *      高度  * @return  */  public static BufferedImage resize(BufferedImage source, int targetW, int targetH) {   int width = source.getWidth();// 圖片寬度   int height = source.getHeight();// 圖片高度   return zoomInImage(source, targetW, targetH);   // 圖片寬高都太小時,強制放大圖片   /*   if (width < targetW && height < targetH) {     return zoomInImage(source, targetW, targetH);   } else if ((width < targetW && width == height) || (height < targetH && width == height)) {     return zoomInImage(source, targetW, targetH);   }   return null;   */  }  /**  * 按比例裁剪圖片  *   * @param source  *      待處理的圖片流  * @param startX  *      開始x坐標  * @param startY  *      開始y坐標  * @param endX  *      結束x坐標  * @param endY  *      結束y坐標  * @return  */  public static BufferedImage crop(BufferedImage source, int startX, int startY, int endX, int endY) {   int width = source.getWidth();   int height = source.getHeight();   if (startX <= -1) {     startX = 0;   }   if (startY <= -1) {     startY = 0;   }   if (endX <= -1) {     endX = width - 1;   }   if (endY <= -1) {     endY = height - 1;   }   BufferedImage result = new BufferedImage(endX, endY , source.getType());   for (int y = startY; y < endY+startY; y++) {     for (int x = startX; x < endX+startX; x++) {      int rgb = source.getRGB(x, y);      result.setRGB(x - startX, y - startY, rgb);     }   }   return result;  }  /**  * 旋轉圖片為指定角度  *   * @param bufferedimage  *      目標圖像  * @param degree  *      旋轉角度  * @return  */  public static BufferedImage rotateImage(final BufferedImage bufferedimage, final int degree) {   int w = bufferedimage.getWidth();   int h = bufferedimage.getHeight();   int type = bufferedimage.getColorModel().getTransparency();   BufferedImage img;   Graphics2D graphics2d;   (graphics2d = (img = new BufferedImage(h, w, type)).createGraphics()).setRenderingHint(      RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);   graphics2d.rotate(Math.toRadians(degree), w / 2, h / 2 + (w > h ? (w - h) / 2 : (h - w) / 2));   graphics2d.drawImage(bufferedimage, 0, 0, null);   graphics2d.dispose();   return img;  }  /**  * 圖片左轉90度  *   * @param bufferedimage  * @return  */  public static BufferedImage rotateImageLeft90(BufferedImage bufferedimage) {   int w = bufferedimage.getWidth();   int h = bufferedimage.getHeight();   int type = bufferedimage.getColorModel().getTransparency();   BufferedImage img;   Graphics2D graphics2d;   (graphics2d = (img = new BufferedImage(h, w, type)).createGraphics()).setRenderingHint(      RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);   graphics2d.rotate(Math.toRadians(270), w / 2, h / 2 + (w - h) / 2);   graphics2d.drawImage(bufferedimage, 0, 0, null);   graphics2d.dispose();   return img;  }  /**  * 圖片右轉90度  *   * @param bufferedimage  * @return  */  public static BufferedImage rotateImageRight90(BufferedImage bufferedimage) {   int w = bufferedimage.getWidth();   int h = bufferedimage.getHeight();   int type = bufferedimage.getColorModel().getTransparency();   BufferedImage img;   Graphics2D graphics2d;   (graphics2d = (img = new BufferedImage(h, w, type)).createGraphics()).setRenderingHint(      RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);   graphics2d.rotate(Math.toRadians(90), w / 2 - (w - h) / 2, h / 2);   graphics2d.drawImage(bufferedimage, 0, 0, null);   graphics2d.dispose();   return img;  }  // 對轉  public File rotateImageOppo(File file) throws Exception {   BufferedImage bufferedimage = ImageIO.read(file);   int w = bufferedimage.getWidth();   int h = bufferedimage.getHeight();   int type = bufferedimage.getColorModel().getTransparency();   BufferedImage img;   Graphics2D graphics2d;   (graphics2d = (img = new BufferedImage(w, h, type)).createGraphics()).setRenderingHint(      RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);   graphics2d.rotate(Math.toRadians(180), w / 2, h / 2);   graphics2d.drawImage(bufferedimage, 0, 0, null);   graphics2d.dispose();   ImageIO.write(img, "jpg", file);   return file;  }  /***  * 圖片鏡像處理  *   * @param file  * @param FX  *      0 為上下反轉 1 為左右反轉  * @return  */  public void imageMisro(File file, int FX) {   try {     BufferedImage bufferedimage = ImageIO.read(file);     int w = bufferedimage.getWidth();     int h = bufferedimage.getHeight();     int[][] datas = new int[w][h];     for (int i = 0; i < h; i++) {      for (int j = 0; j < w; j++) {        datas[j][i] = bufferedimage.getRGB(j, i);      }     }     int[][] tmps = new int[w][h];     if (FX == 0) {      for (int i = 0, a = h - 1; i < h; i++, a--) {        for (int j = 0; j < w; j++) {         tmps[j][a] = datas[j][i];        }      }     } else if (FX == 1) {      for (int i = 0; i < h; i++) {        for (int j = 0, b = w - 1; j < w; j++, b--) {         tmps[b][i] = datas[j][i];        }      }     }     for (int i = 0; i < h; i++) {      for (int j = 0; j < w; j++) {        bufferedimage.setRGB(j, i, tmps[j][i]);      }     }     ImageIO.write(bufferedimage, "jpg", file);   } catch (Exception e) {     e.printStackTrace();   }  }  /**  * 對圖片進行強制放大或縮小  *   * @param originalImage  *      原始圖片  * @return  */  public static BufferedImage zoomInImage(BufferedImage originalImage, int width, int height) {   BufferedImage newImage = new BufferedImage(width, height, originalImage.getType());   Graphics g = newImage.getGraphics();   g.drawImage(originalImage, 0, 0, width, height, null);   g.dispose();   return newImage;  }  /**  * 簡易圖片識別原理  *   * @param img  *      圖片路徑  */  public static void discernImg(String img) {   try {     File fileOne = new File(img);     BufferedImage bi = ImageIO.read(fileOne);     // 獲取圖像的寬度和高度     int width = bi.getWidth();     int height = bi.getHeight();     // 掃描圖片     for (int i = 0; i < height; i++) {      for (int j = 0; j < width; j++) {// 行掃描        int dip = bi.getRGB(j, i);        if (dip == -1)         System.out.print(" ");        else         System.out.print("♦");      }      System.out.println();// 換行     }   } catch (Exception e) {     logger.error("圖片識別出錯", e);   }  }}

希望本文所述對大家java程序設計有所幫助。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
中文字幕在线视频日韩| 中文字幕日韩有码| 在线成人中文字幕| 国产精品一区二区在线| 久久精品国产亚洲7777| 国产欧美精品在线| 国产婷婷成人久久av免费高清| 日本精品va在线观看| 国产精品国产三级国产aⅴ浪潮| 国产精品福利观看| 亚洲最大成人网色| 精品在线小视频| 国产精品第1页| 亚洲国产高清福利视频| 91sao在线观看国产| 一区二区亚洲欧洲国产日韩| 日本最新高清不卡中文字幕| 亚洲一区二区国产| 综合激情国产一区| 久久精品国产亚洲精品| 日韩av免费看| 538国产精品一区二区在线| 亚洲乱码av中文一区二区| 97精品伊人久久久大香线蕉| 俺也去精品视频在线观看| 亚洲欧美激情一区| 久久精品国产成人| 国产成人精品国内自产拍免费看| 影音先锋欧美在线资源| 日本一区二区三区四区视频| 中文字幕日韩在线观看| 91香蕉嫩草影院入口| 久久精品国产69国产精品亚洲| 亚洲人高潮女人毛茸茸| 成人精品久久av网站| 国外成人在线直播| 久久影视电视剧免费网站| 视频在线一区二区| 久久九九国产精品怡红院| 久久精品久久久久久| 国产成人综合av| 色av中文字幕一区| 超碰日本道色综合久久综合| 一区二区欧美在线| 国外成人在线直播| 国产精品欧美一区二区| 91免费人成网站在线观看18| 欧美电影在线观看高清| 欧美床上激情在线观看| 国产日韩精品入口| 国产精品久久久久久av福利软件| 亚洲图片在线综合| 国产精品久久久久久久久久小说| 久热99视频在线观看| 国产精品视频最多的网站| 中文字幕精品视频| 欧洲成人午夜免费大片| 欧洲亚洲免费视频| 亚洲摸下面视频| 日韩精品在线免费| 亚洲欧美日韩天堂一区二区| 亚洲午夜久久久久久久| 日日摸夜夜添一区| 中文字幕久久久av一区| 亚洲国产精品国自产拍av秋霞| 国产美女久久精品| 成人午夜黄色影院| 尤物yw午夜国产精品视频| 在线丨暗呦小u女国产精品| 亚洲qvod图片区电影| 精品少妇一区二区30p| 热re99久久精品国产66热| 日韩精品极品在线观看播放免费视频| 亚洲国产99精品国自产| 亚洲小视频在线观看| 欧美午夜激情在线| 色综合伊人色综合网| 91热精品视频| 欧美激情视频在线免费观看 欧美视频免费一| 亚洲国产三级网| 精品国产鲁一鲁一区二区张丽| 国产精品狠色婷| 日本精品性网站在线观看| 欧美成人免费全部| 国产精品国产三级国产aⅴ浪潮| 欧美一级大片在线免费观看| 8x海外华人永久免费日韩内陆视频| 欧美黑人性视频| 国产不卡av在线| 91亚洲人电影| 亚洲欧美国产一区二区三区| 懂色aⅴ精品一区二区三区蜜月| 国产日韩欧美影视| 中文字幕日韩精品有码视频| 久久影视电视剧免费网站清宫辞电视| 亚洲qvod图片区电影| 亚洲精品免费在线视频| 午夜免费在线观看精品视频| 欧美午夜激情在线| 日韩精品免费一线在线观看| 亚洲欧美在线一区二区| 91po在线观看91精品国产性色| 精品视频一区在线视频| 8x拔播拔播x8国产精品| 国产亚洲欧美日韩美女| 日本国产精品视频| 成人精品网站在线观看| 国产一区在线播放| 92国产精品久久久久首页| 欧美激情中文网| 日韩成人av在线播放| 欧美视频在线看| 日韩免费不卡av| 亚洲美女免费精品视频在线观看| 成人天堂噜噜噜| 欧美亚洲国产日本| 亚洲加勒比久久88色综合| 亚洲欧美在线x视频| 亚洲第一色中文字幕| 久久影视电视剧免费网站| 国产一区深夜福利| 国模精品视频一区二区| 国产69久久精品成人| 色偷偷av一区二区三区乱| 国内伊人久久久久久网站视频| 日韩最新中文字幕电影免费看| 国外成人免费在线播放| 久久久久久尹人网香蕉| 国产精品一区二区久久久| 亚洲国产精品久久精品怡红院| 亚洲jizzjizz日本少妇| 91成人国产在线观看| 亚洲自拍另类欧美丝袜| 91po在线观看91精品国产性色| 97视频免费在线观看| 亚洲精品久久久久久久久久久| 亚洲一区二区三区sesese| 欧美黑人国产人伦爽爽爽| 国产99久久精品一区二区永久免费| 欧美精品久久久久久久久| 欧美午夜精品久久久久久人妖| 久久久久久国产精品三级玉女聊斋| 亚洲免费中文字幕| 亚洲第一区中文99精品| 亚洲第一视频网| 亚洲free嫩bbb| 日韩精品黄色网| 亚洲最大福利视频网| 国产成人在线播放| 欧美电影免费观看高清完整| 欧美多人爱爱视频网站| 国产成人精品一区二区三区| 欧美性精品220| 91干在线观看| 欧美在线视频播放| 国产精品久久久久久av福利软件| 亚洲欧洲第一视频| 欧美孕妇孕交黑巨大网站| 亚洲区在线播放| 欧美国产日韩中文字幕在线| 亚洲第五色综合网| 亚洲色在线视频| 成人久久久久久久| 啪一啪鲁一鲁2019在线视频|