简体   繁体   English

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

[英]Brightness and Contrast for a canvas image with javascript

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 Tnx

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 文档

In my experience, fabric.js is the best javascript library for performing this.根据我的经验,fabric.js 是执行此操作的最佳 javascript 库。 Check out Fabric JS and how to do image filtering at: http://fabricjs.com/image-filters查看 Fabric JS 以及如何进行图像过滤: http : //fabricjs.com/image-filters

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>

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);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM