Манипуляции с изображением (часто) выполняются путем создания / загрузки <canvas>
, рисования изображения на <canvas>
и внесения некоторых необходимых изменений. В этом случае просто загрузите изображение в <canvas>
и перерисуйте его с другим размером на холсте 2d context
.
Фрагмент ниже показывает два варианта: с degradeImage()
и без degradeImageOnParent()
уже существующих <canvas>
в документе.
СТРАННО фрагмент показывает только одно изображение, а за пределами Stackoverflow он показывает четыре: исходное и 3 ухудшенных изображения. Должна быть проблема с загрузкой документа, мы работаем над этим ....
Решено отключено docInit
...
//document.addEventListener('DOMContentLoaded',docInit);
//function docInit() {
document.getElementById('source').onload = function () {
degradeImage(0.75, this, document.getElementById("cvs1"));
degradeImage(0.50, this, document.getElementById("cvs2"));
// Add canvas on-the-fly
degradeImageOnParent(document.getElementById('parent'),0.25,this,'cvs3');
};
//};
function degradeImage(scale,img,cvs) {
if (!cvs) { // if not passed, create canvas on-the-fly
cvs = document.createElement('canvas');
}
var ctx = cvs.getContext('2d');
cvs.width = img.width * scale; // assign scaled size
cvs.height = img.height * scale;
ctx.imageSmoothingEnabled = true; // default value, here for reference only
ctx.drawImage(img, 0, 0, cvs.width, cvs.height); // fill the canvas
return cvs; // Useful when created inside function
}
function degradeImageOnParent(parent,scale,img,cvsID) {
var cvs = degradeImage(scale,img);
if (cvsID) cvs.id = cvsID; // [optional ID]
parent.appendChild(cvs);
}
.wrapper { width: 100% }
canvas,img { width: 24% } /* original is 400x600 */
<div class="wrapper" id="parent">
<img id="source" src="https://i.postimg.cc/76JT0MBh/Mona-Lisa-400.jpg">
<canvas id="cvs1"></canvas>
<canvas id="cvs2"></canvas>
</div>