您好,登錄后才能下訂單哦!
本篇內容介紹了“Java怎么實現摳圖片文字或簽名”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
第一步 遍歷像素點
BufferedImage image = ImageIO.read(new File(input)); // 圖片透明度 int alpha = 0; // 最小 int maxX = 0, maxY = 0; // 最大 int minX = image.getWidth(), minY = image.getHeight(); for (int y = image.getMinY(); y < image.getHeight(); y++) { // 內層遍歷是X軸的像素 for (int x = image.getMinX(); x < image.getWidth(); x++) { int rgb = image.getRGB(x, y); // 對當前顏色判斷是否在指定區間內 if (!colorInRange(rgb)) { minX = minX > x ? x : minX; minY = minY > y ? y : minY; maxX = maxX < x ? x : maxX; maxY = maxY < y ? y : maxY; } } }
第二步 判斷像素是否是黑色或者指定顏色
// 判斷是背景還是內容 public static boolean colorInRange(int color) { // 獲取color(RGB)中R位 int red = (color & 0xff0000) >> 16; // 獲取color(RGB)中G位 int green = (color & 0x00ff00) >> 8; // 獲取color(RGB)中B位 int blue = (color & 0x0000ff); // 通過RGB三分量來判斷當前顏色是否在指定的顏色區間內 if (red >= color_range && green >= color_range && blue >= color_range) { return true; } return false; }
第三步 統計 選取圖像的像素點最小坐標或最大坐標
minX = minX > x ? x : minX; minY = minY > y ? y : minY; maxX = maxX < x ? x : maxX; maxY = maxY < y ? y : maxY;
第四步 新建畫布(長度和高度=最大像素點-最小像素點)
BufferedImage bufferedImage = new BufferedImage(maxX - minX, maxY - minY, BufferedImage.TYPE_4BYTE_ABGR);
第五步 畫圖
for (int x = bufferedImage.getMinX(); x < bufferedImage.getWidth(); x++) { // 內層遍歷是X軸的像素 for (int y = bufferedImage.getMinX(); y < bufferedImage.getHeight(); y++) { int rgb = image.getRGB(x + minX, y + minY); if (!colorInRange(rgb)) { // 設置為不透明 alpha = 255; // #AARRGGBB 最前兩位為透明度 rgb = (alpha << 24) | (0x000000);//黑色構圖 bufferedImage.setRGB(x, y, rgb); } } } // 生成圖片為PNG ImageIO.write(bufferedImage, "png", new File(output)); // 輸出圖片坐標 System.out.println(minX + " " + minY + " " + maxX + " " + maxY);
import javax.imageio.ImageIO; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; public class Main { //識別顏色度數 public static int color_range = 100; public static void recognize(String input, String output) throws IOException { BufferedImage image = ImageIO.read(new File(input)); // 圖片透明度 int alpha = 0; // 最小 int maxX = 0, maxY = 0; // 最大 int minX = image.getWidth(), minY = image.getHeight(); for (int y = image.getMinY(); y < image.getHeight(); y++) { // 內層遍歷是X軸的像素 for (int x = image.getMinX(); x < image.getWidth(); x++) { int rgb = image.getRGB(x, y); // 對當前顏色判斷是否在指定區間內 if (!colorInRange(rgb)) { minX = minX > x ? x : minX; minY = minY > y ? y : minY; maxX = maxX < x ? x : maxX; maxY = maxY < y ? y : maxY; } } } BufferedImage bufferedImage = new BufferedImage(maxX - minX, maxY - minY, BufferedImage.TYPE_4BYTE_ABGR); for (int x = bufferedImage.getMinX(); x < bufferedImage.getWidth(); x++) { // 內層遍歷是X軸的像素 for (int y = bufferedImage.getMinX(); y < bufferedImage.getHeight(); y++) { int rgb = image.getRGB(x + minX, y + minY); if (!colorInRange(rgb)) { // 設置為不透明 alpha = 255; // #AARRGGBB 最前兩位為透明度 rgb = (alpha << 24) | (0x000000);//黑色構圖 bufferedImage.setRGB(x, y, rgb); } } } // 生成圖片為PNG ImageIO.write(bufferedImage, "png", new File(output)); // 輸出圖片坐標 System.out.println(minX + " " + minY + " " + maxX + " " + maxY); } // 判斷是背景還是內容 public static boolean colorInRange(int color) { // 獲取color(RGB)中R位 int red = (color & 0xff0000) >> 16; // 獲取color(RGB)中G位 int green = (color & 0x00ff00) >> 8; // 獲取color(RGB)中B位 int blue = (color & 0x0000ff); // 通過RGB三分量來判斷當前顏色是否在指定的顏色區間內 if (red >= color_range && green >= color_range && blue >= color_range) { return true; } return false; } public static void main(String[] args) throws IOException { recognize("E:/tmp/demo1.jpg","E:/tmp/demo1_1.jpg"); } }
“Java怎么實現摳圖片文字或簽名”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。