【问题标题】:Get local image's height, width and all pixels's rgb获取本地图像高度、宽度和所有像素 rgb
【发布时间】:2016-06-13 09:15:52
【问题描述】:

我发现下面的代码可以让用户从他的电脑上加载一张图片。
https://jsfiddle.net/8Lw42kcv/

<input id="files" type="file">
<output id="list"></output>

function handleFileSelect(evt){
var files=evt.target.files
for(var i=0,f;f=files[i];i++){
var reader=new FileReader()
reader.onload=(function(theFile){
return function(e){
var span=document.createElement('span')
span.innerHTML=['<img class="thumb"src="',e.target.result,
'"title="',escape(theFile.name),'"/>'].join('')
document.getElementById('list').insertBefore(span,null)
}
})(f)
reader.readAsDataURL(f)
}
}
document.getElementById('files').addEventListener('change',handleFileSelect,false)

现在,我真正想要的不是显示图像,而是读取它的大小(高度和宽度)以及每个像素的 rgb(红、绿、蓝)值。

e.target.result = 转换为 base 64 的图片链接。

alert()我怎么知道所选图像的高度、宽度和像素 1,1 的红绿蓝?

【问题讨论】:

    标签: javascript html


    【解决方案1】:

    我希望这对你有用。

    function handleFileSelect(evt) {
    	var files = evt.target.files
    	for (var i = 0, f; f = files[i]; i++) {
    		var reader = new FileReader()
    		reader.onload = (function(theFile) {
    			return function(e) {
    			// var span = document.createElement('span')
    			// span.innerHTML = ['<img class="thumb"src="', e.target.result,
    			// 	'"title="', escape(theFile.name), '"/>'
    			// ].join('')
    			// document.getElementById('list').insertBefore(span, null)
    			getInfo(e.target.result)
    					}
    		})(f)
    		reader.readAsDataURL(f)
    	}
    }
    document.getElementById('files').addEventListener('change', handleFileSelect, false)
    
    function getInfo(pic) {
    	var ctxt = canvas.getContext('2d');
    	var img = new Image;
    	img.src = pic;
    	img.onload = function() {
    		ctxt.drawImage(img, 0, 0);
    		var data = ctxt.getImageData(0, 0, img.width, img.height).data;
    		var red = data[0],
    		   green = data[1],
    		   blue = data[2];
    		alert("hight is " + img.height + "px,width is " + img.width + "px,pix(1,1)'s r:"+red + ',g:' + green + ',b:' + blue);
    	}
    }
    <input id="files" type="file">
    <output id="list"></output>
    <canvas id="canvas"></canvas>

    【讨论】:

    • @Isv 完美!它按我的预期工作,我只需要更改var data = ctxt.getImageData(0, 0, img.width, img.height).data; 行中的零即可更改像素。我注意到 .jpg 类型图像的结果与我用油漆打开图像并检查像素的 rgb 时相比可能会有些不同,但后来我将图像保存为 .png 并且 rgb 得到了完全相同的结果。我也只需要.png,所以即使是一个也没问题。
    猜你喜欢
    • 2010-11-18
    • 1970-01-01
    • 2017-05-23
    • 2011-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-02
    • 2014-07-15
    相关资源
    最近更新 更多