中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java怎么實現摳圖片文字或簽名

發布時間:2022-06-23 13:49:51 來源:億速云 閱讀:207 作者:iii 欄目:開發技術

本篇內容介紹了“Java怎么實現摳圖片文字或簽名”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

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怎么實現摳圖片文字或簽名”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

崇阳县| 兴仁县| 安吉县| 穆棱市| 阿尔山市| 昔阳县| 安平县| 固阳县| 冀州市| 甘泉县| 仪征市| 台安县| 洛隆县| 舒城县| 正定县| 炎陵县| 麦盖提县| 邓州市| 扶风县| 阜宁县| 柳江县| 静宁县| 和林格尔县| 甘肃省| 长春市| 平定县| 安泽县| 英超| 西盟| 阳东县| 隆昌县| 澄迈县| 榆林市| 信丰县| 探索| 赤水市| 莱州市| 宁武县| 伊宁市| 肇庆市| 任丘市|