使用 javascript 的画布图像的亮度和对比度

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/3905572/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-25 02:38:32  来源:igfitidea点击:

Brightness and Contrast for a canvas image with javascript

javascriptimagecanvasbrightnesscontrast

提问by Claudio

I have an image in a tag

我在标签中有一张图片

var img = new Image();
ctx.drawImage(img,0,0,img.width,img.height);
ecc...

How is possible to change the Brightness and Contrast of this image with javascript?

如何使用 javascript 更改此图像的亮度和对比度?

Tnx

田纳西州

采纳答案by Kyle Jones

There's at least one javascript library I know of which can do this, Pixastic

我知道至少有一个 javascript 库可以做到这一点,Pixastic

Usage might look like this.

用法可能如下所示。

Pixastic.process(canvas, 'brightness',
    {
        'brightness': 60,
        'contrast': 0.5,
        'leaveDOM': true
    },
    function(img) {
        ctx.drawImage(img, 0, 0);
    }
);

The library is kind of intended to work with images within your page and it replaces them with canvas elements which contain the rendered result.

该库旨在处理页面中的图像,并将它们替换为包含渲染结果的画布元素。

But in the code above I've passed in a canvas element rather than an image and included the 'leaveDOM' property to prevent the pixastic library from swapping your canvas in the DOM for the one it creates.

但是在上面的代码中,我传入了一个画布元素而不是图像,并包含了 'leaveDOM' 属性,以防止 pixastic 库将 DOM 中的画布替换为它创建的画布。

To display the results I've included the callback function which just does ctx.drawImage to put the contents into your original canvas.

为了显示结果,我包含了回调函数,它只是执行 ctx.drawImage 将内容放入原始画布中。

Hope that makes sense.

希望这是有道理的。

You can check the documentation for more examples. Pixastic Documentation

您可以查看文档以获取更多示例。Pixastic 文档

回答by Brandon Johnson

In my experience, fabric.js is the best javascript library for performing this. Check out Fabric JS and how to do image filtering at: http://fabricjs.com/image-filters

根据我的经验,fabric.js 是执行此操作的最佳 javascript 库。查看 Fabric JS 以及如何进行图像过滤,请访问:http: //fabricjs.com/image-filters

回答by Lax

you can try this , see comment

你可以试试这个,看评论

<script type="application/javascript">  

function clickMeEvent(obj)
{
if (obj.style.opacity=="0.9")
    {
    obj.style.opacity="0.7";
    }
else if (obj.style.opacity=="0.7")
    {
    obj.style.opacity="0.5";        
    }
else if (obj.style.opacity=="0.5")
    {
    obj.style.opacity="0.3";        
    }
else if (obj.style.opacity=="0.3")
    {
    obj.style.opacity="0.1";        
    }
else
    {
    obj.style.opacity="0.0";

    }
}

</script>

回答by Jeff Norman

You can try this (c# code):

你可以试试这个(c#代码):

 Bitmap originalImage;
 Bitmap adjustedImage;
 double brightness = 1.0f; // no change in brightness
 double constrast = 2.0f; // twice the contrast
 double gamma = 1.0f; // no change in gamma

 float adjustedBrightness = brightness - 1.0f;
 float[][] ptsArray ={
                new float[] {contrast, 0, 0, 0, 0}, // scale red
                new float[] {0, contrast, 0, 0, 0}, // scale green
                new float[] {0, 0, contrast, 0, 0}, // scale blue
                new float[] {0, 0, 0, 1.0f, 0}, // don't scale alpha
                new float[] {adjustedBrightness, adjustedBrightness, adjustedBrightness, 0, 1}};

 imageAttributes = new ImageAttributes();
 imageAttributes.ClearColorMatrix();
 imageAttributes.SetColorMatrix(new ColorMatrix(ptsArray), ColorMatrixFlag.Default, ColorAdjustType.Bitmap);
 imageAttributes.SetGamma(gamma, ColorAdjustType.Bitmap);
 Graphics g = Graphics.FromImage(adjustedImage);
 g.DrawImage(originalImage, new Rectangle(0,0,adjustedImage.Width,adjustedImage.Height)
            ,0,0,bitImage.Width,bitImage.Height,
 GraphicsUnit.Pixel, imageAttributes);