标签: getimagedata

在鼠标悬停时从画布获取像素颜色

是否可以在鼠标下方获取RGB值像素?有一个完整的例子吗?这是我到目前为止所拥有的:

<script>
function draw() {
  var ctx = document.getElementById('canvas').getContext('2d');
  var img = new Image();
  img.src = 'Your URL';

  img.onload = function(){
    ctx.drawImage(img,0,0);


  };

  canvas.onmousemove = function(e) {
        var mouseX, mouseY;

        if(e.offsetX) {
            mouseX = e.offsetX;
            mouseY = e.offsetY;
        }
        else if(e.layerX) {
            mouseX = e.layerX;
            mouseY = e.layerY;
        }
        var c = ctx.getImageData(mouseX, mouseY, 1, 1).data;

        $('#ttip').css({'left':mouseX+20, 'top':mouseY+20}).html(c[0]+'-'+c[1]+'-'+c[2]);
  };
}

</script>
Run Code Online (Sandbox Code Playgroud)

javascript html5 canvas getimagedata

71
推荐指数
5
解决办法
9万
查看次数

Android将图像从库中获取到ImageView中

我正在尝试将galery中的照片添加到a ImageView但是我收到此错误:

java.lang.RuntimeException:将结果ResultInfo {who = null,request = 1,result = -1,data = Intent {dat = content:// media/external/images/media/1}}传递给activity {hotMetter. pack/hotMetter.pack.GetPhoto}:java.lang.NullPointerException

这是我的代码:

      Intent intent = new Intent();
      intent.setType("image/*");
      intent.setAction(Intent.ACTION_GET_CONTENT);

      startActivityForResult(Intent.createChooser(intent,"Select Picture"), SELECT_PICTURE);
}
Bitmap bitmap=null;
public void onActivityResult(int requestCode, int resultCode, Intent data)
{

    if (resultCode == Activity.RESULT_OK)
    {
        if (requestCode == SELECT_PICTURE) 
        {
             Uri selectedImageUri = data.getData();           
             selectedImagePath = getPath(selectedImageUri);             
             tv.setText(selectedImagePath);
             img.setImageURI(selectedImageUri); 
         }
    }


 public String getPath(Uri uri) 
    {
        String[] projection = { MediaStore.Images.Media.DATA };
        Cursor cursor = managedQuery(uri, projection, null, …
Run Code Online (Sandbox Code Playgroud)

android gallery image-gallery getimagedata imageview

53
推荐指数
5
解决办法
15万
查看次数

如何在HTML画布中缩放imageData?

我的网页上有画布; 我在这个画布中创建了一个新的Image数据,然后我通过myImgData.data []数组修改了一些像素.现在我想缩放此图像并使其更大.我尝试通过缩放上下文但图像仍然很小.是否有可能做到这一点?谢谢

html canvas getimagedata

31
推荐指数
4
解决办法
3万
查看次数

如何独立创建一个新的ImageData对象?

我想在代码中创建一个新的ImageData对象.如果我Uint8ClampedArray想要制作一个图像对象,那么最好的方法是什么?

我想我可以创建一个新的canvas元素,提取它的ImageData并覆盖它的数据属性,但这似乎是一个错误的方法.

如果我可以直接使用ImageData构造函数会很好,但我无法弄清楚如何.

javascript canvas getimagedata html5-canvas

15
推荐指数
2
解决办法
2万
查看次数

有可能像使用getImageData/putImageData的canvas一样使用html图像吗?

我想知道是否有一种方法可以动态修改/访问html图像中包含的数据,就好像它们是html5 canvas元素一样.使用canvas,你可以在javascript中使用getImageData()和putImageData()访问原始像素数据,但到目前为止我还没有弄清楚如何用图像来做这件事.

html5 canvas image getimagedata

12
推荐指数
2
解决办法
2万
查看次数

使用pdf.js和ImageData将.pdf渲染为单个Canvas

我试图使用PDF.js读取整个.pdf文档,然后在单个画布上渲染所有页面.

我的想法:将每个页面渲染到画布上并获取ImageData(context.getImageData()),清除画布做下一页.我将所有ImageDatas存储在一个数组中,一旦所有页面都在那里,我想将数组中的所有ImageDatas放到一个画布上.

var pdf = null;
PDFJS.disableWorker = true;
var pages = new Array();
    //Prepare some things
    var canvas = document.getElementById('cv');
    var context = canvas.getContext('2d');
    var scale = 1.5;
    PDFJS.getDocument(url).then(function getPdfHelloWorld(_pdf) {
        pdf = _pdf;
        //Render all the pages on a single canvas
        for(var i = 1; i <= pdf.numPages; i ++){
            pdf.getPage(i).then(function getPage(page){
                var viewport = page.getViewport(scale);
                canvas.width = viewport.width;
                canvas.height = viewport.height;
                page.render({canvasContext: context, viewport: viewport});
                pages[i-1] = context.getImageData(0, 0, canvas.width, canvas.height);
                context.clearRect(0, 0, canvas.width, canvas.height);
                p.Out("pre-rendered page …
Run Code Online (Sandbox Code Playgroud)

javascript getimagedata html5-canvas putimagedata pdf.js

12
推荐指数
2
解决办法
3万
查看次数

SECURITY_ERR:关于在Chrome扩展程序中使用getImageData的DOM异常18

我正在写第一个Chrome扩展程序.我正在尝试使用jQuery和jQuery Image Desaturate插件http://www.flickr.com上对页面上的图像进行去饱和处理.

我在我的background.html中以编程方式加载我的脚本(以及jQuery和插件):

  // On browser action click, we load jQuery and the desaturate plugin, then 
  // call our own flickrnoir.js to desaturate the photo.
  chrome.browserAction.onClicked.addListener(function(tab) {
    chrome.tabs.executeScript(null, { file: "jquery.js" }, function() {
      chrome.tabs.executeScript(null, {file: "jQuery.desaturate.js" }, function() {
        chrome.tabs.executeScript(null, { file: "flickrnoir.js" });
      })
    });
  });
Run Code Online (Sandbox Code Playgroud)

我在我的Flickr页面中指定了权限manifest.json:

"permissions": [
  "tabs", "http://www.flickr.com/", "http://*.static.flickr.com/"
]
Run Code Online (Sandbox Code Playgroud)

这看起来工作得很好,例如,我可以将Flickr照片页面上所有div的背景添加为红色flickrnoir.js,然后打开Flickr页面并点击我的扩展程序按钮:

$("div").css("background-color", "#ff0000");
Run Code Online (Sandbox Code Playgroud)

...所以,我成功加载了jQuery,它可以成功访问和更改http://*.flickr.com/*页面的DOM元素.

但是,当我尝试使用去饱和插件去饱和图像(或者所有图像,实际上)时,我遇到了安全错误.我的代码:

$("img").desaturate();
Run Code Online (Sandbox Code Playgroud)

...最终以运行此行的jQuery.desaturate插件的代码结束:

var imgPixels = canvasContext.getImageData(0, 0, imgW, imgH); …
Run Code Online (Sandbox Code Playgroud)

security canvas getimagedata google-chrome-extension

10
推荐指数
1
解决办法
2万
查看次数

是否可以从画布上下文的getImageData在Web worker中生成图像(blob或data-url)?

后台设置

我有一个Web应用程序,处理从一组其他图像创建图像.我选择这样做的方法是通过读取一组图像并将它们放在HTML画布上.然后,我将每个画布作为jpeg导出到第三方API toDataURL,并将其转换为Blob.我面临的问题是,我有很多这些画布都将数据导出为jpg,并且消耗了大量资源.当每个画布尝试调用时,应用程序会变慢并变得无响应toDataURL.

我发现调用画布toDataUrl()或者toBlob()可能非常慢,特别是对于大画布尺寸.我想利用Web worker的多线程特性.

首先,我尝试传入canvas对象但是抛出了一个错误.事实证明,对象是一个问题,它们似乎要么被转换为字符串,要么在无法克隆时失败.无论哪种方式,我发现传递上下文的图像数据确实有效.数据以原始RGB值的形式传递,作为Uint8ClampedArray画布上下文的方法getImageData().

Main.js

var canvas = document.createElement('canvas');
var context = canvas.getContext('2d');
var worker = new Worker('myWorker.js');
worker.postMessage({
  image: context.getImageData(0, 0, canvas.width, canvas.height)
});
Run Code Online (Sandbox Code Playgroud)

myWorker.js

this.onmessage = function(e) {
  // GOAL: turn e.data.image into an image blob or dataUrl and return it.
  // e.g. this.postMessage(new Blob([e.data.image.data], {type: 'image/jpg'});
}
Run Code Online (Sandbox Code Playgroud)

我认为归结为知道如何将Uint8ClampedArray包含RGB信息的转换为jpg/png数据.

我认为这可能有用的原因是我认为getImageData只是从画布上下文复制现有的数据结构,因此没有那么昂贵toDataUrl.我在调用类似于下面代码块的内容时捕获了cpu配置文件:

var image = context.getImageData(0, 0, canvas.width, canvas.height)
var …
Run Code Online (Sandbox Code Playgroud)

javascript canvas getimagedata web-worker todataurl

9
推荐指数
1
解决办法
2635
查看次数

可怕的Canvas GetImageData()/ PutImageData()在移动设备上的表现

我正在做一些HTML5游戏,并且在地图开头加载我的精灵时,我使用GetImageData()/循环遍历所有图像/ PutImageData().

这在我的电脑上运行得非常好,然而,在我的手机上,它的速度非常慢.

PC: 5-6 ms
iPhone 4: 300-600 ms
Android HTC Desire S: 2500-3000 ms
Run Code Online (Sandbox Code Playgroud)

我一直在做一些非常基本的基准测试,并且GetImageData和PutImageData都运行得非常快,需要很长时间的是循环内容.

现在,我显然希望手机放慢速度,但1000x听起来有点过分,加载大约需要4分钟,因此我的HTC无法正常工作.此外,游戏中的其他所有内容都以非常合理的速度运行(主要是因为屏幕更小,但仍然,它在手机上的JS工作得非常好)


我在这个处理中所做的基本上是将精灵"变暗"到一定程度.我只是循环遍历所有像素,并将它们乘以值<1.这就是全部.

因为这太慢了......使用Canvas功能(合成,不透明等等)是否有更好的方法来做同样的事情,而不是逐个遍历所有像素?

注意:此图层具有一些100%透明像素,以及一些100%不透明像素.两者都需要保持100%不透明或100%透明.

我想到的事情是行不通的:
1)用新的画布绘制精灵,不透明度较低.这不起作用,因为我需要精灵保持不透明,只是更暗.
2)绘制精灵,并在它们上面画一个半透明的黑色矩形.这会让它们变暗,但它也会使我的透明像素不再透明......

有任何想法吗?

这是我正在使用的代码,以防万一你看到一些非常愚蠢的东西:

function DarkenCanvas(baseImage, ratio) {
    var tmpCanvas = document.createElement("canvas");
    tmpCanvas.width = baseImage.width;
    tmpCanvas.height = baseImage.height;
    var ctx = tmpCanvas.getContext("2d");
    ctx.drawImage(baseImage, 0, 0);

    var pixelData = ctx.getImageData(0, 0, tmpCanvas.width, tmpCanvas.height);
    var length = pixelData.data.length;
    for (var i = 0; i < length; i+= 4) {
        pixelData.data[i] = pixelData.data[i] * ratio;
        pixelData.data[i + 1] = …
Run Code Online (Sandbox Code Playgroud)

javascript performance html5 canvas getimagedata

8
推荐指数
2
解决办法
9221
查看次数

画布getImageData方法是机器/浏览器依赖吗?

客户需要帮助提取产品图像主色的程序.

我能够在Javascript中快速实现这一点; 下面的算法仅对图像上的3x3网格的中心正方形进行采样,以便快速估计图像中的T恤颜色.

var image = new Image();
image.onload = function() {
    try {
        // get dominant color by sampling the central square of a 3x3 grid on image
        var dominantColor = getDominantColor();

        // output color
        $("#output").html(dominantColor);
    }
    catch(e) {
        $("#output").html(e);
    }
};
image.src = "sample_image.jpg";

function getDominantColor() {

    // Copy image to canvas
    var canvas = $("<canvas/>")[0];
    canvas.width = image.width;
    canvas.height = image.height;
    canvas.getContext("2d").drawImage(image, 0, 0);

    // get pixels from the central square of a 3x3 grid
    var imageData …
Run Code Online (Sandbox Code Playgroud)

javascript canvas colors getimagedata

8
推荐指数
1
解决办法
633
查看次数