- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想实现一个 slider 控件来改变图像的亮度,很像此链接中显示的控件,但通过 HTML5 Canvas 实现:
我想通过使用 html 上的输入 slider 并在 JavaScript 上定义来控制图像的亮度。
知道如何使用 JavaScript 更改该图像的亮度吗?
// Dispatch a change event to file input element.
$(document).ready(function() {
$('#imgfile').change(function(e) {
var file = e.target.files[0],
imageType = /image.*/;
if (!file.type.match(imageType))
return;
// Get the uploaded file from the event handler and get a data URL by using the FileReader object.
var reader = new FileReader();
reader.onload = fileOnload;
reader.readAsDataURL(file);
});
// Use some jQuery to trigger click on canvas to input
$('#canvas').on('click', function() {
$('#imgfile').trigger('click');
//show the slider after click to choose the image
$('#slider').show();
});
// Make an img element with the data URL and draw it on the canvas.
function fileOnload(e) {
//Like this in javascript make an image
// img = new Image();
//img.onload = imageLoaded;
var $img = $('<img>', { src: e.target.result });
$img.load(function() {
var canvas = $('#canvas')[0];
var context = canvas.getContext('2d');
context.drawImage(this, 0, 0, canvas.width, canvas.height );
});
}
var slider = $('#slider').change(function(){
console.log(this.value);
})
});
body {
text-align: center;
width: 100%;
}
canvas {
border: 1px solid black;
margin: 50px auto;
}
.container {
margin: 0 auto;
}
@media(max-width:1200px) {
.container {
margin: 0 50px;
}
#canvas {
width: 100%;
height: auto;
}
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<link rel="stylesheet" href="css/style.css">
<script src="https://cdn.rawgit.com/konvajs/konva/1.7.6/konva.min.js"></script>
<script src="js/jquery.js" charset="utf-8"></script>
<script src="js/main.js" charset="utf-8"></script>
<title>Brightness-Adjustment</title>
</head>
<body>
<div class="container">
<canvas id="canvas" width="600" height="384">
<!-- <img src="https://www.smashingmagazine.com/wp-content/uploads/2015/06/10-dithering-opt.jpg" width="150" height="150" alt=""/> -->
</canvas>
<form action='#' onsubmit="return false;">
<input type='file' id='imgfile' style="display: none;"/>
<input id="slider" type="range" min="-1" max="1" step="0.05" value="0" style="display: none;">
</form>
</div>
</body>
</html>
最佳答案
那个演示非常非常老,速度慢,而且完全过时了。如今,有多种方法可以实现实时图像过滤器,并且不限于同一域和 CORS 安全图像。
有关 Canvas 的所有信息,请访问 MDN CanvasRenderingContext2D
ctx.filter
属性简单的解决方案是使用 Canvas 过滤器属性并将亮度设置为您想要的值。绘制图像。
ctx.filter = "brightness(150%)";
ctx.drawImage(image,0,0);
如下例所示。
(请注意,SVG 亮度与亮度滤镜不同,但这是它们对亮度含义的解释)
const imageUrl = "https://en.wikipedia.org/wiki/Carl_Friedrich_Gauss#/media/File:Carl_Friedrich_Gauss_1840_by_Jensen.jpg";
const ctx = canvas.getContext("2d");
ctx.fillText("Please wait loading image..",20,20);
const image = new Image;
image.src = imageUrl;
image.onload = () => {
canvas.width = image.width;
canvas.height = image.height;
ctx.drawImage(image, 0, 0);
slider.addEventListener("mousemove", () => {
if (slider.value !== slideOldVal) {
setBrightness(Number(slider.value));
}
val.textContent = slider.value;
slideOldVal = Number(slider.value);
});
}
function setBrightness(value) {
ctx.filter = `brightness(${value + 100}%)`;
ctx.drawImage(image, 0, 0);
}
var slideOldVal;
canvas {
border: 2px solid black;
}
Brightness<input id="slider" type="range" min="-100" max="400" value="0" step="1"></input><span id="val"></span><br>
<canvas id="canvas"></canvas>
ctx.globalCompositeOperation
属性有点复杂,但有更多支持(好吧,IE11 停留在 2014 年,所以只要我们迎合懒惰的客户,我们都停留在 2014 年)
要提亮,请使用复合操作“变亮”并在图像上绘制浅色填充以设置亮度。该效果会降低对比度,因此我喜欢通过使用减亮滤镜在顶部绘制图像一次来提高图像对比度。
ctx.drawImage(image,0,0);
ctx.globalCompositeOperation = "lighten";
ctx.drawImage(image,0,0); // draw image to bump up the contrast
ctx.globalAlpha = amount; // 0-1
ctx.fillStyle = "white";
ctx.fillRect(0,0,ctx.canvas.width,ctx.canvas.height);
要降低亮度,请使用补偿模式“乘法”,然后使用 Alpha 控制数量在图像上绘制黑色。
示例展示了如何操作。
const imageUrl = "http://camanjs.com/images/example1_600.jpg";
const ctx = canvas.getContext("2d");
ctx.fillText("Please wait loading image..",20,20);
const image = new Image;
image.src = imageUrl;
image.onload = () => {
canvas.width = image.width;
canvas.height = image.height;
ctx.drawImage(image, 0, 0);
slider.addEventListener("mousemove", () => {
if (slider.value !== slideOldVal) {
setBrightness(Number(slider.value));
}
val.textContent = slider.value;
slideOldVal = Number(slider.value);
});
}
ctx.drawImage(image, 0, 0);
ctx.globalCompositeOperation = "lighten";
ctx.fillStyle = "white";
ctx.fillRect(0, 0, ctx.canvas.width, ctx.canvas.height);
function setBrightness(value) {
ctx.drawImage(image, 0, 0);
ctx.save();
if (value < 0) {
ctx.globalCompositeOperation = "multiply";
ctx.fillStyle = "black";
ctx.globalAlpha = -value / 100;
ctx.fillRect(0, 0, canvas.width, canvas.height);
} else if (value > 0) {
ctx.fillStyle = "white";
ctx.globalCompositeOperation = "lighten";
ctx.globalAlpha = 1;
ctx.drawImage(image, 0, 0);
ctx.globalAlpha = value / 100;
ctx.fillRect(0, 0, canvas.width, canvas.height);
}
ctx.restore();
}
var slideOldVal;
canvas {
border: 2px solid black;
}
Brightness<input id="slider" type="range" min="-100" max="100" value="0" step="1"></input><span id="val"></span><br>
<canvas id="canvas"></canvas>
注意示例中使用的图像来自OP的链接,仅供比较
关于jquery - HTML5 Canvas 亮度控制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47118229/
我想将一些颜色值从众所周知的 HSL 转换为鲜为人知的 HSLum 怎么做? hsl(0, 1.0, 0.5) - rgb red is hslum(0, 1.0., 0.54) hsl(120,
有没有办法在 android 中获取有关屏幕类型的信息?我想知道我使用的设备是 amoled/ips/tft 还是获得屏幕的最大亮度,不是相对亮度,而是尼特或坎德拉/cm2 的亮度 最佳答案 与设备的
我的 iPhone 应用程序使用 AVFoundation 的 AVCaptureSession 从摄像头捕获实时数据。我能够在运行时访问它的委托(delegate)方法中的数据并从中创建图像。它可以
我正在使用带有 AVFoundation 的前置摄像头开发镜像应用程序。我已经完成了向 UIView 显示相机屏幕。但是如何调整亮度?代码是这样的: -(void)AVCaptureInit {
我有一个 android 应用程序,我正在使用下面的代码增加图像的亮度。但这非常慢,所以有没有人知道在 android 中增强 ImageView 的图像亮度的快速方法。请记住,这是提高 ImageV
我想做的是创建一个代码,以便当用户移动 SeekBar 时,它会更改手机的亮度(随着移动)并将其设置为手机的 MAIN 设置。我已经剪掉了我认为是问题所在的部分代码.. public void onP
我制作了一个手电筒应用程序,可以通过按钮打开相机的 LED 灯。如果可能的话,我希望能够使用搜索栏更改 LED 灯的亮度。 如果这有帮助的话,这是我按钮中的代码: public class Flash
我正在开发一款编辑视频的应用。录制视频时没有问题,因为最初我会设置所有设置,如饱和度、亮度、对比度等。 但问题在于录制的视频。我无法更改已录制视频的所有上述属性。 任何人请告诉我他的问题的解决方案。
这个问题在这里已经有了答案: I do not want to inherit the child opacity from the parent in CSS (18 个答案) 关闭 7 年前。
我有两个网络摄像头(都是罗技 C615)。我想以一种方式调整网络摄像头,使它们在相同的环境中拍摄出几乎相同的照片。 (原因是我想将此图像渲染到 occulus rift 上)。 我正在使用 OpenC
我有一个使用 CSS 创建的圆圈,如下所示: .circle { width: 40px; height: 40px; -moz-border-radius: 50px;
我正在尝试过滤位图图像以增加或减少色相、饱和度和亮度值。 我的代码运行良好,但速度很慢。 我在内存中锁定了两个位图,原始源和当前目标。用户可以移动各种 trackbar 控件来修改每个值,然后将其转换
我有一个 android 应用程序,我在其中使用 android 相机拍照。经过一番努力后,我设法在我想要的地方和我想要的方式拍摄照片。最后的问题是质量图片。 当我的预览开始时,一切看起来都非常清晰和
是否有c++函数或opencv库可以计算给定8*8 block 或总图像亮度的平均对数?我的目标是计算平均亮度并将其存储回 block 中。另外,有没有另一种适合人类视觉系统的科学方法来计算整体亮度或
寻找答案 2 周。我有一个工具可以直接在网络浏览器中调整图像的对比度和亮度,并使用 CSS3 属性来显示结果。但我还应该将这些修改应用于服务器端的原始 JPG,并将其输出回用户。 我该怎么做?我正在使
我正在尝试将对比度和亮度应用于内存中的位图,但我完全迷路了。目前我正在尝试使用 Magick++ 来完成它,但如果其他 API 之一能更好地工作,我会洗耳恭听。我设法找到 Magick::Image:
我正在尝试使用 MCP3002 ADC 和电位计来控制 PWMLED 亮度列表。 我的问题是,当我运行我的脚本时,除了连接到 MCP3002 ADC 的电位器之外,一切都按预期运行,它不会在我调整旋钮
假设我们有一张在光线不足的情况下拍摄的照片。图像比平时更暗,但仍可识别。 现在我们想让它更亮,让它看起来像是在充足的光照条件下拍摄的。 我们应该将图像转换为 YUV 并调整 Y channel (亮度
嗨,我的客户有一个新要求,他需要在他的网站上添加字体大小增加和对比度/亮度、声音控制。 因此,在单击任何一个图像时,都会出现一个 slider ,他可以从中执行相应的操作。 我如何使用 jquery
我在游戏中使用 SVG 文件,我想为其添加透明度和亮度效果。所以我想要的是 Sprite 变得越来越透明,直到看不见。这看起来比刚刚消失的 Sprite 平滑得多。这还允许在白屏变得不那么透明然后又变
我是一名优秀的程序员,十分优秀!