admin管理员组

文章数量:1435859

I am trying to alter an image by highlighting an area defined by coordinates.

I've been using two canvases, on top of each other. Now I don't know if this is the best way to do it in the first place. /

<canvas id='canvas'>Your browser does not support HTML5 canvas</canvas>
<canvas id='canvas2'>Your browser does not support HTML5 canvas</canvas>

Currently, I am using two images, but I wonder if there is any way to use masks on canvas.

Second of all, I'd like to save the output of the stacked canvases.

I am trying to alter an image by highlighting an area defined by coordinates.

I've been using two canvases, on top of each other. Now I don't know if this is the best way to do it in the first place. http://jsfiddle/9wJu8/

<canvas id='canvas'>Your browser does not support HTML5 canvas</canvas>
<canvas id='canvas2'>Your browser does not support HTML5 canvas</canvas>

Currently, I am using two images, but I wonder if there is any way to use masks on canvas.

Second of all, I'd like to save the output of the stacked canvases.

Share Improve this question asked Mar 7, 2014 at 0:17 jonaslljonasll 4933 gold badges9 silver badges20 bronze badges 2
  • deepliquid./content/Jcrop.html – a Commented Mar 7, 2014 at 0:28
  • This is a cropping library, I need to highlight and output an image. – jonasll Commented Mar 7, 2014 at 0:33
Add a ment  | 

2 Answers 2

Reset to default 3

What @Ken said but I think some of his code example was accidentally omitted:

A Demo: http://jsfiddle/m1erickson/Spkhz/

<!doctype html>
<html>
<head>
<link rel="stylesheet" type="text/css" media="all" href="css/reset.css" /> <!-- reset css -->
<script type="text/javascript" src="http://code.jquery./jquery.min.js"></script>
<style>
    body{ background-color: ivory; }
    canvas{border:1px solid red;}
</style>
<script>
$(function(){

    var canvas=document.getElementById("canvas");
    var ctx=canvas.getContext("2d");

    var cw=700;
    var ch=438;

    var img=new Image();
    img.onload=start;
    img.src="cat.jpg";
    function start(){
        canvas.width=cw;
        canvas.height=ch;

        // draw the image on the canvas
        ctx.drawImage(img,0,0,cw,ch);

        // darken the image with a 50% black fill
        ctx.save();
        ctx.globalAlpha=.50;
        ctx.fillStyle="black";
        ctx.fillRect(0,0,cw,ch);
        ctx.restore();

        // ctx.clip() the area to highlight
        // and redraw the whole image
        // (the image will draw only in the clipping region)
        ctx.save();
        ctx.beginPath();
        ctx.clearRect(300,100,200,100);
        ctx.rect(300,100,200,100);
        ctx.clip();
        ctx.drawImage(img,0,0,cw,ch);
        ctx.restore();

    }

}); // end $(function(){});
</script>
</head>
<body>
    <canvas id="canvas" width=300 height=300></canvas>
</body>
</html>

You can use a single canvas for this:

➔ Draw plete image
➔ Draw a transparent black rectangle on top
➔ Use drawImage() with clipping settings

For example:

// draw full image
ctx.drawImage(img, 0, 0);

// cover with a darkened overlay
ctx.fillStyle = 'rgba(0,0,0, 0.5);
ctx.fillRect(0, 0, canvas.width, canvas.height);

// draw region of image
ctx.drawImage(img, x, y, w, h,  x, y, w, h);

where x, y, w and h is the region you want to highlight.

To save out as an image just use toDataURL() on the canvas element.

本文标签: javascriptHighlight area of image with canvasJSStack Overflow