javascript - 应用过滤器后如何下载图像文件?
问题描述
我是初学者。我只是在做一个练习项目。在这里,我使用这些代码将图像上传拖放到 a 上<div>
并在其上应用过滤器(到目前为止它工作正常)。我没有使用画布。我知道如何从画布下载的过程,但不知道如何<div>
从appendChild
. 我不知道 jquery 或其他类型的东西。我只想在应用过滤器后下载我的图片。我在下面给出 HTML 和 JS。如果您知道它,请帮助我提供代码和一些解释,我将不胜感激。我没有添加 CSS 代码,因为这个问题与它无关。
const dropzone = document.querySelector(".drop__zone");
const fileinput = document.getElementById("mainup");
const dropzone2 = document.querySelector(".dropzone");
const img = new Image();
const downloadBtn = document.getElementById("maindown");
const filtercontrols = document.querySelectorAll('.filter__slider');
let fileName = "";
fileinput.addEventListener('change',()=>{
const file2 = document.getElementById("mainup").files[0];
const reader2 = new FileReader();
if (file2) {
fileName = file2.name;
reader2.readAsDataURL(file2);
}
reader2.onload = ()=>{
img.src = reader2.result;
img.style.maxHeight = "480px";
img.style.maxWidth = "640px";
dropzone.style.backgroundColor = "transparent";
dropzone2.style.display = "none";
dropzone.style.border = "none";
dropzone.appendChild(img);
return false;
};
});
dropzone.ondragover = function (){
this.className = "drop__zone can__over";
dropzone2.style.display = "none";
return false;
};
dropzone.ondragleave = function(){
this.className = "drop__zone";
dropzone2.style.display = "block";
return false;
};
dropzone.ondrop = function (e){
e.preventDefault();
e.stopPropagation();
this.className = "drop__zone";
dropzone2.style.display = "none";
dropzone2.style.border = "none";
update(e.dataTransfer.files[0]);
};
var update = function(file){
var reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = ()=>{
img.src = reader.result;
img.style.maxHeight = "480px";
img.style.maxWidth = "640px";
dropzone.style.backgroundColor = "transparent";
dropzone.appendChild(img);
return false;
};
};
function filter(){
var computedfilters = "";
filtercontrols.forEach(function(item){
computedfilters += item.getAttribute('data-filter') + '(' + item.value + item.getAttribute('data-scale') + ') ';
});
img.style.filter = computedfilters;
};
<body>
<div class="bgimg"></div>
<div class="box"><a href="file:///G:/HTML%20CSS%20JAVA/Project%20Filter/filter.html">
<h1>Filtaro</h1>
</a></div>
<div class="intro">
<h2>Welcome to Filtaro !</h2> <br>
<p>Filter your images with different filters.No quality decrease ! Have Fun !</p>
</div>
<div class="drop__zone" id="drop__zone"></div>
<div class="dropzone" id="drop__zone">
<span class="dropzone__span">
Drag a Image Here <br>or<br>
</span><br>
<input type="file" id="mainup" multiple="false" accept="image/*" class="fileinput">
<label for="mainup" class="btn__label" id="lab1">Upload a Picture</label
</div>
<div class="btn">
<input type="button" id="maindown">
<label for="maindown" class="btn__label" id="lab2">Download</label></div>
<div class="filter">
<label for="blur" id="blur__label" class="filter__label">Blur</label><br>
<input type="range" min="0" max="200" value="0" step="1" onchange="filter()" data-filter="blur" data-scale="px" class="filter__slider" id="blur"><br>
<label for="brightness" id="brightness__label" class="filter__label">Brightness</label><br>
<input type="range" min="0" max="400" value="100" step="1" onchange="filter()" data-filter="brightness" data-scale="%" class="filter__slider" id="brightness"><br>
<label for="contrast" id="contrast__label" class="filter__label">Contrast</label><br>
<input type="range" min="0" max="400" value="100" step="1" onchange="filter()" data-filter="contrast" data-scale="%" class="filter__slider" id="contrast"><br>
<label for="gray" id="gray__label" class="filter__label">Grayscale</label><br>
<input type="range" min="0" max="200" value="0" step="1" onchange="filter()" data-filter="grayscale" data-scale="%" class="filter__slider" id="gray"><br>
<label for="Hue" id="Hue__label" class="filter__label">Hue</label><br>
<input type="range" min="0" max="360" value="0" step="1" onchange="filter()" data-filter="hue-rotate" data-scale="deg" class="filter__slider" id="Hue"><br>
<label for="inv" id="blur__label" class="filter__label">Invert</label><br>
<input type="range" min="0" max="200" value="0" step="1" onchange="filter()" data-filter="invert" data-scale="%" class="filter__slider" id="inv"><br>
<label for="opacity" id="opacity__label" class="filter__label">Opacity</label><br>
<input type="range" min="0" max="400" value="100" step="1" onchange="filter()" data-filter="opacity" data-scale="%" class="filter__slider" id="opacity"><br>
<label for="saturate" id="saturate__label" class="filter__label">Saturate</label><br>
<input type="range" min="1" max="200" value="1" step="1" onchange="filter()" data-filter="saturate" data-scale="" class="filter__slider" id="saturate"><br>
<label for="sepia" id="sepia__label" class="filter__label">Sepia</label><br>
<input type="range" min="0" max="200" value="0" step="1" onchange="filter()" data-filter="sepia" data-scale="%" class="filter__slider" id="sepia">
</div>
<script src="filter.js"></script>
</body>
解决方案
推荐阅读
- c# - 如何使用 C# 导出 Excel 文件
- r - 如何将列表中的嵌套变量分配到 R 中的新列表或向量中?
- javascript - MongoError:E11000 重复键错误集合:ProductsRepo.users 索引:username_1 dup key:{ username:null }
- c - 使用像 wchar_t 这样的类型有什么意义?
- angular - 如何在没有组件的情况下从Angular 9+中的延迟加载模块动态注入服务?
- android - 具有视图绑定的片段中的问题获取值 Material TexInputEditText
- java - 尽管 testng jar 出现在 maven 依赖项下,但没有找到类 def
- python - 在R中读取特定格式的二进制数据
- javascript - 如何为数组输入赋值
- python - 一列中的多个年份值