2011-05-30 42 views
1

是否有可以逐像素提取圖像的所有十六進制顏色值的實用程序?或者這是用手工程序完成的嗎?我知道你可以使用GIMP或Inkscape和吸管工具,但我想知道如何用程序來做到這一點。 謝謝。提取圖像中每個像素的十六進制值

+0

你想用什麼語言來使用? – 2011-05-30 21:45:11

+0

Python或Common Lisp ... – 2011-05-30 22:06:22

回答

0

您可以使用舊的netpbm系列實用程序。 應該有一個程序可以從任何格式轉換爲ppm,然後從ppm使用。 ppmtoxpm會將ppm文件轉換爲xpm格式,該格式包含十六進制格式的顏色值。

+0

GIMP可以保存文件的許多不同的格式,也許它可以照顧... – 2011-05-30 22:07:28

+0

我用GIMP保存圖像作爲一個HTML表,這不是我正在尋找,但它確實沒問題。我只是使用Python讀取文件,然後纔可以使用re模塊將其修剪爲十六進制值。這不是很好,但總比沒有好。 – 2011-05-30 22:11:54

1

我不知道現成的程序會這樣做。你究竟想要做什麼?將其導出到文件?只是看看它?我懷疑在任何支持圖像快速轉換的編程語言中,這都會非常容易。例如,如果您想要在網站上顯示上傳圖像的像素顏色,則可以使用PHP的GD庫至fetch the image size並將圖像遍歷到get the colors of each pixel

如果你正在尋找的東西更多的客戶端,如將在Windows上運行的可執行文件,我建議抽絲的Visual C#速成的加載圖像拷貝到Bitmap對象,並使用Size財產GetPixel方法。

0

GIMP確實可以將圖像保存爲.xpm文件。我試了一下,效果很好。它非常精細,所以它非常適合查看,並且像HTML表格一樣,它僅適用於提取值。我沒有看到任何提取這些值的東西,但這並不重要,因爲提取它們非常簡單...對我來說已經足夠了。

5

您可以使用Canvas元素(buzzword:HTML5),然後使用JavaScript來獲取像素值。

編輯:

看看這個工作JSFiddle demo(使用RELOAD如果沒有在第一次工作)。只是爲了表現出一定的可能性...

var img = document.getElementsByTagName("img")[0]; 
var canvas = document.getElementsByTagName("canvas")[0]; 
var context = canvas.getContext("2d"); 

img.src = img_src; 
img.onload = function (event) { 
    canvas.width = img.width; 
    canvas.height = img.height; 
    context.drawImage(img, 0, 0, img.width, img.height); 
} 

canvas.onmousemove = function (event) { 
    document.getElementsByTagName("div")[0].innerHTML = event.clientX - canvas.clientX; 
    var x = event.clientX; 
    var y = event.clientY; 
    var imgDat = context.getImageData(x, y, 1, 1); 
    var color = "#" + dec2hex(imgDat.data[0]) + 
     dec2hex(imgDat.data[1]) + 
     dec2hex(imgDat.data[2]); 
    document.getElementsByTagName("div")[0].innerHTML = color; 
    document.body.style.background = color; 
}; 

var dec2hex = function(d) { 
    var s = "00" + Number(d).toString(16); 
    return s.substring(s.length - 2); 
} 
0
from PIL import Image 
rgb = Image.open('example.jpg').convert('RGB') 
width,height = rgb.size 
pixels = rgb.load() 
for y in range(height): 
    for x in range(width): 
     print '#%02x%02x%02x ' % pixels[x,y] 
相關問題