在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/人工智能  Java  網(wǎng)絡(luò)安全/ 什么樣的手段處理圖片后會(huì)使得用java取得該圖片的RGB值與實(shí)際值不同?

什么樣的手段處理圖片后會(huì)使得用java取得該圖片的RGB值與實(shí)際值不同?

1.在做圖像處理的時(shí)候遇到了一個(gè)非常非常詭異的問題:這是那張困擾我好久的圖片:
圖片描述

這是天貓營(yíng)業(yè)執(zhí)照的標(biāo)準(zhǔn)格式,我上傳的圖片和原圖片的背景有些區(qū)別。如果哪個(gè)大神有興趣深究的話隨便打開某個(gè)天貓店鋪在最上面就能打開他的營(yíng)業(yè)執(zhí)照信息,就能查看圖片。
這張圖片的詭異之處在于,我在提取他的RGB值的時(shí)候發(fā)現(xiàn)用java的方法取得的RGB值和第一和我用ps取得的RGB值不同,第二和我肉眼看到的也不同,比如我用java取左上角x從0到10,y從0到10一百個(gè)像素點(diǎn)的RGB值,

clipboard.png
(0,0,0)不應(yīng)該是黑色嗎!我不管用肉眼看還是ps打開都不應(yīng)該是黑色?。?!這是怎么回事??!
以下附我java的代碼:`
package lee;

import java.awt.AWTException;
import java.awt.Dimension;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.io.File;

import javax.imageio.ImageIO;

public class getrgb {

/** 
 * 讀取一張圖片的RGB值 
 *  
 * @throws Exception 
 */  
public void getImagePixel(String image) throws Exception {  
    int[] rgb = new int[3];  
    File file = new File(image);  
    BufferedImage bi = null;  
    try {  
        bi = ImageIO.read(file);  
    } catch (Exception e) {  
        e.printStackTrace();  
    }  
    int width = bi.getWidth();  
    int height = bi.getHeight();  
    int minx = bi.getMinX();  
    int miny = bi.getMinY();  
    System.out.println("width=" + width + ",height=" + height + ".");  
    System.out.println("minx=" + minx + ",miniy=" + miny + ".");  
    for (int i = 0; i < 10; i++) {  
        for (int j =0; j < 10; j++) {  
            int pixel = bi.getRGB(i, j); // 下面三行代碼將一個(gè)數(shù)字轉(zhuǎn)換為RGB數(shù)字  
            rgb[0] = (pixel & 0xff0000) >> 16;  
            rgb[1] = (pixel & 0xff00) >> 8;  
            rgb[2] = (pixel & 0xff);  
            System.out.println("i=" + i + ",j=" + j + ":(" + rgb[0] + ","  
                    + rgb[1] + "," + rgb[2] + ")");  
        }  
    }  
}  

/** 
 * 返回屏幕色彩值 
 *  
 * @param x 
 * @param y 
 * @return 
 * @throws AWTException 
 */  
public int getScreenPixel(int x, int y) throws AWTException { // 函數(shù)返回值為顏色的RGB值。  
    Robot rb = null; // java.awt.image包中的類,可以用來抓取屏幕,即截屏。  
    rb = new Robot();  
    Toolkit tk = Toolkit.getDefaultToolkit(); // 獲取缺省工具包  
    Dimension di = tk.getScreenSize(); // 屏幕尺寸規(guī)格  
    System.out.println(di.width);  
    System.out.println(di.height);  
    Rectangle rec = new Rectangle(0, 0, di.width, di.height);  
    BufferedImage bi = rb.createScreenCapture(rec);  
    int pixelColor = bi.getRGB(x, y);  

    return 16777216 + pixelColor; // pixelColor的值為負(fù),經(jīng)過實(shí)踐得出:加上顏色最大值就是實(shí)際顏色值。  
}  

/** 
 * @param args 
 */  
public static void main(String[] args) throws Exception {  
    int x = 0;  
    getrgb rc = new getrgb();  
    x = rc.getScreenPixel(100, 345);  
    System.out.println(x + " - ");  
    rc.getImagePixel("C:\\Users\\Administrator\\pythonprogram\\picture\\1.png");  
}  

}
`ps:這張圖片還有一個(gè)很詭異的問題,如果把圖片下載到手機(jī)上打開,整張圖片會(huì)變成全黑的,然后只有天貓營(yíng)業(yè)執(zhí)照專屬什么的幾個(gè)字。。。我懷疑是天貓為了防止人機(jī)器識(shí)別對(duì)圖片做了什么處理。。。

回答
編輯回答
悶騷型

那應(yīng)該不是黑色,可能是透明,你可以通過

int alpha = (pixel & 0xFF000000) >>> 24;

把透明度也提取出來看看。

2018年1月30日 22:32